diff options
Diffstat (limited to 'apps/user_ldap')
474 files changed, 18858 insertions, 16832 deletions
diff --git a/apps/user_ldap/ajax/clearMappings.php b/apps/user_ldap/ajax/clearMappings.php index b485d62dead..c3b64f08a16 100644 --- a/apps/user_ldap/ajax/clearMappings.php +++ b/apps/user_ldap/ajax/clearMappings.php @@ -1,32 +1,19 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christopher Schäpers <kondou@ts.unde.re> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - -use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\Mapping\UserMapping; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IDBConnection; +use OCP\IUserManager; +use OCP\Server; +use OCP\User\Events\BeforeUserIdUnassignedEvent; +use OCP\User\Events\UserIdUnassignedEvent; +use OCP\Util; // Check user and app status \OC_JSON::checkAdminUser(); @@ -37,22 +24,28 @@ $subject = (string)$_POST['ldap_clear_mapping']; $mapping = null; try { if ($subject === 'user') { - $mapping = new UserMapping(\OC::$server->getDatabaseConnection()); + $mapping = Server::get(UserMapping::class); + /** @var IEventDispatcher $dispatcher */ + $dispatcher = Server::get(IEventDispatcher::class); $result = $mapping->clearCb( - function ($uid) { - \OC::$server->getUserManager()->emit('\OC\User', 'preUnassignedUserId', [$uid]); + function (string $uid) use ($dispatcher): void { + $dispatcher->dispatchTyped(new BeforeUserIdUnassignedEvent($uid)); + /** @psalm-suppress UndefinedInterfaceMethod For now we have to emit, will be removed when all hooks are removed */ + Server::get(IUserManager::class)->emit('\OC\User', 'preUnassignedUserId', [$uid]); }, - function ($uid) { - \OC::$server->getUserManager()->emit('\OC\User', 'postUnassignedUserId', [$uid]); + function (string $uid) use ($dispatcher): void { + $dispatcher->dispatchTyped(new UserIdUnassignedEvent($uid)); + /** @psalm-suppress UndefinedInterfaceMethod For now we have to emit, will be removed when all hooks are removed */ + Server::get(IUserManager::class)->emit('\OC\User', 'postUnassignedUserId', [$uid]); } ); } elseif ($subject === 'group') { - $mapping = new GroupMapping(\OC::$server->getDatabaseConnection()); + $mapping = new GroupMapping(Server::get(IDBConnection::class)); $result = $mapping->clear(); } if ($mapping === null || !$result) { - $l = \OC::$server->getL10N('user_ldap'); + $l = Util::getL10N('user_ldap'); throw new \Exception($l->t('Failed to clear the mappings.')); } \OC_JSON::success(); diff --git a/apps/user_ldap/ajax/deleteConfiguration.php b/apps/user_ldap/ajax/deleteConfiguration.php index 0f3e28a33f3..68bce69f982 100644 --- a/apps/user_ldap/ajax/deleteConfiguration.php +++ b/apps/user_ldap/ajax/deleteConfiguration.php @@ -1,42 +1,24 @@ <?php + +use OCA\User_LDAP\Helper; +use OCP\Server; +use OCP\Util; + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - // Check user and app status \OC_JSON::checkAdminUser(); \OC_JSON::checkAppEnabled('user_ldap'); \OC_JSON::callCheck(); $prefix = (string)$_POST['ldap_serverconfig_chooser']; -$helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); +$helper = Server::get(Helper::class); if ($helper->deleteServerConfiguration($prefix)) { \OC_JSON::success(); } else { - $l = \OC::$server->getL10N('user_ldap'); + $l = Util::getL10N('user_ldap'); \OC_JSON::error(['message' => $l->t('Failed to delete the server configuration')]); } diff --git a/apps/user_ldap/ajax/getConfiguration.php b/apps/user_ldap/ajax/getConfiguration.php index e3181d9c7f5..79a7372813c 100644 --- a/apps/user_ldap/ajax/getConfiguration.php +++ b/apps/user_ldap/ajax/getConfiguration.php @@ -1,38 +1,19 @@ <?php + +use OCA\User_LDAP\LDAP; + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - // Check user and app status \OC_JSON::checkAdminUser(); \OC_JSON::checkAppEnabled('user_ldap'); \OC_JSON::callCheck(); $prefix = (string)$_POST['ldap_serverconfig_chooser']; -$ldapWrapper = new OCA\User_LDAP\LDAP(); +$ldapWrapper = new LDAP(); $connection = new \OCA\User_LDAP\Connection($ldapWrapper, $prefix); $configuration = $connection->getConfiguration(); if (isset($configuration['ldap_agent_password']) && $configuration['ldap_agent_password'] !== '') { diff --git a/apps/user_ldap/ajax/getNewServerConfigPrefix.php b/apps/user_ldap/ajax/getNewServerConfigPrefix.php index ec38fbb8ff0..e5ba6375c73 100644 --- a/apps/user_ldap/ajax/getNewServerConfigPrefix.php +++ b/apps/user_ldap/ajax/getNewServerConfigPrefix.php @@ -1,49 +1,34 @@ <?php + +use OCA\User_LDAP\Configuration; +use OCA\User_LDAP\Helper; +use OCP\Server; + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - // Check user and app status \OC_JSON::checkAdminUser(); \OC_JSON::checkAppEnabled('user_ldap'); \OC_JSON::callCheck(); -$helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); +$helper = Server::get(Helper::class); $serverConnections = $helper->getServerConfigurationPrefixes(); sort($serverConnections); $lk = array_pop($serverConnections); $ln = (int)str_replace('s', '', $lk); -$nk = 's'.str_pad($ln + 1, 2, '0', STR_PAD_LEFT); +$nk = 's' . str_pad((string)($ln + 1), 2, '0', STR_PAD_LEFT); $resultData = ['configPrefix' => $nk]; -$newConfig = new \OCA\User_LDAP\Configuration($nk, false); +$newConfig = new Configuration($nk, false); if (isset($_POST['copyConfig'])) { - $originalConfig = new \OCA\User_LDAP\Configuration($_POST['copyConfig']); + $originalConfig = new Configuration($_POST['copyConfig']); $newConfig->setConfiguration($originalConfig->getConfiguration()); } else { - $configuration = new \OCA\User_LDAP\Configuration($nk, false); + $configuration = new Configuration($nk, false); $newConfig->setConfiguration($configuration->getDefaults()); $resultData['defaults'] = $configuration->getDefaults(); } diff --git a/apps/user_ldap/ajax/setConfiguration.php b/apps/user_ldap/ajax/setConfiguration.php index 08d3680187b..815ef040257 100644 --- a/apps/user_ldap/ajax/setConfiguration.php +++ b/apps/user_ldap/ajax/setConfiguration.php @@ -1,30 +1,12 @@ <?php + +use OCA\User_LDAP\LDAP; + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - // Check user and app status \OC_JSON::checkAdminUser(); \OC_JSON::checkAppEnabled('user_ldap'); @@ -43,7 +25,7 @@ foreach ($chkboxes as $boxid) { } } -$ldapWrapper = new OCA\User_LDAP\LDAP(); +$ldapWrapper = new LDAP(); $connection = new \OCA\User_LDAP\Connection($ldapWrapper, $prefix); $connection->setConfiguration($_POST); $connection->saveConfiguration(); diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php index 22cdea388c1..b77439fa3e8 100644 --- a/apps/user_ldap/ajax/testConfiguration.php +++ b/apps/user_ldap/ajax/testConfiguration.php @@ -1,60 +1,48 @@ <?php + +use OCA\User_LDAP\Exceptions\ConfigurationIssueException; +use OCA\User_LDAP\LDAP; +use OCP\ISession; +use OCP\Server; +use OCP\Util; + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - // Check user and app status \OC_JSON::checkAdminUser(); \OC_JSON::checkAppEnabled('user_ldap'); \OC_JSON::callCheck(); -$l = \OC::$server->getL10N('user_ldap'); +$l = Util::getL10N('user_ldap'); -$ldapWrapper = new OCA\User_LDAP\LDAP(); +$ldapWrapper = new LDAP(); $connection = new \OCA\User_LDAP\Connection($ldapWrapper, $_POST['ldap_serverconfig_chooser']); try { - $configurationOk = true; + $configurationError = ''; $conf = $connection->getConfiguration(); if ($conf['ldap_configuration_active'] === '0') { //needs to be true, otherwise it will also fail with an irritating message $conf['ldap_configuration_active'] = '1'; - $configurationOk = $connection->setConfiguration($conf); } - if ($configurationOk) { + try { + $connection->setConfiguration($conf, throw: true); + } catch (ConfigurationIssueException $e) { + $configurationError = $e->getHint(); + } + if ($configurationError === '') { //Configuration is okay /* - * Clossing the session since it won't be used from this point on. There might be a potential + * Closing the session since it won't be used from this point on. There might be a potential * race condition if a second request is made: either this request or the other might not * contact the LDAP backup server the first time when it should, but there shouldn't be any * problem with that other than the extra connection. */ - \OC::$server->getSession()->close(); + Server::get(ISession::class)->close(); if ($connection->bind()) { /* * This shiny if block is an ugly hack to find out whether anonymous @@ -81,7 +69,7 @@ try { } } else { \OC_JSON::error(['message' - => $l->t('Invalid configuration. Please have a look at the logs for further details.')]); + => $l->t('Invalid configuration: %s', $configurationError)]); } } catch (\Exception $e) { \OC_JSON::error(['message' => $e->getMessage()]); diff --git a/apps/user_ldap/ajax/wizard.php b/apps/user_ldap/ajax/wizard.php index 103ba3cd384..056299e1bff 100644 --- a/apps/user_ldap/ajax/wizard.php +++ b/apps/user_ldap/ajax/wizard.php @@ -1,80 +1,46 @@ <?php + +use OCA\User_LDAP\AccessFactory; +use OCA\User_LDAP\Configuration; +use OCA\User_LDAP\LDAP; +use OCA\User_LDAP\Wizard; +use OCP\Server; +use OCP\Util; + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - // Check user and app status \OC_JSON::checkAdminUser(); \OC_JSON::checkAppEnabled('user_ldap'); \OC_JSON::callCheck(); -$l = \OC::$server->getL10N('user_ldap'); +$l = Util::getL10N('user_ldap'); if (!isset($_POST['action'])) { \OC_JSON::error(['message' => $l->t('No action specified')]); } $action = (string)$_POST['action']; - if (!isset($_POST['ldap_serverconfig_chooser'])) { \OC_JSON::error(['message' => $l->t('No configuration specified')]); } $prefix = (string)$_POST['ldap_serverconfig_chooser']; -$ldapWrapper = new \OCA\User_LDAP\LDAP(); -$configuration = new \OCA\User_LDAP\Configuration($prefix); +$ldapWrapper = new LDAP(); +$configuration = new Configuration($prefix); $con = new \OCA\User_LDAP\Connection($ldapWrapper, $prefix, null); $con->setConfiguration($configuration->getConfiguration()); -$con->ldapConfigurationActive = true; +$con->ldapConfigurationActive = (string)true; $con->setIgnoreValidation(true); -$userManager = new \OCA\User_LDAP\User\Manager( - \OC::$server->getConfig(), - new \OCA\User_LDAP\FilesystemHelper(), - new \OCA\User_LDAP\LogWrapper(), - \OC::$server->getAvatarManager(), - new \OCP\Image(), - \OC::$server->getUserManager(), - \OC::$server->getNotificationManager(), - \OC::$server->get(\OCP\Share\IManager::class) -); +$factory = Server::get(AccessFactory::class); +$access = $factory->get($con); -$access = new \OCA\User_LDAP\Access( - $con, - $ldapWrapper, - $userManager, - new \OCA\User_LDAP\Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()), - \OC::$server->getConfig(), - \OC::$server->getUserManager() -); - -$wizard = new \OCA\User_LDAP\Wizard($configuration, $ldapWrapper, $access); +$wizard = new Wizard($configuration, $ldapWrapper, $access); switch ($action) { case 'guessPortAndTLS': @@ -125,18 +91,21 @@ switch ($action) { } case 'save': - $key = isset($_POST['cfgkey']) ? $_POST['cfgkey'] : false; - $val = isset($_POST['cfgval']) ? $_POST['cfgval'] : null; + $key = $_POST['cfgkey'] ?? false; + $val = $_POST['cfgval'] ?? null; if ($key === false || is_null($val)) { \OC_JSON::error(['message' => $l->t('No data specified')]); exit; } + if (is_array($key)) { + \OC_JSON::error(['message' => $l->t('Invalid data specified')]); + exit; + } $cfg = [$key => $val]; $setParameters = []; $configuration->setConfiguration($cfg, $setParameters); if (!in_array($key, $setParameters)) { - \OC_JSON::error(['message' => $l->t($key. - ' Could not set configuration %s', $setParameters[0])]); + \OC_JSON::error(['message' => $l->t('Could not set configuration %1$s to %2$s', [$key, $setParameters[0]])]); exit; } $configuration->saveConfiguration(); diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml index 43bd1d3cb21..ead312d7f5c 100644 --- a/apps/user_ldap/appinfo/info.xml +++ b/apps/user_ldap/appinfo/info.xml @@ -1,4 +1,9 @@ <?xml version="1.0"?> +<!-- + - SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + - SPDX-FileCopyrightText: 2011-2016 ownCloud, Inc. + - SPDX-License-Identifier: AGPL-3.0-only + --> <info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd"> <id>user_ldap</id> @@ -9,7 +14,7 @@ A user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation. </description> - <version>1.11.0</version> + <version>1.23.0</version> <licence>agpl</licence> <author>Dominik Schmidt</author> <author>Arthur Schiwon</author> @@ -24,7 +29,7 @@ A user logs into Nextcloud with their LDAP or AD credentials, and is granted acc <bugs>https://github.com/nextcloud/server/issues</bugs> <dependencies> <lib>ldap</lib> - <nextcloud min-version="22" max-version="22"/> + <nextcloud min-version="32" max-version="32"/> </dependencies> <background-jobs> @@ -37,6 +42,9 @@ A user logs into Nextcloud with their LDAP or AD credentials, and is granted acc <install> <step>OCA\User_LDAP\Migration\SetDefaultProvider</step> </install> + <uninstall> + <step>OCA\User_LDAP\Migration\UnsetDefaultProvider</step> + </uninstall> <post-migration> <step>OCA\User_LDAP\Migration\UUIDFixInsert</step> <step>OCA\User_LDAP\Migration\RemoveRefreshTime</step> @@ -45,13 +53,19 @@ A user logs into Nextcloud with their LDAP or AD credentials, and is granted acc <commands> <command>OCA\User_LDAP\Command\CheckUser</command> + <command>OCA\User_LDAP\Command\CheckGroup</command> <command>OCA\User_LDAP\Command\CreateEmptyConfig</command> <command>OCA\User_LDAP\Command\DeleteConfig</command> + <command>OCA\User_LDAP\Command\PromoteGroup</command> + <command>OCA\User_LDAP\Command\ResetGroup</command> + <command>OCA\User_LDAP\Command\ResetUser</command> <command>OCA\User_LDAP\Command\Search</command> <command>OCA\User_LDAP\Command\SetConfig</command> <command>OCA\User_LDAP\Command\ShowConfig</command> <command>OCA\User_LDAP\Command\ShowRemnants</command> <command>OCA\User_LDAP\Command\TestConfig</command> + <command>OCA\User_LDAP\Command\TestUserSettings</command> + <command>OCA\User_LDAP\Command\UpdateUUID</command> </commands> <settings> diff --git a/apps/user_ldap/appinfo/routes.php b/apps/user_ldap/appinfo/routes.php index 510180edfdc..52138060f58 100644 --- a/apps/user_ldap/appinfo/routes.php +++ b/apps/user_ldap/appinfo/routes.php @@ -3,32 +3,10 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roger Szabo <roger.szabo@web.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - -/** @var $this \OCP\Route\IRouter */ $this->create('user_ldap_ajax_clearMappings', 'apps/user_ldap/ajax/clearMappings.php') ->actionInclude('user_ldap/ajax/clearMappings.php'); $this->create('user_ldap_ajax_deleteConfiguration', 'apps/user_ldap/ajax/deleteConfiguration.php') @@ -44,23 +22,17 @@ $this->create('user_ldap_ajax_testConfiguration', 'apps/user_ldap/ajax/testConfi $this->create('user_ldap_ajax_wizard', 'apps/user_ldap/ajax/wizard.php') ->actionInclude('user_ldap/ajax/wizard.php'); -$application = new \OCP\AppFramework\App('user_ldap'); -$application->registerRoutes($this, [ +return [ 'ocs' => [ ['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'], ['name' => 'ConfigAPI#show', 'url' => '/api/v1/config/{configID}', 'verb' => 'GET'], ['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'], ['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'], - ] -]); - -/** @var \OCA\User_LDAP\AppInfo\Application $application */ -$application = \OC::$server->query(\OCA\User_LDAP\AppInfo\Application::class); -$application->registerRoutes($this, [ + ], 'routes' => [ ['name' => 'renewPassword#tryRenewPassword', 'url' => '/renewpassword', 'verb' => 'POST'], ['name' => 'renewPassword#showRenewPasswordForm', 'url' => '/renewpassword/{user}', 'verb' => 'GET'], ['name' => 'renewPassword#cancel', 'url' => '/renewpassword/cancel', 'verb' => 'GET'], ['name' => 'renewPassword#showLoginFormInvalidPassword', 'url' => '/renewpassword/invalidlogin/{user}', 'verb' => 'GET'], - ] -]); + ], +]; diff --git a/apps/user_ldap/composer/autoload.php b/apps/user_ldap/composer/autoload.php index 24824c188e5..89e85038c65 100644 --- a/apps/user_ldap/composer/autoload.php +++ b/apps/user_ldap/composer/autoload.php @@ -2,6 +2,24 @@ // autoload.php @generated by Composer +if (PHP_VERSION_ID < 50600) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, $err); + } elseif (!headers_sent()) { + echo $err; + } + } + trigger_error( + $err, + E_USER_ERROR + ); +} + require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInitUser_LDAP::getLoader(); diff --git a/apps/user_ldap/composer/composer.lock b/apps/user_ldap/composer/composer.lock new file mode 100644 index 00000000000..fd0bcbcb753 --- /dev/null +++ b/apps/user_ldap/composer/composer.lock @@ -0,0 +1,18 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "d751713988987e9331980363e24189ce", + "packages": [], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.1.0" +} diff --git a/apps/user_ldap/composer/composer/ClassLoader.php b/apps/user_ldap/composer/composer/ClassLoader.php index 4d989a212c9..7824d8f7eaf 100644 --- a/apps/user_ldap/composer/composer/ClassLoader.php +++ b/apps/user_ldap/composer/composer/ClassLoader.php @@ -42,30 +42,76 @@ namespace Composer\Autoload; */ class ClassLoader { + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ private $vendorDir; // PSR-4 + /** + * @var array<string, array<string, int>> + */ private $prefixLengthsPsr4 = array(); + /** + * @var array<string, list<string>> + */ private $prefixDirsPsr4 = array(); + /** + * @var list<string> + */ private $fallbackDirsPsr4 = array(); // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array<string, array<string, list<string>>> + */ private $prefixesPsr0 = array(); + /** + * @var list<string> + */ private $fallbackDirsPsr0 = array(); + /** @var bool */ private $useIncludePath = false; + + /** + * @var array<string, string> + */ private $classMap = array(); + + /** @var bool */ private $classMapAuthoritative = false; + + /** + * @var array<string, bool> + */ private $missingClasses = array(); + + /** @var string|null */ private $apcuPrefix; + /** + * @var array<string, self> + */ private static $registeredLoaders = array(); + /** + * @param string|null $vendorDir + */ public function __construct($vendorDir = null) { $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); } + /** + * @return array<string, list<string>> + */ public function getPrefixes() { if (!empty($this->prefixesPsr0)) { @@ -75,28 +121,42 @@ class ClassLoader return array(); } + /** + * @return array<string, list<string>> + */ public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } + /** + * @return list<string> + */ public function getFallbackDirs() { return $this->fallbackDirsPsr0; } + /** + * @return list<string> + */ public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } + /** + * @return array<string, string> Array of classname => path + */ public function getClassMap() { return $this->classMap; } /** - * @param array $classMap Class to filename map + * @param array<string, string> $classMap Class to filename map + * + * @return void */ public function addClassMap(array $classMap) { @@ -111,22 +171,25 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix + * @param list<string>|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void */ public function add($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, - (array) $paths + $paths ); } @@ -135,19 +198,19 @@ class ClassLoader $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; + $this->prefixesPsr0[$first][$prefix] = $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], - (array) $paths + $paths ); } } @@ -156,25 +219,28 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list<string>|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException + * + * @return void */ public function addPsr4($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, - (array) $paths + $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { @@ -184,18 +250,18 @@ class ClassLoader throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; + $this->prefixDirsPsr4[$prefix] = $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], - (array) $paths + $paths ); } } @@ -204,8 +270,10 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 base directories + * @param string $prefix The prefix + * @param list<string>|string $paths The PSR-0 base directories + * + * @return void */ public function set($prefix, $paths) { @@ -220,10 +288,12 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list<string>|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException + * + * @return void */ public function setPsr4($prefix, $paths) { @@ -243,6 +313,8 @@ class ClassLoader * Turns on searching the include path for class files. * * @param bool $useIncludePath + * + * @return void */ public function setUseIncludePath($useIncludePath) { @@ -265,6 +337,8 @@ class ClassLoader * that have not been registered with the class map. * * @param bool $classMapAuthoritative + * + * @return void */ public function setClassMapAuthoritative($classMapAuthoritative) { @@ -285,6 +359,8 @@ class ClassLoader * APCu prefix to use to cache found/not-found classes, if the extension is enabled. * * @param string|null $apcuPrefix + * + * @return void */ public function setApcuPrefix($apcuPrefix) { @@ -305,14 +381,18 @@ class ClassLoader * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void */ public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); if (null === $this->vendorDir) { - //no-op - } elseif ($prepend) { + return; + } + + if ($prepend) { self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; } else { unset(self::$registeredLoaders[$this->vendorDir]); @@ -322,6 +402,8 @@ class ClassLoader /** * Unregisters this instance as an autoloader. + * + * @return void */ public function unregister() { @@ -336,15 +418,18 @@ class ClassLoader * Loads the given class or interface. * * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise + * @return true|null True if loaded, null otherwise */ public function loadClass($class) { if ($file = $this->findFile($class)) { - includeFile($file); + $includeFile = self::$includeFile; + $includeFile($file); return true; } + + return null; } /** @@ -390,15 +475,20 @@ class ClassLoader } /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. + * Returns the currently registered loaders keyed by their corresponding vendor directories. * - * @return self[] + * @return array<string, self> */ public static function getRegisteredLoaders() { return self::$registeredLoaders; } + /** + * @param string $class + * @param string $ext + * @return string|false + */ private function findFileWithExtension($class, $ext) { // PSR-4 lookup @@ -464,14 +554,26 @@ class ClassLoader return false; } -} -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - */ -function includeFile($file) -{ - include $file; + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } } diff --git a/apps/user_ldap/composer/composer/InstalledVersions.php b/apps/user_ldap/composer/composer/InstalledVersions.php new file mode 100644 index 00000000000..51e734a774b --- /dev/null +++ b/apps/user_ldap/composer/composer/InstalledVersions.php @@ -0,0 +1,359 @@ +<?php + +/* + * This file is part of Composer. + * + * (c) Nils Adermann <naderman@naderman.de> + * Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list<string> + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list<string> + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/apps/user_ldap/composer/composer/autoload_classmap.php b/apps/user_ldap/composer/composer/autoload_classmap.php index c29f633cdac..36259880928 100644 --- a/apps/user_ldap/composer/composer/autoload_classmap.php +++ b/apps/user_ldap/composer/composer/autoload_classmap.php @@ -2,7 +2,7 @@ // autoload_classmap.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = $vendorDir; return array( @@ -11,25 +11,35 @@ return array( 'OCA\\User_LDAP\\AccessFactory' => $baseDir . '/../lib/AccessFactory.php', 'OCA\\User_LDAP\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php', 'OCA\\User_LDAP\\BackendUtility' => $baseDir . '/../lib/BackendUtility.php', + 'OCA\\User_LDAP\\Command\\CheckGroup' => $baseDir . '/../lib/Command/CheckGroup.php', 'OCA\\User_LDAP\\Command\\CheckUser' => $baseDir . '/../lib/Command/CheckUser.php', 'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => $baseDir . '/../lib/Command/CreateEmptyConfig.php', 'OCA\\User_LDAP\\Command\\DeleteConfig' => $baseDir . '/../lib/Command/DeleteConfig.php', + 'OCA\\User_LDAP\\Command\\PromoteGroup' => $baseDir . '/../lib/Command/PromoteGroup.php', + 'OCA\\User_LDAP\\Command\\ResetGroup' => $baseDir . '/../lib/Command/ResetGroup.php', + 'OCA\\User_LDAP\\Command\\ResetUser' => $baseDir . '/../lib/Command/ResetUser.php', 'OCA\\User_LDAP\\Command\\Search' => $baseDir . '/../lib/Command/Search.php', 'OCA\\User_LDAP\\Command\\SetConfig' => $baseDir . '/../lib/Command/SetConfig.php', 'OCA\\User_LDAP\\Command\\ShowConfig' => $baseDir . '/../lib/Command/ShowConfig.php', 'OCA\\User_LDAP\\Command\\ShowRemnants' => $baseDir . '/../lib/Command/ShowRemnants.php', 'OCA\\User_LDAP\\Command\\TestConfig' => $baseDir . '/../lib/Command/TestConfig.php', + 'OCA\\User_LDAP\\Command\\TestUserSettings' => $baseDir . '/../lib/Command/TestUserSettings.php', + 'OCA\\User_LDAP\\Command\\UpdateUUID' => $baseDir . '/../lib/Command/UpdateUUID.php', 'OCA\\User_LDAP\\Configuration' => $baseDir . '/../lib/Configuration.php', 'OCA\\User_LDAP\\Connection' => $baseDir . '/../lib/Connection.php', 'OCA\\User_LDAP\\ConnectionFactory' => $baseDir . '/../lib/ConnectionFactory.php', 'OCA\\User_LDAP\\Controller\\ConfigAPIController' => $baseDir . '/../lib/Controller/ConfigAPIController.php', 'OCA\\User_LDAP\\Controller\\RenewPasswordController' => $baseDir . '/../lib/Controller/RenewPasswordController.php', + 'OCA\\User_LDAP\\DataCollector\\LdapDataCollector' => $baseDir . '/../lib/DataCollector/LdapDataCollector.php', + 'OCA\\User_LDAP\\Db\\GroupMembership' => $baseDir . '/../lib/Db/GroupMembership.php', + 'OCA\\User_LDAP\\Db\\GroupMembershipMapper' => $baseDir . '/../lib/Db/GroupMembershipMapper.php', 'OCA\\User_LDAP\\Events\\GroupBackendRegistered' => $baseDir . '/../lib/Events/GroupBackendRegistered.php', 'OCA\\User_LDAP\\Events\\UserBackendRegistered' => $baseDir . '/../lib/Events/UserBackendRegistered.php', 'OCA\\User_LDAP\\Exceptions\\AttributeNotSet' => $baseDir . '/../lib/Exceptions/AttributeNotSet.php', + 'OCA\\User_LDAP\\Exceptions\\ConfigurationIssueException' => $baseDir . '/../lib/Exceptions/ConfigurationIssueException.php', 'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => $baseDir . '/../lib/Exceptions/ConstraintViolationException.php', + 'OCA\\User_LDAP\\Exceptions\\NoMoreResults' => $baseDir . '/../lib/Exceptions/NoMoreResults.php', 'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => $baseDir . '/../lib/Exceptions/NotOnLDAP.php', - 'OCA\\User_LDAP\\FilesystemHelper' => $baseDir . '/../lib/FilesystemHelper.php', 'OCA\\User_LDAP\\GroupPluginManager' => $baseDir . '/../lib/GroupPluginManager.php', 'OCA\\User_LDAP\\Group_LDAP' => $baseDir . '/../lib/Group_LDAP.php', 'OCA\\User_LDAP\\Group_Proxy' => $baseDir . '/../lib/Group_Proxy.php', @@ -47,25 +57,36 @@ return array( 'OCA\\User_LDAP\\LDAPProvider' => $baseDir . '/../lib/LDAPProvider.php', 'OCA\\User_LDAP\\LDAPProviderFactory' => $baseDir . '/../lib/LDAPProviderFactory.php', 'OCA\\User_LDAP\\LDAPUtility' => $baseDir . '/../lib/LDAPUtility.php', - 'OCA\\User_LDAP\\LogWrapper' => $baseDir . '/../lib/LogWrapper.php', + 'OCA\\User_LDAP\\LoginListener' => $baseDir . '/../lib/LoginListener.php', 'OCA\\User_LDAP\\Mapping\\AbstractMapping' => $baseDir . '/../lib/Mapping/AbstractMapping.php', 'OCA\\User_LDAP\\Mapping\\GroupMapping' => $baseDir . '/../lib/Mapping/GroupMapping.php', 'OCA\\User_LDAP\\Mapping\\UserMapping' => $baseDir . '/../lib/Mapping/UserMapping.php', + 'OCA\\User_LDAP\\Migration\\GroupMappingMigration' => $baseDir . '/../lib/Migration/GroupMappingMigration.php', 'OCA\\User_LDAP\\Migration\\RemoveRefreshTime' => $baseDir . '/../lib/Migration/RemoveRefreshTime.php', 'OCA\\User_LDAP\\Migration\\SetDefaultProvider' => $baseDir . '/../lib/Migration/SetDefaultProvider.php', 'OCA\\User_LDAP\\Migration\\UUIDFix' => $baseDir . '/../lib/Migration/UUIDFix.php', 'OCA\\User_LDAP\\Migration\\UUIDFixGroup' => $baseDir . '/../lib/Migration/UUIDFixGroup.php', 'OCA\\User_LDAP\\Migration\\UUIDFixInsert' => $baseDir . '/../lib/Migration/UUIDFixInsert.php', 'OCA\\User_LDAP\\Migration\\UUIDFixUser' => $baseDir . '/../lib/Migration/UUIDFixUser.php', + 'OCA\\User_LDAP\\Migration\\UnsetDefaultProvider' => $baseDir . '/../lib/Migration/UnsetDefaultProvider.php', 'OCA\\User_LDAP\\Migration\\Version1010Date20200630192842' => $baseDir . '/../lib/Migration/Version1010Date20200630192842.php', + 'OCA\\User_LDAP\\Migration\\Version1120Date20210917155206' => $baseDir . '/../lib/Migration/Version1120Date20210917155206.php', + 'OCA\\User_LDAP\\Migration\\Version1130Date20211102154716' => $baseDir . '/../lib/Migration/Version1130Date20211102154716.php', + 'OCA\\User_LDAP\\Migration\\Version1130Date20220110154717' => $baseDir . '/../lib/Migration/Version1130Date20220110154717.php', + 'OCA\\User_LDAP\\Migration\\Version1130Date20220110154718' => $baseDir . '/../lib/Migration/Version1130Date20220110154718.php', + 'OCA\\User_LDAP\\Migration\\Version1130Date20220110154719' => $baseDir . '/../lib/Migration/Version1130Date20220110154719.php', + 'OCA\\User_LDAP\\Migration\\Version1141Date20220323143801' => $baseDir . '/../lib/Migration/Version1141Date20220323143801.php', + 'OCA\\User_LDAP\\Migration\\Version1190Date20230706134108' => $baseDir . '/../lib/Migration/Version1190Date20230706134108.php', + 'OCA\\User_LDAP\\Migration\\Version1190Date20230706134109' => $baseDir . '/../lib/Migration/Version1190Date20230706134109.php', 'OCA\\User_LDAP\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php', - 'OCA\\User_LDAP\\PagedResults\\IAdapter' => $baseDir . '/../lib/PagedResults/IAdapter.php', - 'OCA\\User_LDAP\\PagedResults\\Php54' => $baseDir . '/../lib/PagedResults/Php54.php', - 'OCA\\User_LDAP\\PagedResults\\Php73' => $baseDir . '/../lib/PagedResults/Php73.php', 'OCA\\User_LDAP\\PagedResults\\TLinkId' => $baseDir . '/../lib/PagedResults/TLinkId.php', 'OCA\\User_LDAP\\Proxy' => $baseDir . '/../lib/Proxy.php', + 'OCA\\User_LDAP\\Service\\BirthdateParserService' => $baseDir . '/../lib/Service/BirthdateParserService.php', + 'OCA\\User_LDAP\\Service\\UpdateGroupsService' => $baseDir . '/../lib/Service/UpdateGroupsService.php', 'OCA\\User_LDAP\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php', 'OCA\\User_LDAP\\Settings\\Section' => $baseDir . '/../lib/Settings/Section.php', + 'OCA\\User_LDAP\\SetupChecks\\LdapConnection' => $baseDir . '/../lib/SetupChecks/LdapConnection.php', + 'OCA\\User_LDAP\\SetupChecks\\LdapInvalidUuids' => $baseDir . '/../lib/SetupChecks/LdapInvalidUuids.php', 'OCA\\User_LDAP\\UserPluginManager' => $baseDir . '/../lib/UserPluginManager.php', 'OCA\\User_LDAP\\User\\DeletedUsersIndex' => $baseDir . '/../lib/User/DeletedUsersIndex.php', 'OCA\\User_LDAP\\User\\Manager' => $baseDir . '/../lib/User/Manager.php', diff --git a/apps/user_ldap/composer/composer/autoload_namespaces.php b/apps/user_ldap/composer/composer/autoload_namespaces.php index 71c9e91858d..3f5c9296251 100644 --- a/apps/user_ldap/composer/composer/autoload_namespaces.php +++ b/apps/user_ldap/composer/composer/autoload_namespaces.php @@ -2,7 +2,7 @@ // autoload_namespaces.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = $vendorDir; return array( diff --git a/apps/user_ldap/composer/composer/autoload_psr4.php b/apps/user_ldap/composer/composer/autoload_psr4.php index 5251e2c1f81..787eb338039 100644 --- a/apps/user_ldap/composer/composer/autoload_psr4.php +++ b/apps/user_ldap/composer/composer/autoload_psr4.php @@ -2,7 +2,7 @@ // autoload_psr4.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = $vendorDir; return array( diff --git a/apps/user_ldap/composer/composer/autoload_real.php b/apps/user_ldap/composer/composer/autoload_real.php index 7cfd2b52370..6f0c636e7d5 100644 --- a/apps/user_ldap/composer/composer/autoload_real.php +++ b/apps/user_ldap/composer/composer/autoload_real.php @@ -23,20 +23,11 @@ class ComposerAutoloaderInitUser_LDAP } spl_autoload_register(array('ComposerAutoloaderInitUser_LDAP', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); spl_autoload_unregister(array('ComposerAutoloaderInitUser_LDAP', 'loadClassLoader')); - $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInitUser_LDAP::getInitializer($loader)); - } else { - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } + require __DIR__ . '/autoload_static.php'; + call_user_func(\Composer\Autoload\ComposerStaticInitUser_LDAP::getInitializer($loader)); $loader->setClassMapAuthoritative(true); $loader->register(true); diff --git a/apps/user_ldap/composer/composer/autoload_static.php b/apps/user_ldap/composer/composer/autoload_static.php index 090147bfb45..be985838393 100644 --- a/apps/user_ldap/composer/composer/autoload_static.php +++ b/apps/user_ldap/composer/composer/autoload_static.php @@ -26,25 +26,35 @@ class ComposerStaticInitUser_LDAP 'OCA\\User_LDAP\\AccessFactory' => __DIR__ . '/..' . '/../lib/AccessFactory.php', 'OCA\\User_LDAP\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php', 'OCA\\User_LDAP\\BackendUtility' => __DIR__ . '/..' . '/../lib/BackendUtility.php', + 'OCA\\User_LDAP\\Command\\CheckGroup' => __DIR__ . '/..' . '/../lib/Command/CheckGroup.php', 'OCA\\User_LDAP\\Command\\CheckUser' => __DIR__ . '/..' . '/../lib/Command/CheckUser.php', 'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => __DIR__ . '/..' . '/../lib/Command/CreateEmptyConfig.php', 'OCA\\User_LDAP\\Command\\DeleteConfig' => __DIR__ . '/..' . '/../lib/Command/DeleteConfig.php', + 'OCA\\User_LDAP\\Command\\PromoteGroup' => __DIR__ . '/..' . '/../lib/Command/PromoteGroup.php', + 'OCA\\User_LDAP\\Command\\ResetGroup' => __DIR__ . '/..' . '/../lib/Command/ResetGroup.php', + 'OCA\\User_LDAP\\Command\\ResetUser' => __DIR__ . '/..' . '/../lib/Command/ResetUser.php', 'OCA\\User_LDAP\\Command\\Search' => __DIR__ . '/..' . '/../lib/Command/Search.php', 'OCA\\User_LDAP\\Command\\SetConfig' => __DIR__ . '/..' . '/../lib/Command/SetConfig.php', 'OCA\\User_LDAP\\Command\\ShowConfig' => __DIR__ . '/..' . '/../lib/Command/ShowConfig.php', 'OCA\\User_LDAP\\Command\\ShowRemnants' => __DIR__ . '/..' . '/../lib/Command/ShowRemnants.php', 'OCA\\User_LDAP\\Command\\TestConfig' => __DIR__ . '/..' . '/../lib/Command/TestConfig.php', + 'OCA\\User_LDAP\\Command\\TestUserSettings' => __DIR__ . '/..' . '/../lib/Command/TestUserSettings.php', + 'OCA\\User_LDAP\\Command\\UpdateUUID' => __DIR__ . '/..' . '/../lib/Command/UpdateUUID.php', 'OCA\\User_LDAP\\Configuration' => __DIR__ . '/..' . '/../lib/Configuration.php', 'OCA\\User_LDAP\\Connection' => __DIR__ . '/..' . '/../lib/Connection.php', 'OCA\\User_LDAP\\ConnectionFactory' => __DIR__ . '/..' . '/../lib/ConnectionFactory.php', 'OCA\\User_LDAP\\Controller\\ConfigAPIController' => __DIR__ . '/..' . '/../lib/Controller/ConfigAPIController.php', 'OCA\\User_LDAP\\Controller\\RenewPasswordController' => __DIR__ . '/..' . '/../lib/Controller/RenewPasswordController.php', + 'OCA\\User_LDAP\\DataCollector\\LdapDataCollector' => __DIR__ . '/..' . '/../lib/DataCollector/LdapDataCollector.php', + 'OCA\\User_LDAP\\Db\\GroupMembership' => __DIR__ . '/..' . '/../lib/Db/GroupMembership.php', + 'OCA\\User_LDAP\\Db\\GroupMembershipMapper' => __DIR__ . '/..' . '/../lib/Db/GroupMembershipMapper.php', 'OCA\\User_LDAP\\Events\\GroupBackendRegistered' => __DIR__ . '/..' . '/../lib/Events/GroupBackendRegistered.php', 'OCA\\User_LDAP\\Events\\UserBackendRegistered' => __DIR__ . '/..' . '/../lib/Events/UserBackendRegistered.php', 'OCA\\User_LDAP\\Exceptions\\AttributeNotSet' => __DIR__ . '/..' . '/../lib/Exceptions/AttributeNotSet.php', + 'OCA\\User_LDAP\\Exceptions\\ConfigurationIssueException' => __DIR__ . '/..' . '/../lib/Exceptions/ConfigurationIssueException.php', 'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => __DIR__ . '/..' . '/../lib/Exceptions/ConstraintViolationException.php', + 'OCA\\User_LDAP\\Exceptions\\NoMoreResults' => __DIR__ . '/..' . '/../lib/Exceptions/NoMoreResults.php', 'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => __DIR__ . '/..' . '/../lib/Exceptions/NotOnLDAP.php', - 'OCA\\User_LDAP\\FilesystemHelper' => __DIR__ . '/..' . '/../lib/FilesystemHelper.php', 'OCA\\User_LDAP\\GroupPluginManager' => __DIR__ . '/..' . '/../lib/GroupPluginManager.php', 'OCA\\User_LDAP\\Group_LDAP' => __DIR__ . '/..' . '/../lib/Group_LDAP.php', 'OCA\\User_LDAP\\Group_Proxy' => __DIR__ . '/..' . '/../lib/Group_Proxy.php', @@ -62,25 +72,36 @@ class ComposerStaticInitUser_LDAP 'OCA\\User_LDAP\\LDAPProvider' => __DIR__ . '/..' . '/../lib/LDAPProvider.php', 'OCA\\User_LDAP\\LDAPProviderFactory' => __DIR__ . '/..' . '/../lib/LDAPProviderFactory.php', 'OCA\\User_LDAP\\LDAPUtility' => __DIR__ . '/..' . '/../lib/LDAPUtility.php', - 'OCA\\User_LDAP\\LogWrapper' => __DIR__ . '/..' . '/../lib/LogWrapper.php', + 'OCA\\User_LDAP\\LoginListener' => __DIR__ . '/..' . '/../lib/LoginListener.php', 'OCA\\User_LDAP\\Mapping\\AbstractMapping' => __DIR__ . '/..' . '/../lib/Mapping/AbstractMapping.php', 'OCA\\User_LDAP\\Mapping\\GroupMapping' => __DIR__ . '/..' . '/../lib/Mapping/GroupMapping.php', 'OCA\\User_LDAP\\Mapping\\UserMapping' => __DIR__ . '/..' . '/../lib/Mapping/UserMapping.php', + 'OCA\\User_LDAP\\Migration\\GroupMappingMigration' => __DIR__ . '/..' . '/../lib/Migration/GroupMappingMigration.php', 'OCA\\User_LDAP\\Migration\\RemoveRefreshTime' => __DIR__ . '/..' . '/../lib/Migration/RemoveRefreshTime.php', 'OCA\\User_LDAP\\Migration\\SetDefaultProvider' => __DIR__ . '/..' . '/../lib/Migration/SetDefaultProvider.php', 'OCA\\User_LDAP\\Migration\\UUIDFix' => __DIR__ . '/..' . '/../lib/Migration/UUIDFix.php', 'OCA\\User_LDAP\\Migration\\UUIDFixGroup' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixGroup.php', 'OCA\\User_LDAP\\Migration\\UUIDFixInsert' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixInsert.php', 'OCA\\User_LDAP\\Migration\\UUIDFixUser' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixUser.php', + 'OCA\\User_LDAP\\Migration\\UnsetDefaultProvider' => __DIR__ . '/..' . '/../lib/Migration/UnsetDefaultProvider.php', 'OCA\\User_LDAP\\Migration\\Version1010Date20200630192842' => __DIR__ . '/..' . '/../lib/Migration/Version1010Date20200630192842.php', + 'OCA\\User_LDAP\\Migration\\Version1120Date20210917155206' => __DIR__ . '/..' . '/../lib/Migration/Version1120Date20210917155206.php', + 'OCA\\User_LDAP\\Migration\\Version1130Date20211102154716' => __DIR__ . '/..' . '/../lib/Migration/Version1130Date20211102154716.php', + 'OCA\\User_LDAP\\Migration\\Version1130Date20220110154717' => __DIR__ . '/..' . '/../lib/Migration/Version1130Date20220110154717.php', + 'OCA\\User_LDAP\\Migration\\Version1130Date20220110154718' => __DIR__ . '/..' . '/../lib/Migration/Version1130Date20220110154718.php', + 'OCA\\User_LDAP\\Migration\\Version1130Date20220110154719' => __DIR__ . '/..' . '/../lib/Migration/Version1130Date20220110154719.php', + 'OCA\\User_LDAP\\Migration\\Version1141Date20220323143801' => __DIR__ . '/..' . '/../lib/Migration/Version1141Date20220323143801.php', + 'OCA\\User_LDAP\\Migration\\Version1190Date20230706134108' => __DIR__ . '/..' . '/../lib/Migration/Version1190Date20230706134108.php', + 'OCA\\User_LDAP\\Migration\\Version1190Date20230706134109' => __DIR__ . '/..' . '/../lib/Migration/Version1190Date20230706134109.php', 'OCA\\User_LDAP\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php', - 'OCA\\User_LDAP\\PagedResults\\IAdapter' => __DIR__ . '/..' . '/../lib/PagedResults/IAdapter.php', - 'OCA\\User_LDAP\\PagedResults\\Php54' => __DIR__ . '/..' . '/../lib/PagedResults/Php54.php', - 'OCA\\User_LDAP\\PagedResults\\Php73' => __DIR__ . '/..' . '/../lib/PagedResults/Php73.php', 'OCA\\User_LDAP\\PagedResults\\TLinkId' => __DIR__ . '/..' . '/../lib/PagedResults/TLinkId.php', 'OCA\\User_LDAP\\Proxy' => __DIR__ . '/..' . '/../lib/Proxy.php', + 'OCA\\User_LDAP\\Service\\BirthdateParserService' => __DIR__ . '/..' . '/../lib/Service/BirthdateParserService.php', + 'OCA\\User_LDAP\\Service\\UpdateGroupsService' => __DIR__ . '/..' . '/../lib/Service/UpdateGroupsService.php', 'OCA\\User_LDAP\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php', 'OCA\\User_LDAP\\Settings\\Section' => __DIR__ . '/..' . '/../lib/Settings/Section.php', + 'OCA\\User_LDAP\\SetupChecks\\LdapConnection' => __DIR__ . '/..' . '/../lib/SetupChecks/LdapConnection.php', + 'OCA\\User_LDAP\\SetupChecks\\LdapInvalidUuids' => __DIR__ . '/..' . '/../lib/SetupChecks/LdapInvalidUuids.php', 'OCA\\User_LDAP\\UserPluginManager' => __DIR__ . '/..' . '/../lib/UserPluginManager.php', 'OCA\\User_LDAP\\User\\DeletedUsersIndex' => __DIR__ . '/..' . '/../lib/User/DeletedUsersIndex.php', 'OCA\\User_LDAP\\User\\Manager' => __DIR__ . '/..' . '/../lib/User/Manager.php', diff --git a/apps/user_ldap/composer/composer/installed.json b/apps/user_ldap/composer/composer/installed.json new file mode 100644 index 00000000000..f20a6c47c6d --- /dev/null +++ b/apps/user_ldap/composer/composer/installed.json @@ -0,0 +1,5 @@ +{ + "packages": [], + "dev": false, + "dev-package-names": [] +} diff --git a/apps/user_ldap/composer/composer/installed.php b/apps/user_ldap/composer/composer/installed.php new file mode 100644 index 00000000000..34d21903bce --- /dev/null +++ b/apps/user_ldap/composer/composer/installed.php @@ -0,0 +1,23 @@ +<?php return array( + 'root' => array( + 'name' => '__root__', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '722b062d3fb372799000591b8d23d3b65a4e50db', + 'type' => 'library', + 'install_path' => __DIR__ . '/../', + 'aliases' => array(), + 'dev' => false, + ), + 'versions' => array( + '__root__' => array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '722b062d3fb372799000591b8d23d3b65a4e50db', + 'type' => 'library', + 'install_path' => __DIR__ . '/../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/apps/user_ldap/css/renewPassword.css b/apps/user_ldap/css/renewPassword.css index 17da3575e51..8acd97254fa 100644 --- a/apps/user_ldap/css/renewPassword.css +++ b/apps/user_ldap/css/renewPassword.css @@ -1,11 +1,15 @@ +/** + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ #personal-show + label { - left: 230px !important; + inset-inline-start: 230px !important; margin-top: 8px !important; box-sizing: border-box; } #renewpassword .strengthify-wrapper { - left: 10px; + inset-inline-start: 10px; margin-top: 65px; position: absolute; width: 219px; @@ -29,7 +33,6 @@ letter-spacing:normal; line-break:auto; line-height:1.6; - text-align:left; text-align:start; text-decoration:none; text-shadow:none; @@ -59,29 +62,29 @@ } .tooltip.right { - margin-left:3px; + margin-inline-start:3px; padding:0 10px } .tooltip.right .tooltip-arrow { top:50%; - left:0; + inset-inline-start:0; margin-top:-10px; border-width:10px 10px 10px 0; - border-right-color:#fff + border-inline-end-color:#fff } .tooltip.left { - margin-left:-3px; + margin-inline-start:-3px; padding:0 5px } .tooltip.left .tooltip-arrow { top:50%; - right:0; + inset-inline-end:0; margin-top:-10px; border-width:10px 0 10px 10px; - border-left-color:#fff + border-inline-start-color:#fff } .tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow { @@ -91,17 +94,17 @@ } .tooltip.top .tooltip-arrow { - left:50%; - margin-left:-10px + inset-inline-start:50%; + margin-inline-start:-10px } .tooltip.top-left .tooltip-arrow { - right:10px; + inset-inline-end:10px; margin-bottom:-10px } .tooltip.top-right .tooltip-arrow { - left:10px; + inset-inline-start:10px; margin-bottom:-10px } @@ -112,17 +115,17 @@ } .tooltip.bottom .tooltip-arrow { - left:50%; - margin-left:-10px + inset-inline-start:50%; + margin-inline-start:-10px } .tooltip.bottom-left .tooltip-arrow { - right:10px; + inset-inline-end:10px; margin-top:-10px } .tooltip.bottom-right .tooltip-arrow { - left:10px; + inset-inline-start:10px; margin-top:-10px } diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css index 54d0e2dbb0c..a1048031fa2 100644 --- a/apps/user_ldap/css/settings.css +++ b/apps/user_ldap/css/settings.css @@ -1,3 +1,8 @@ +/** + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2012-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ .table { display: table; width: 85%; @@ -9,9 +14,10 @@ } .tablerow { - display: table-row; + display: flex; + align-items: center; white-space: nowrap; - text-align: left; + text-align: start; } .tablerow input, .tablerow textarea { @@ -23,7 +29,7 @@ } #ldap .tablerow label { - margin-left: 3px; + margin-inline-start: 3px; } .ldapIconCopy { @@ -44,7 +50,7 @@ .ldapWizardControls { width: 60%; - text-align: right; + text-align: end; } .ldapWizardInfo { @@ -64,31 +70,30 @@ #ldapWizard1 .hostPortCombinatorSpan { width: 14.5%; display: inline-block; - text-align: right; + text-align: end; } #ldapWizard1 .host { width: 100%; - margin-left: 0; - margin-right: 0; + margin-inline: 0; } .tableCellInput { - margin-left: -40%; + margin-inline-start: -40%; width: 100%; } .tableCellLabel { - text-align: right; - padding-right: 25%; + text-align: end; + padding-inline-end: 25%; } .ldapIndent { - margin-left: 50px; + margin-inline-start: 50px; } .ldapwarning { - margin-left: 22px; + margin-inline-start: 22px; color: #FF3B3B; } @@ -110,9 +115,9 @@ max-width: 200px; display: inline-block; vertical-align: top; - text-align: right; + text-align: end; padding-top: 9px; - padding-right: 5px; + padding-inline-end: 5px; } #ldap fieldset input[type=submit] { @@ -153,7 +158,7 @@ input.ldapVerifyInput { .ldapInputColElement { width: 35%; display: inline-block; - padding-left: 10px; + padding-inline-start: 10px; } .ldapToggle { @@ -184,7 +189,7 @@ select[multiple=multiple] + button { } #ldap .ldap_saving { - margin-right: 15px; + margin-inline-end: 15px; color: orange; font-weight: bold; } @@ -197,10 +202,12 @@ select[multiple=multiple] + button { width: 16px; vertical-align: text-bottom; } + .ldap_config_state_indicator_sign.success { background: #37ce02; border-radius: 8px; } + .ldap_config_state_indicator_sign.error { background: #ce3702; } @@ -210,19 +217,10 @@ select[multiple=multiple] + button { } #ldapSettings { - background-color: white; padding: 0; } -#ldapSettings > fieldset { - background-color: white; -} - -#ldapSettings ul.ui-tabs-nav .ui-tabs-active, -#ldapSettings ul.ui-tabs-nav .ui-tabs-active > a { - background-color: white; -} - -#ldapSettings div.ui-accordion-content { - background: white; +ul.ui-multiselect-checkboxes label { + display: flex; + align-items: center; } diff --git a/apps/user_ldap/vendor/ui-multiselect/jquery.multiselect.css b/apps/user_ldap/css/vendor/ui-multiselect/jquery.multiselect.css index 9b81c3bdcfb..533eb63762f 100644 --- a/apps/user_ldap/vendor/ui-multiselect/jquery.multiselect.css +++ b/apps/user_ldap/css/vendor/ui-multiselect/jquery.multiselect.css @@ -1,3 +1,7 @@ +/** + * SPDX-FileCopyrightText: 2012 Eric Hynds + * SPDX-License-Identifier: MIT + */ .ui-multiselect { padding:2px 0 2px 4px; text-align:left; } .ui-multiselect span.ui-icon { float:right; } .ui-multiselect-single .ui-multiselect-checkboxes input { position:absolute !important; top: auto !important; left:-9999px; } diff --git a/apps/user_ldap/img/app-dark.svg b/apps/user_ldap/img/app-dark.svg index 54939fab4f2..f20dbda808a 100644 --- a/apps/user_ldap/img/app-dark.svg +++ b/apps/user_ldap/img/app-dark.svg @@ -1,4 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" viewBox="0 0 16 16"> - <path style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" fill="#000" d="m8.4036 1c-1.7312 0-3.1998 1.2661-3.1998 2.9 0.012287 0.51643 0.058473 1.1532 0.36664 2.5v0.033333l0.033328 0.033333c0.098928 0.28338 0.24289 0.44549 0.4333 0.66666s0.41742 0.48149 0.63328 0.69999c0.025397 0.025708 0.041676 0.041633 0.066656 0.066677 0.04281 0.18631 0.094672 0.38681 0.13332 0.56666 0.10284 0.47851 0.092296 0.81737 0.066668 0.93332-0.74389 0.26121-1.6694 0.57228-2.4998 0.93332-0.46622 0.2027-0.8881 0.3837-1.2332 0.59999-0.34513 0.2163-0.68837 0.37971-0.79994 0.86666-0.16004 0.63293-0.19866 0.7539-0.39997 1.5333-0.027212 0.20914 0.083011 0.42961 0.26665 0.53333 1.5078 0.81451 3.824 1.1423 6.1329 1.1333s4.6066-0.35609 6.0662-1.1333c0.11739-0.07353 0.14304-0.10869 0.13332-0.2333-0.04365-0.68908-0.08154-1.3669-0.13332-1.7666-0.01807-0.09908-0.06492-0.19275-0.13332-0.26666-0.46366-0.5537-1.1564-0.89218-1.9665-1.2333-0.7396-0.31144-1.6067-0.63486-2.4665-0.99999-0.048123-0.10721-0.095926-0.41912 0-0.89999 0.025759-0.12912 0.066096-0.26742 0.099994-0.4 0.0808-0.090507 0.14378-0.16447 0.23332-0.26666 0.19096-0.21796 0.39614-0.44661 0.56662-0.66666s0.30996-0.40882 0.39997-0.66666l0.03333-0.033333c0.34839-1.4062 0.34857-1.9929 0.36664-2.5v-0.033333c0-1.6339-1.4686-2.9-3.1998-2.9z"/> -</svg> +<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px"><path d="M480-480q-60 0-102-42t-42-102q0-60 42-102t102-42q60 0 102 42t42 102q0 60-42 102t-102 42ZM192-192v-96q0-23 12.5-43.5T239-366q55-32 116.5-49T480-432q63 0 124.5 17T721-366q22 13 34.5 34t12.5 44v96H192Z"/></svg>
\ No newline at end of file diff --git a/apps/user_ldap/img/app.svg b/apps/user_ldap/img/app.svg index 430514d235c..4d6d856526c 100644 --- a/apps/user_ldap/img/app.svg +++ b/apps/user_ldap/img/app.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1" viewBox="0 0 16 16"><path color="#000" fill="none" d="M-62.897-32.993h163.31v97.986h-163.31z"/><path style="block-progression:tb;text-transform:none;text-indent:0" fill="#fff" d="M8.404 1c-1.732 0-3.2 1.266-3.2 2.9.012.516.058 1.153.366 2.5v.033l.034.034c.1.283.243.445.433.666s.417.482.633.7l.067.067c.043.186.095.387.133.567.103.478.093.817.067.933-.744.26-1.67.572-2.5.933-.466.203-.888.384-1.233.6-.345.217-.688.38-.8.867-.16.633-.2.754-.4 1.533-.027.21.083.43.267.534C3.78 14.68 6.096 15.01 8.405 15s4.606-.356 6.066-1.133c.117-.074.143-.11.133-.234-.043-.69-.08-1.367-.133-1.766a.537.537 0 0 0-.133-.267c-.464-.554-1.157-.892-1.967-1.233-.74-.312-1.607-.635-2.466-1-.05-.107-.096-.42 0-.9.025-.13.066-.268.1-.4.08-.09.143-.165.233-.267.19-.218.396-.447.566-.667s.31-.408.4-.666l.034-.034c.348-1.406.348-1.992.366-2.5V3.9c0-1.634-1.468-2.9-3.2-2.9z" color="#000"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#fff"><path d="M480-480q-60 0-102-42t-42-102q0-60 42-102t102-42q60 0 102 42t42 102q0 60-42 102t-102 42ZM192-192v-96q0-23 12.5-43.5T239-366q55-32 116.5-49T480-432q63 0 124.5 17T721-366q22 13 34.5 34t12.5 44v96H192Z"/></svg>
\ No newline at end of file diff --git a/apps/user_ldap/img/copy.png b/apps/user_ldap/img/copy.png Binary files differdeleted file mode 100644 index 1bfb6337f76..00000000000 --- a/apps/user_ldap/img/copy.png +++ /dev/null diff --git a/apps/user_ldap/img/copy.svg b/apps/user_ldap/img/copy.svg index ac68211f7c2..fc09a027e8b 100644 --- a/apps/user_ldap/img/copy.svg +++ b/apps/user_ldap/img/copy.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" version="1"><path d="M8.172 4.685A2.4 2.4 0 0 0 5.767 7.09v30.675a2.4 2.4 0 0 0 2.405 2.404h28.944a2.4 2.4 0 0 0 2.404-2.405V7.09a2.4 2.4 0 0 0-2.404-2.405H8.172z" stroke-linejoin="round" stroke="#fff" stroke-width="8.12547063" fill="none"/><path d="M8.172 4.685A2.4 2.4 0 0 0 5.767 7.09v30.675a2.4 2.4 0 0 0 2.405 2.404h28.944a2.4 2.4 0 0 0 2.404-2.405V7.09a2.4 2.4 0 0 0-2.404-2.405H8.172z" stroke-linejoin="round" fill-rule="evenodd" stroke="#000" stroke-width="3.1254052800000003" fill="#fff"/><path d="M22.884 19.83a2.4 2.4 0 0 0-2.404 2.406V52.91a2.4 2.4 0 0 0 2.404 2.405h28.944a2.4 2.4 0 0 0 2.406-2.404V22.237a2.4 2.4 0 0 0-2.406-2.406H22.884z" stroke-linejoin="round" stroke="#fff" stroke-width="8.12547063" fill="none"/><path d="M22.884 19.83a2.4 2.4 0 0 0-2.404 2.406V52.91a2.4 2.4 0 0 0 2.404 2.405h28.944a2.4 2.4 0 0 0 2.406-2.404V22.237a2.4 2.4 0 0 0-2.406-2.406H22.884z" stroke-linejoin="round" fill-rule="evenodd" stroke="#000" stroke-width="3.1254052800000003" fill="#fff"/><path d="M12.457 21.6c2.325 20.528 20.15 19.15 21.296 19.042v6.14l8.98-8.89-8.98-8.87v6.066c-1.348.16-13.94 1.422-21.296-13.49z" stroke-linejoin="round" stroke="#fff" stroke-linecap="round" stroke-width="8.125" fill="none"/><path d="M12.457 21.6c2.325 20.528 20.15 19.15 21.296 19.042v6.14l8.98-8.89-8.98-8.87v6.066c-1.348.16-13.94 1.422-21.296-13.49z" stroke-linejoin="round" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-width="3.125"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px"><path d="M360-240q-29.7 0-50.85-21.15Q288-282.3 288-312v-480q0-29.7 21.15-50.85Q330.3-864 360-864h384q29.7 0 50.85 21.15Q816-821.7 816-792v480q0 29.7-21.15 50.85Q773.7-240 744-240H360ZM216-96q-29.7 0-50.85-21.15Q144-138.3 144-168v-552h72v552h456v72H216Z"/></svg>
\ No newline at end of file diff --git a/apps/user_ldap/js/renewPassword.js b/apps/user_ldap/js/renewPassword.js index 307d5f8294d..65615d90889 100644 --- a/apps/user_ldap/js/renewPassword.js +++ b/apps/user_ldap/js/renewPassword.js @@ -1,22 +1,6 @@ /** - * - * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; @@ -32,7 +16,7 @@ OCA.LDAP = _.extend(OC.LDAP || {}, { window.addEventListener('DOMContentLoaded', function() { $('form[name=renewpassword]').submit(OCA.LDAP.onRenewPassword); - + if($('#newPassword').length) { $('#newPassword').showPassword().keyup(); } diff --git a/apps/user_ldap/vendor/ui-multiselect/src/jquery.multiselect.js b/apps/user_ldap/js/vendor/ui-multiselect/src/jquery.multiselect.js index 16ae4264177..4dc6ab5ffbe 100644 --- a/apps/user_ldap/vendor/ui-multiselect/src/jquery.multiselect.js +++ b/apps/user_ldap/js/vendor/ui-multiselect/src/jquery.multiselect.js @@ -17,7 +17,9 @@ * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * -*/ + * SPDX-FileCopyrightText: 2012 Eric Hynds + * SPDX-License-Identifier: MIT + */ (function($, undefined){ var multiselectID = 0; @@ -571,7 +573,7 @@ $.widget("ech.multiselect", { } else { menu.css({ top: pos.top + button.outerHeight(), - left: pos.left + 'inset-inline-start': pos.left }); } diff --git a/apps/user_ldap/js/wizard/configModel.js b/apps/user_ldap/js/wizard/configModel.js index d99392660c8..85c87e2ef15 100644 --- a/apps/user_ldap/js/wizard/configModel.js +++ b/apps/user_ldap/js/wizard/configModel.js @@ -1,7 +1,7 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/controller.js b/apps/user_ldap/js/wizard/controller.js index 7c1f0d5d818..0bfa0fb7ffd 100644 --- a/apps/user_ldap/js/wizard/controller.js +++ b/apps/user_ldap/js/wizard/controller.js @@ -1,7 +1,6 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/view.js b/apps/user_ldap/js/wizard/view.js index 1a89eba3515..ba77d287141 100644 --- a/apps/user_ldap/js/wizard/view.js +++ b/apps/user_ldap/js/wizard/view.js @@ -1,7 +1,7 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; @@ -40,7 +40,7 @@ OCA = OCA || {}; }, /** - * applies click events to the forward and backword buttons + * applies click events to the forward and backward buttons */ initControls: function() { var view = this; @@ -86,7 +86,8 @@ OCA = OCA || {}; var agent = view.configModel.configuration.ldap_dn; var pwd = view.configModel.configuration.ldap_agent_password; - if((host && port && base) && ((!agent && !pwd) || (agent && pwd))) { + if(((host && port && base) || (host && base && host.indexOf('ldapi://') > -1 )) + && ((!agent && !pwd) || (agent && pwd))) { view.enableTabs(); } else { view.disableTabs(); @@ -107,7 +108,8 @@ OCA = OCA || {}; var userFilter = this.configModel.configuration.ldap_userlist_filter; var loginFilter = this.configModel.configuration.ldap_login_filter; - if(host && port && base && userFilter && loginFilter) { + if((host && port && base && userFilter && loginFilter) || + (host && base && host.indexOf('ldapi://') > -1 && userFilter && loginFilter)) { this.configModel.requestConfigurationTest(); } else { this._updateStatusIndicator(this.STATUS_INCOMPLETE); @@ -354,7 +356,6 @@ OCA = OCA || {}; this.$settings.tabs({}); $('#ldapSettings button:not(.icon-default-style):not(.ui-multiselect)').button(); $('#ldapSettings').tabs({ beforeActivate: this.onTabChange }); - $('#ldapSettings :input').tooltip({placement: "right", container: "body", trigger: "hover"}); this.initControls(); this.disableTabs(); diff --git a/apps/user_ldap/js/wizard/wizard.js b/apps/user_ldap/js/wizard/wizard.js index 39ab2e13ef8..b8a3d74b881 100644 --- a/apps/user_ldap/js/wizard/wizard.js +++ b/apps/user_ldap/js/wizard/wizard.js @@ -1,7 +1,7 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorAvailableAttributes.js b/apps/user_ldap/js/wizard/wizardDetectorAvailableAttributes.js index fd43b032ad5..4fae1ef5e99 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorAvailableAttributes.js +++ b/apps/user_ldap/js/wizard/wizardDetectorAvailableAttributes.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorBaseDN.js b/apps/user_ldap/js/wizard/wizardDetectorBaseDN.js index f81d342b692..3d3bba4f821 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorBaseDN.js +++ b/apps/user_ldap/js/wizard/wizardDetectorBaseDN.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorClearGroupMappings.js b/apps/user_ldap/js/wizard/wizardDetectorClearGroupMappings.js index c6ef0a9cab1..740fc3a3f6b 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorClearGroupMappings.js +++ b/apps/user_ldap/js/wizard/wizardDetectorClearGroupMappings.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorClearUserMappings.js b/apps/user_ldap/js/wizard/wizardDetectorClearUserMappings.js index 0e4811b39ea..1032682d926 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorClearUserMappings.js +++ b/apps/user_ldap/js/wizard/wizardDetectorClearUserMappings.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorEmailAttribute.js b/apps/user_ldap/js/wizard/wizardDetectorEmailAttribute.js index 5f177734681..007a9cc8079 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorEmailAttribute.js +++ b/apps/user_ldap/js/wizard/wizardDetectorEmailAttribute.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorFeatureAbstract.js b/apps/user_ldap/js/wizard/wizardDetectorFeatureAbstract.js index e025d8d6242..3d43cd369d5 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorFeatureAbstract.js +++ b/apps/user_ldap/js/wizard/wizardDetectorFeatureAbstract.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorFilterGroup.js b/apps/user_ldap/js/wizard/wizardDetectorFilterGroup.js index f56550a919e..507f7490731 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorFilterGroup.js +++ b/apps/user_ldap/js/wizard/wizardDetectorFilterGroup.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorFilterLogin.js b/apps/user_ldap/js/wizard/wizardDetectorFilterLogin.js index 7012847193b..827886c840c 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorFilterLogin.js +++ b/apps/user_ldap/js/wizard/wizardDetectorFilterLogin.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorFilterUser.js b/apps/user_ldap/js/wizard/wizardDetectorFilterUser.js index 3cd2935bd87..11e990a36e0 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorFilterUser.js +++ b/apps/user_ldap/js/wizard/wizardDetectorFilterUser.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorGeneric.js b/apps/user_ldap/js/wizard/wizardDetectorGeneric.js index 2126828c197..ab1c0c96d99 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorGeneric.js +++ b/apps/user_ldap/js/wizard/wizardDetectorGeneric.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorGroupCount.js b/apps/user_ldap/js/wizard/wizardDetectorGroupCount.js index d2f3dd978c5..9e29cf093ea 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorGroupCount.js +++ b/apps/user_ldap/js/wizard/wizardDetectorGroupCount.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorGroupObjectClasses.js b/apps/user_ldap/js/wizard/wizardDetectorGroupObjectClasses.js index 6d6048b7986..cbfb1f91a41 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorGroupObjectClasses.js +++ b/apps/user_ldap/js/wizard/wizardDetectorGroupObjectClasses.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorGroupsForGroups.js b/apps/user_ldap/js/wizard/wizardDetectorGroupsForGroups.js index fbb3f02e10a..2e898f5317e 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorGroupsForGroups.js +++ b/apps/user_ldap/js/wizard/wizardDetectorGroupsForGroups.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorGroupsForUsers.js b/apps/user_ldap/js/wizard/wizardDetectorGroupsForUsers.js index fe67854c794..de8407a0edd 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorGroupsForUsers.js +++ b/apps/user_ldap/js/wizard/wizardDetectorGroupsForUsers.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorPort.js b/apps/user_ldap/js/wizard/wizardDetectorPort.js index 50b1a1b4746..10055cd1cdd 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorPort.js +++ b/apps/user_ldap/js/wizard/wizardDetectorPort.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorQueue.js b/apps/user_ldap/js/wizard/wizardDetectorQueue.js index b6fa644558e..c00064f5c45 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorQueue.js +++ b/apps/user_ldap/js/wizard/wizardDetectorQueue.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorSimpleRequestAbstract.js b/apps/user_ldap/js/wizard/wizardDetectorSimpleRequestAbstract.js index 8a1da617aa0..80d14f8466c 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorSimpleRequestAbstract.js +++ b/apps/user_ldap/js/wizard/wizardDetectorSimpleRequestAbstract.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorTestAbstract.js b/apps/user_ldap/js/wizard/wizardDetectorTestAbstract.js index e371dbf0f63..929ea0e84e8 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorTestAbstract.js +++ b/apps/user_ldap/js/wizard/wizardDetectorTestAbstract.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorTestBaseDN.js b/apps/user_ldap/js/wizard/wizardDetectorTestBaseDN.js index 52848819bd8..de01726e1c1 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorTestBaseDN.js +++ b/apps/user_ldap/js/wizard/wizardDetectorTestBaseDN.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorTestConfiguration.js b/apps/user_ldap/js/wizard/wizardDetectorTestConfiguration.js index aed99539384..5049c101f09 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorTestConfiguration.js +++ b/apps/user_ldap/js/wizard/wizardDetectorTestConfiguration.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorTestLoginName.js b/apps/user_ldap/js/wizard/wizardDetectorTestLoginName.js index 260df5a0fe0..5e0319586b3 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorTestLoginName.js +++ b/apps/user_ldap/js/wizard/wizardDetectorTestLoginName.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorUserCount.js b/apps/user_ldap/js/wizard/wizardDetectorUserCount.js index bcff2cf3b10..144c64d24be 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorUserCount.js +++ b/apps/user_ldap/js/wizard/wizardDetectorUserCount.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorUserDisplayNameAttribute.js b/apps/user_ldap/js/wizard/wizardDetectorUserDisplayNameAttribute.js index ae734480c1c..64e5bb50371 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorUserDisplayNameAttribute.js +++ b/apps/user_ldap/js/wizard/wizardDetectorUserDisplayNameAttribute.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorUserGroupAssociation.js b/apps/user_ldap/js/wizard/wizardDetectorUserGroupAssociation.js index a20bdd9ac9b..a0051532388 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorUserGroupAssociation.js +++ b/apps/user_ldap/js/wizard/wizardDetectorUserGroupAssociation.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardDetectorUserObjectClasses.js b/apps/user_ldap/js/wizard/wizardDetectorUserObjectClasses.js index 0fa324a0809..13e034e353e 100644 --- a/apps/user_ldap/js/wizard/wizardDetectorUserObjectClasses.js +++ b/apps/user_ldap/js/wizard/wizardDetectorUserObjectClasses.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardFilterOnType.js b/apps/user_ldap/js/wizard/wizardFilterOnType.js index f792b1a99a2..80232ffd91b 100644 --- a/apps/user_ldap/js/wizard/wizardFilterOnType.js +++ b/apps/user_ldap/js/wizard/wizardFilterOnType.js @@ -1,7 +1,7 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardFilterOnTypeFactory.js b/apps/user_ldap/js/wizard/wizardFilterOnTypeFactory.js index bd6511dc8b0..de207574539 100644 --- a/apps/user_ldap/js/wizard/wizardFilterOnTypeFactory.js +++ b/apps/user_ldap/js/wizard/wizardFilterOnTypeFactory.js @@ -1,7 +1,6 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardObject.js b/apps/user_ldap/js/wizard/wizardObject.js index a90f1533a26..9ae574d4ffd 100644 --- a/apps/user_ldap/js/wizard/wizardObject.js +++ b/apps/user_ldap/js/wizard/wizardObject.js @@ -1,8 +1,6 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardTabAbstractFilter.js b/apps/user_ldap/js/wizard/wizardTabAbstractFilter.js index 8312ad909ec..f5cfd4a14fb 100644 --- a/apps/user_ldap/js/wizard/wizardTabAbstractFilter.js +++ b/apps/user_ldap/js/wizard/wizardTabAbstractFilter.js @@ -1,7 +1,7 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardTabAdvanced.js b/apps/user_ldap/js/wizard/wizardTabAdvanced.js index 1545147f64c..8f0d0aa7973 100644 --- a/apps/user_ldap/js/wizard/wizardTabAdvanced.js +++ b/apps/user_ldap/js/wizard/wizardTabAdvanced.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; @@ -17,8 +16,8 @@ OCA = OCA || {}; /** * initializes the instance. Always call it after initialization. * - * @param tabIndex - * @param tabID + * @param {any} tabIndex - + * @param {any} tabID - */ init: function (tabIndex, tabID) { this._super(tabIndex, tabID); @@ -67,6 +66,10 @@ OCA = OCA || {}; $element: $('#ldap_attributes_for_user_search'), setMethod: 'setSearchAttributesUsers' }, + ldap_mark_remnants_as_disabled: { + $element: $('#ldap_mark_remnants_as_disabled'), + setMethod: 'setMarkRemnantsAsDisabled' + }, ldap_group_display_name: { $element: $('#ldap_group_display_name'), setMethod: 'setGroupDisplayName' @@ -125,6 +128,48 @@ OCA = OCA || {}; $element: $('#ldap_ext_storage_home_attribute'), setMethod: 'setExternalStorageHomeAttribute' }, + + //User Profile Attributes + ldap_attr_phone: { + $element: $('#ldap_attr_phone'), + setMethod: 'setPhoneAttribute' + }, + ldap_attr_website: { + $element: $('#ldap_attr_website'), + setMethod: 'setWebsiteAttribute' + }, + ldap_attr_address: { + $element: $('#ldap_attr_address'), + setMethod: 'setAddressAttribute' + }, + ldap_attr_twitter: { + $element: $('#ldap_attr_twitter'), + setMethod: 'setTwitterAttribute' + }, + ldap_attr_fediverse: { + $element: $('#ldap_attr_fediverse'), + setMethod: 'setFediverseAttribute' + }, + ldap_attr_organisation: { + $element: $('#ldap_attr_organisation'), + setMethod: 'setOrganisationAttribute' + }, + ldap_attr_role: { + $element: $('#ldap_attr_role'), + setMethod: 'setRoleAttribute' + }, + ldap_attr_headline: { + $element: $('#ldap_attr_headline'), + setMethod: 'setHeadlineAttribute' + }, + ldap_attr_biography: { + $element: $('#ldap_attr_biography'), + setMethod: 'setBiographyAttribute' + }, + ldap_attr_birthdate: { + $element: $('#ldap_attr_birthdate'), + setMethod: 'setBirthdateAttribute' + }, }; this.setManagedItems(items); }, @@ -238,6 +283,15 @@ OCA = OCA || {}; }, /** + * enables or disables marking remnants as disabled + * + * @param {string} markRemnantsAsDisabled contains an int + */ + setMarkRemnantsAsDisabled: function(markRemnantsAsDisabled) { + this.setElementValue(this.managedItems.ldap_mark_remnants_as_disabled.$element, markRemnantsAsDisabled); + }, + + /** * sets the display name attribute for groups * * @param {string} attribute @@ -281,7 +335,7 @@ OCA = OCA || {}; setDynamicGroupMemberURL: function(attribute) { this.setElementValue(this.managedItems.ldap_dynamic_group_member_url.$element, attribute); }, - + /** * enabled or disables the use of nested groups (groups in groups in * groups…) @@ -367,6 +421,96 @@ OCA = OCA || {}; }, /** + * sets the attribute for the Nextcloud user profile phone Number + * + * @param {string} attribute + */ + setPhoneAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_phone.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile website + * + * @param {string} attribute + */ + setWebsiteAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_website.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile postal address + * + * @param {string} attribute + */ + setAddressAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_address.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile twitter + * + * @param {string} attribute + */ + setTwitterAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_twitter.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile fediverse + * + * @param {string} attribute + */ + setFediverseAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_fediverse.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile organisation + * + * @param {string} attribute + */ + setOrganisationAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_organisation.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile role + * + * @param {string} attribute + */ + setRoleAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_role.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile headline + * + * @param {string} attribute + */ + setHeadlineAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_headline.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile biography + * + * @param {string} attribute + */ + setBiographyAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_biography.$element, attribute); + }, + + /** + * sets the attribute for the Nextcloud user profile birthday + * + * @param {string} attribute + */ + setBirthdateAttribute: function(attribute) { + this.setElementValue(this.managedItems.ldap_attr_birthdate.$element, attribute); + }, + + /** * deals with the result of the Test Connection test * * @param {WizardTabAdvanced} view diff --git a/apps/user_ldap/js/wizard/wizardTabElementary.js b/apps/user_ldap/js/wizard/wizardTabElementary.js index 24e76bd84c7..2a04d773058 100644 --- a/apps/user_ldap/js/wizard/wizardTabElementary.js +++ b/apps/user_ldap/js/wizard/wizardTabElementary.js @@ -1,8 +1,8 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; @@ -22,8 +22,8 @@ OCA = OCA || {}; /** * initializes the instance. Always call it after initialization. * - * @param tabIndex - * @param tabID + * @param {any} tabIndex - + * @param {any} tabID - */ init: function (tabIndex, tabID) { tabIndex = 0; @@ -245,8 +245,8 @@ OCA = OCA || {}; * updates the configuration chooser upon the deletion of a * configuration and, if necessary, loads an existing one. * - * @param view - * @param result + * @param {any} view - + * @param {any} result - */ onDeleteConfiguration: function(view, result) { if(result.isSuccess === true) { diff --git a/apps/user_ldap/js/wizard/wizardTabExpert.js b/apps/user_ldap/js/wizard/wizardTabExpert.js index 634d30212ac..4848ced40fe 100644 --- a/apps/user_ldap/js/wizard/wizardTabExpert.js +++ b/apps/user_ldap/js/wizard/wizardTabExpert.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; @@ -17,8 +16,8 @@ OCA = OCA || {}; /** * initializes the instance. Always call it after initialization. * - * @param tabIndex - * @param tabID + * @param {any} tabIndex - + * @param {any} tabID - */ init: function (tabIndex, tabID) { this._super(tabIndex, tabID); diff --git a/apps/user_ldap/js/wizard/wizardTabGeneric.js b/apps/user_ldap/js/wizard/wizardTabGeneric.js index edb099f99cd..3496dee5009 100644 --- a/apps/user_ldap/js/wizard/wizardTabGeneric.js +++ b/apps/user_ldap/js/wizard/wizardTabGeneric.js @@ -1,8 +1,7 @@ - /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; @@ -29,7 +28,7 @@ OCA = OCA || {}; bjQuiButtonClass: 'ui-button', /** - * @property {bool} - indicates whether a filter mode toggle operation + * @property {boolean} - indicates whether a filter mode toggle operation * is still in progress */ isToggling: false, @@ -147,8 +146,8 @@ OCA = OCA || {}; /** * displays server error messages. * - * @param view - * @param payload + * @param {any} view - + * @param {any} payload - */ onServerError: function(view, payload) { if ( !_.isUndefined(view.managedItems[payload.relatedKey])) { @@ -456,7 +455,7 @@ OCA = OCA || {}; * sets the filter mode initially and resets the "isToggling" marker. * This method is called after a save operation against the mode key. * - * @param mode + * @param {any} mode - */ setFilterModeOnce: function(mode) { this.isToggling = false; diff --git a/apps/user_ldap/js/wizard/wizardTabGroupFilter.js b/apps/user_ldap/js/wizard/wizardTabGroupFilter.js index 3fbff9de9a0..850387b4589 100644 --- a/apps/user_ldap/js/wizard/wizardTabGroupFilter.js +++ b/apps/user_ldap/js/wizard/wizardTabGroupFilter.js @@ -1,7 +1,6 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; diff --git a/apps/user_ldap/js/wizard/wizardTabLoginFilter.js b/apps/user_ldap/js/wizard/wizardTabLoginFilter.js index 0eef632d85d..d907957ac95 100644 --- a/apps/user_ldap/js/wizard/wizardTabLoginFilter.js +++ b/apps/user_ldap/js/wizard/wizardTabLoginFilter.js @@ -1,7 +1,7 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; @@ -16,8 +16,8 @@ OCA = OCA || {}; /** * initializes the instance. Always call it after initialization. * - * @param tabIndex - * @param tabID + * @param {any} tabIndex - + * @param {any} tabID - */ init: function (tabIndex, tabID) { this._super(tabIndex, tabID); @@ -134,7 +134,7 @@ OCA = OCA || {}; /** * presents the result of the login name test * - * @param result + * @param {any} result - */ handleLoginTestResult: function(result) { var message; @@ -159,9 +159,9 @@ OCA = OCA || {}; if(message === 'Bad search filter') { message = t('user_ldap', 'The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise.'); } else if(message === 'connection error') { - message = t('user_ldap', 'A connection error to LDAP / AD occurred, please check host, port and credentials.'); + message = t('user_ldap', 'A connection error to LDAP/AD occurred. Please check host, port and credentials.'); } else if(message === 'missing placeholder') { - message = t('user_ldap', 'The "%uid" placeholder is missing. It will be replaced with the login name when querying LDAP / AD.'); + message = t('user_ldap', 'The "%uid" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.'); } } OC.Notification.showTemporary(message, {isHTML: isHtml}); diff --git a/apps/user_ldap/js/wizard/wizardTabUserFilter.js b/apps/user_ldap/js/wizard/wizardTabUserFilter.js index da7cb77568e..00aa62f0cd7 100644 --- a/apps/user_ldap/js/wizard/wizardTabUserFilter.js +++ b/apps/user_ldap/js/wizard/wizardTabUserFilter.js @@ -1,7 +1,7 @@ /** - * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ OCA = OCA || {}; @@ -131,7 +131,7 @@ OCA = OCA || {}; if( key === 'ldap_userfilter_groups' && message === 'memberOf is not supported by the server' ) { - message = t('user_ldap', 'The group box was disabled, because the LDAP / AD server does not support memberOf.'); + message = t('user_ldap', 'The group box was disabled, because the LDAP/AD server does not support memberOf.'); } return message; } diff --git a/apps/user_ldap/l10n/ach.js b/apps/user_ldap/l10n/ach.js deleted file mode 100644 index 95c97db2f9c..00000000000 --- a/apps/user_ldap/l10n/ach.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n > 1);"); diff --git a/apps/user_ldap/l10n/ach.json b/apps/user_ldap/l10n/ach.json deleted file mode 100644 index 8e0cd6f6783..00000000000 --- a/apps/user_ldap/l10n/ach.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n > 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ady.js b/apps/user_ldap/l10n/ady.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/ady.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ady.json b/apps/user_ldap/l10n/ady.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/ady.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/af_ZA.js b/apps/user_ldap/l10n/af_ZA.js deleted file mode 100644 index e6f685c3c7f..00000000000 --- a/apps/user_ldap/l10n/af_ZA.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "Gebruikers", - "Help" : "Hulp", - "Password" : "Wagwoord", - "Continue" : "Gaan voort", - "Advanced" : "Gevorderd" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/af_ZA.json b/apps/user_ldap/l10n/af_ZA.json deleted file mode 100644 index 0e4852cb650..00000000000 --- a/apps/user_ldap/l10n/af_ZA.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "Users" : "Gebruikers", - "Help" : "Hulp", - "Password" : "Wagwoord", - "Continue" : "Gaan voort", - "Advanced" : "Gevorderd" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ak.js b/apps/user_ldap/l10n/ak.js deleted file mode 100644 index a88c80b7933..00000000000 --- a/apps/user_ldap/l10n/ak.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=n > 1;"); diff --git a/apps/user_ldap/l10n/ak.json b/apps/user_ldap/l10n/ak.json deleted file mode 100644 index 58fcef711ee..00000000000 --- a/apps/user_ldap/l10n/ak.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=n > 1;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/am_ET.js b/apps/user_ldap/l10n/am_ET.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/am_ET.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/am_ET.json b/apps/user_ldap/l10n/am_ET.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/am_ET.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ar.js b/apps/user_ldap/l10n/ar.js index b940b69a1a7..14629f8a426 100644 --- a/apps/user_ldap/l10n/ar.js +++ b/apps/user_ldap/l10n/ar.js @@ -1,35 +1,238 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "فشل مسح الارتباطات (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." : "الإعدادات غير صحيحة. يرجى الاطلاع على سجلات المتابعة للمزيد من التفاصيل.", - "No action specified" : "لم يتم تحديد الإجراء", - "No configuration specified" : "لم يتم تحديد الإعدادات.", - "No data specified" : "لم يتم تحديد البيانات.", - " Could not set configuration %s" : "تعذر تنفيذ الإعداد %s", + "Failed to clear the mappings." : "فشل مسح الارتباطات mappings", + "Failed to delete the server configuration" : "تعذّر حذف ملف إعدادات الخادم", + "Invalid configuration: Anonymous binding is not allowed." : "تكوين غير صالح: الربط المجهول Anonymous binding غير مسموح به.", + "Valid configuration, connection established!" : "تكوين صالح، تمّ تأسيس الاتصال!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "تكوين صالح، لكن فشل الربط binding. يرجى التحقّق من إعدادات الخادم وأذونات الدخول credentials.", + "Invalid configuration: %s" : "تهيئة غير صحيحة: %s", + "No action specified" : "لم يتم تحديد أيّ إجراءٍ", + "No configuration specified" : "لم يتم تحديد أيّ إعداداتٍ", + "No data specified" : "لم يتم تحديد أيّ بياناتٍ", + "Invalid data specified" : "البيانات المحددة غير صالحة", + "Could not set configuration %1$s to %2$s" : "يتعذّر تعيين الإعداد %1$s لـ %2$s", + "Action does not exist" : "الإجراء غير موجود", + "Renewing …" : "التجديد جارٍ …", + "Very weak password" : "كلمة المرور ضعيفة جدا", + "Weak password" : "كلمة المرور ضعيفة", + "So-so password" : "كلمة المرور مقبولة نوعاً ما", + "Good password" : "كلمة المرور جيدة", + "Strong password" : "كلمة المرور قوية", + "The Base DN appears to be wrong" : "يبدو أن الاسم المميز الأساسي Base DN خاطئٌ", + "Testing configuration…" : "إختبار التهيئة...", "Configuration incorrect" : "الإعدادات غير صحيحة", "Configuration incomplete" : "الإعدادات غير مكتملة", "Configuration OK" : "الإعدادات صحيحة", - "Select groups" : "إختر مجموعة", - "Select object classes" : "اختر أصناف المكونات", - "{nthServer}. Server" : "الخادم {nthServer}.", + "Select groups" : "إختر المجموعات", + "Select object classes" : "إختر أصناف الكائنات object classes", + "Please check the credentials, they seem to be wrong." : "يرجى التحقق من حيثيّات الدخول credentials، يبدو أنها خاطئة.", + "Please specify the port, it could not be auto-detected." : "يُرجى تحديد المنفذ port، حيث لا يمكن اكتشافه تلقائيا.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "تعذر اكتشاف الاسم المميز الأساسي Base DN تلقائيًا، يرجى مراجعة حيثيّات الدخول credentials، والمُضيف host، والمنفذ port.", + "Could not detect Base DN, please enter it manually." : "تعذّر اكتشاف الاسم المميز الأساسي Base DN، يُرجى إدخاله يدويًا.", + "{nthServer}. Server" : "{nthServer}. الخادم", + "No object found in the given Base DN. Please revise." : "لم يتم العثور على أي كائن object في الاسم المميز الأساسي Base DN المحدد. يُرجي المُراجعة.", + "More than 1,000 directory entries available." : "يُوجد أكثر من 1,000 مُدخل في الدليل directory entries.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخل متاح من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "حدث خطأ. يرجي التحقق من الاسم المميز الأساسي Base DN، وكذلك إعدادات الاتصال، و حيثيّات الدخول credentials.", "Do you really want to delete the current Server Configuration?" : "هل ترغب فعلاً في حذف إعدادات الخادم الحالي؟", "Confirm Deletion" : "تأكيد الحذف", + "Mappings cleared successfully!" : "تم مسح الارتباطات mappings بنجاح!", + "Error while clearing the mappings." : "خطأ أثناء مسح الارتباطات mappings.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "الربط المجهول Anonymous bind غير مسموح به. يرجى إدخال الاسم المميز للمستخدم User DN، وكلمة المرور.", + "LDAP Operations error. Anonymous bind might not be allowed." : "خطأ في عمليات LDAP. قد لا يكون مسموحاُ بالربط المجهول Anonymous bind.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "فشل الحفظ. يرجى التأكد من أن قاعدة البيانات قيد التشغيل. أعد التحميل قبل المتابعة.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "تفعيل الوضع سوف ينتج عنه تمكين استعلامات بروتوكولLDAP التلقائية. وقد يستغرق الأمر بعض الوقت بناء على حجم LDAP خاصتك. هل ما زلت تريد تفعيل الوضع؟", + "Mode switch" : "تبديل النمط", "Select attributes" : "اختر الخصائص", - "_%s group found_::_%s groups found_" : ["لا توجد مجموعات: %s","تم إيجاد %s مجموعة واحدة","تم إيجاد %s مجموعتين","تم إيجاد %s مجموعات","تم إيجاد %s مجموعة","تم إيجاد %s مجموعة/مجموعات"], - "Server" : "خادم", - "Users" : "المستخدمين", - "Groups" : "مجموعات", - "Help" : "المساعدة", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "لم يتم العثور على المستخدم. يرجى التحقق من تحديدات تسجيل الدخول واسم المستخدم الخاصين بك. عامل التصفية الفعال (للنسخ واللصق للتحقق من صحة سطر الأوامر):<br/>", + "User found and settings verified." : "تم العثور على المستخدم وتم التحقق من الإعدادات.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "ضع في اعتبارك تضييق نطاق البحث، لأنه يشمل مستخدمين كُثْرٌ، ولن يتمكن سوى أول واحد منهم من تسجيل الدخول.", + "An unspecified error occurred. Please check log and settings." : "حدث خطأ غير محدد. يرجى التحقق من السجل والإعدادات.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "عامل تصفية البحث غير صالح؛ ربما بسبب مشكلات في بناء الجملة مثل عدم تساوي عدد الأقواس المفتوحة والمغلقة. يرجي المراجعة.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "حدث خطأ في الاتصال بـ LDAP/AD. يرجى التحقق من المضيف host، والمنفذ port، وبيانات تسجيل الدخول.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "العنصر النائب placeholder ـ \"%u مُعرّف\". سيتم استبداله باسم دخول عند الاستعلام من LDAP/AD.", + "Please provide a login name to test against" : "يرجى تقديم اسم تسجيل الدخول لاختباره", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "تم تعطيل مربع المجموعة؛ لأن خادم LDAP/AD لا يدعم خاصّيّة \"عضوٌ في\" memberOf.", + "Password change rejected. Hint: %s" : "تمّ رفض تغيير كلمة المرور. إرشاد: %s", + "Mandatory field \"%s\" left empty" : "الحقل الإلزامي \"%s\" تُرِك فارغاً", + "A password is given, but not an LDAP agent" : "تمّ إعطاء كلمة المرور لكن لم يتم إعطاء وكيل LDAP", + "No password is given for the user agent" : "لم يتم إعطاء كلمة المرور لوكيل المُستخدِم", + "No LDAP base DN was given" : "لم يتم إعطاء اسم الدليل الأساسي base DN لقائمة المستخدِمين LADP", + "User base DN is not a subnode of global base DN" : "الدليل الأساسي للمستخدِم User base DN ليس متفرعاً عن الدليل الأساسي العمومي Global base DN", + "Group base DN is not a subnode of global base DN" : "الدليل الأساسي للمجموعة Group base DN ليس متفرعاً عن الدليل الأساسي العمومي Global base DN", + "Please login with the new password" : "الرجاء تسجيل الدخول باستخدام كلمة المرور الجديدة", + "LDAP User backend" : "خلفية المستخدمين User backend من LDAP ", + "Your password will expire tomorrow." : "كلمة مرورك تنتهي صلاحيتها غداً.", + "Your password will expire today." : "كلمة مرورك تنتهي صلاحيتها اليوم.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %n أيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nيوم.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام."], + "LDAP/AD integration" : "التكامل مع LDAP/AD ", + "LDAP Connection" : "الاتصال بدليل المستخدِمين LDAP ", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s","فشل ارتباط %s مع تكوين دليل المستخدمين LDAP هذا.","فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s","فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s","فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s","فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["توجد %n تكوينات دليل مستخدمين LDAP غير نشطة:%s","بوجد تكوين. لدليل مستخدمين LDAP غير نشط: %s","توجد %n تكوينات دليل مستخدمين LDAP غير نشطة: %s","توجد %n تكوينات دليل مستخدمين LDAP غير نشطة: %s","توجد %n تكوينات دليل مستخدمين LDAP غير نشطة: %s","توجد %n تكوينات دليل مستخدمين LDAP غير نشطة: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ %n لأدلة المستخدمين LDAP المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في توصيلة دليل المستخدمين المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ %n لأدلة المستخدمين LDAP المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ%n لأدلة المستخدمين LDAP المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ%n لأدلة المستخدمين LDAP المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ %n لأدلة المستخدمين LDAP المُكوَّنة (%s)"], + "Invalid LDAP UUIDs" : "مُعرِّفات UUID الخاصة بـ LDAP غير صحيحة", + "None found" : "لم يُمكن العثور على أي شيء", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "تم العثور على مُعرِّفات UUID غير صالحة لحسابات أو مجموعات LDAP. الرجاء مراجعة الإعداد \"تجاوز اكتشاف UUID ـ Override UUID detection\" في الجزء الخبير من تكوين LDAP ثم اعطِ الأمر السطري: \"occ ldap:update-uuid\" لتحديثها", + "_%n group found_::_%n groups found_" : ["تم العثور على %n مجموعات","تم العثور على %n مجموعة","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات"], + "> 1000 groups found" : "> 1000 مجموعة موجودة", + "> 1000 users found" : "> 1000 مستخدِم موجود", + "_%n user found_::_%n users found_" : ["تم العثور على %n مستخدمين","تم العثور على %n مستخدم","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "تعذر اكتشاف خاصّية اسم العرض للمستخدم user display name attribute. يرجى تحديدها بنفسك في الإعدادات المتقدمة لخادم LDAP.", + "Could not find the desired feature" : "تعذر العثور على الميزة المطلوبة", + "Invalid Host" : "مُضيف غير صالح", + "LDAP user and group backend" : "خلفية المستخدمين و المجموعات من LDAP", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "يتيح هذا التطبيق لمسؤولي النظام توصيل نكست كلاود بدليل المستخدمين المستند إلى LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "يتيح هذا التطبيق لمسؤولي النظام توصيل نكست كلاود بدليل المستخدمين المستنِد إلى LDAP للمصادقة و توفير المستخدمين users، والمجموعات groups، و سمات المستخدمين user attributes. \nيمكن للمشرفين تكوين هذا التطبيق للاتصال بدليل LDAP واحد أو أكثر عبر واجهة LDAP. \nيمكن سحب سماتٍ مثل حصة المستخدم التخزينية، و البريد الإلكتروني، و التجسيدات الرمزية avatar، وعضوية المجموعات و غيرها إلى نكست كلاود باستخدام الاستعلامات والمرشحات المناسبة. \nيقوم المستخدم بتسجيل الدخول إلى نكست كلاود باستخدام حيثيات دخوله من LDAP أو AD، ويتم منحه حق الوصول بناءً على طلب المصادقة الذي تتم معالجته بواسطة خادم LDAP أو AD. \nلا يقوم نكست كلاود بتخزين كلمات مرور LDAP أو AD، بل يستخدم حيثيّات المستخدم هذه للمصادقة ثم يستخدم مُعرّف الجلسة session كمُعرّف للمستخدم. \n\nيتوفر المزيد من المعلومات في وثائق مستخدم LDAP و Group Backend.", + "Test Configuration" : "اختبر التكوين", + "Help" : "مساعدة", + "Groups meeting these criteria are available in %s:" : "المجموعات التي تلبي هذه المعايير متوفرة في %s:", + "Only these object classes:" : "فئات هذه الكائنات فقط:", + "Only from these groups:" : "فقط من هذه المجموعات:", + "Search groups" : "مجموعات البحث", + "Available groups" : "المجموعات المتاحة", + "Selected groups" : "المجموعات المحددة", + "Edit LDAP Query" : "تحرير استعلام من خادم LDAP", + "LDAP Filter:" : "تصفية LDAP:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "يحدد عامل التصفية أي مجموعات من LDAP سوف يكون لها حق الوصول إلى التطبيق %s.", + "Verify settings and count the groups" : "تحقق من الإعدادات و احصر عدد المجموعات", + "When logging in, %s will find the user based on the following attributes:" : "عند تسجيل الدخول، %sسوف تجد المستخدم بناءً على الخصائص التالية:", + "LDAP/AD Username:" : "اسم مستخدم LDAP/AD ـ : ", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "يسمح بتسجيل الدخول مقابل اسم مستخدم LDAP / AD ، والذي يكون إما \"uid\" أو \"sAMAccountName\" وسيتم اكتشافه.", + "LDAP/AD Email Address:" : "عنوان البريد الالكتروني LDAP/AD ـ :", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "يُسمح بتسجيل الدخول مقابل خاصّية البريد الإلكتروني. \"mail\" و \"mailPrimaryAddress\" مسموح بهما.", + "Other Attributes:" : "خصائص أخري:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "حدد عامل التصفية الذي سيتم تطبيقه، عند محاولة تسجيل الدخول. يحل \"%%uid\" محل اسم المستخدم في إجراء تسجيل الدخول. مثال: \"uid=%%uid\"", + "Test Loginname" : "اختبار اسم تسجيل الدخول", + "Attempts to receive a DN for the given loginname and the current login filter" : "محاولة تلقّي الاسم المميز DN لاسم تسجيل الدخول المحدد و عامل تصفية تسجيل الدخول الحالي", + "Verify settings" : "التحقُّق من الإعدادات", + "%s. Server:" : "%s. خادم:", + "Add a new configuration" : "إضافة تكوين جديد", + "Copy current configuration into new directory binding" : "نسخ التهيئة الحالية إلى دليل جديد مرتبط", + "Delete the current configuration" : "حذف التهيئة الحالية", "Host" : "المضيف", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "يمكنك التغاضي عن البروتوكول، ما لم يكن SSL مطلوب. إذا كان الأمر كذلك، فابدأ بـ ldaps", "Port" : "المنفذ", + "Detect 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=agent,dc=example,dc=com. للوصول مجهول الهوية anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.", "Password" : "كلمة المرور", + "For anonymous access, leave DN and Password empty." : "للوصول المجهول anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.", + "Save Credentials" : "حفظ بيانات تسجيل الدخول", + "One Base DN per line" : "اسم مميز واحد أساسي Base DN لكل سطر", + "You can specify Base DN for users and groups in the Advanced tab" : "يمكنك تحديد الاسم المميز الأساسي Base DN للمستخدمين والمجموعات من علامة تبويب الإعدادات المتقدمة", + "Detect Base DN" : "اكتشاف الاسم المميز الأساسي Base DN", + "Test Base DN" : "إختبر الاسم المميز الأساسي Base DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "يُلغي طلبات LDAP التلقائية. يُفضّل استعماله في حالة الخوادم التي تخدم أعداداً كبيرة، ولكنه يتطلب بعض المعرفة فيما يخص بروتوكول LDAP.", + "Manually enter LDAP filters (recommended for large directories)" : "الإدخال اليدوي لفلاتر بروتوكول LDAP (يُنصح به في حالة الأدلة الكبيرة)", + "Listing and searching for users is constrained by these criteria:" : "العرض والبحث عن المستخدمين مُقيّدٌ بهذه الشروط:", + "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." : "أكثر فئات الكائنات شيوعًا بالنسبة للمستخدمين هي: الشخص التنظيمي \"organizationalPerson\" والشخص \"person\" والمستخدم \"user\"وinetOrgPerson. إذا لم تكن متأكدًا من فئة الكائن التي تريد تحديدها، فيرجى استشارة مسئول الدليل الخاص بك.", + "The filter specifies which LDAP users shall have access to the %s instance." : "يُحدِّد عامل التصفية أيّ مستخدمي LDAP يمكنه الوصول إلى الخادم %s.", + "Verify settings and count users" : "التّحقق من الإعدادات وعدد المستخدمين", + "Saving" : "الحفظ جارٍ...", "Back" : "رجوع", - "Continue" : "المتابعة", - "Advanced" : "تعديلات متقدمه", - "Email Field" : "خانة البريد الإلكتروني" + "Continue" : "متابعة", + "Please renew your password." : "الرجاء تجديد كلمة مرورك.", + "An internal error occurred." : "حدث خطأ داخلي.", + "Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مسؤول النظام.", + "Current password" : "كلمة المرور الحالية", + "New password" : "كلمة المرور الجديدة", + "Renew password" : "تجديد كلمة المرور", + "Wrong password." : "كلمة مرور خاطئة.", + "Cancel" : "إلغاء", + "Server" : "خادم", + "Users" : "المستخدمين", + "Login Attributes" : "خصائص تسجيل الدخول", + "Groups" : "مجموعات", + "Expert" : "خبير", + "Advanced" : "متقدمة", + "<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> وِحدة PHP LDAP غير مُنصبّة؛ لذا فإن الخلفية لن تعمل. يرجى طلب تنصيبها من مسؤول النظام.", + "Connection Settings" : "إعدادات الربط", + "Configuration Active" : "الإعداد نشط", + "When unchecked, this configuration will be skipped." : "عندما لا يتم تحديده، سوف يتم تخطي هذه التهيئة.", + "Backup (Replica) Host" : "مضيف النسخ الاحتياطي (طِبقَ الأصل)", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "توفير مضيف احتياطي اختياري. يجب أن يكون نسخة طبق الأصل من خادم LDAP/AC.", + "Backup (Replica) Port" : "منفذ النسخ الاحتياطي (طِبقَ الأصل)", + "Disable Main Server" : "تعطيل الخادم الرئيسي", + "Only connect to the replica server." : "متصل فقط بالخادم الاحتياطي.", + "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." : "لا يوصي به، استخدمه للاختبار فقط! إذا كان الاتصال يعمل فقط مع هذا الخيار، فقم باستيراد شهادة SSL لخادم LDAP في الخادم %s.", + "Cache Time-To-Live" : "مدة صلاحية ذاكرة التخزين المؤقت cache", + "in seconds. A change empties the cache." : "خلال ثوان. يؤدي التغيير إلى إفراغ ذاكرة التخزين المؤقت cache.", + "Directory Settings" : "إعدادات الدليل", + "User Display Name Field" : "حقل عرض اسم المستخدم", + "The LDAP attribute to use to generate the user's display name." : "تستخدم سمة بروتوكول LDAP لتوليد اسم عرض المستخدم.", + "2nd User Display Name Field" : "الحقل 2 لعرض اسم المستخدم ", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "اختياري. سمة LDAP سوف تُضاف إلى اسم العرض بين قوسين. و النتيجة ستكون كما في المثال: »John Doe (john.doe@example.org)«.", + "Base User Tree" : "شجرة المستخدم الأساسي Base User Tree", + "One User Base DN per line" : "اسم مميز أساسي User Base DN لمستخدم واحد لكل سطر", + "User Search Attributes" : "خصائص بحث المستخدم", + "Optional; one attribute per line" : "اختياري؛ سمة واحدة لكل سطر", + "Disable users missing from LDAP" : "إيقاف المستخدمين غير الموجودين على LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "عند التشغيل، سيتم تعطيل المستخدمين الذين تمّ استيرادهم من LDAP لكن تعذّر إيحادهم عندها", + "Group Display Name Field" : "حقل عرض اسم المجموعة", + "The LDAP attribute to use to generate the groups's display name." : "تستخدم خاصية بروتوكول LDAP لإنشاء اسماء عرض للمجموعات.", + "Base Group Tree" : "شجرة المجموعة الأساسية Base Group Tree", + "One Group Base DN per line" : "اسم مميز أساسي Group Base DN واحد للمجموعة لكل سطر", + "Group Search Attributes" : "خصائص بحث المجموعات", + "Group-Member association" : "ارتباط أعضاء المجموعة Group-Member association", + "Dynamic Group Member URL" : "محدد موقع URL الديناميكي لعضو المجموعة ", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "تحتوي خاصية بروتوكولLDAP الموجودة في كائنات المجموعة على عنوان بحث LDAP و الذي يحدد الكائنات التي تنتمي إلى المجموعة. (الإعداد الفارغ يتسبب في تعطيل وظيفة عضوية المجموعة الديناميكية.)", + "Nested Groups" : "المجموعات المتداخلة", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "عند التشغيل، يتم دعم المجموعات التي تحتوي على مجموعات. (تعمل فقط إذا كان تحديد عضو المجموعة يحتوي على اسم مميز DN).", + "Paging chunksize" : "حجم رزم الصفحات Paging chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "يتم استخدام حجم الرِّزمَة لعمليات البحث المقسمة إلى صفحات في LDAP؛ والتي قد تعطي نتائج ضخمة تبعاً لعدد المستخدمين و المجموعات. (الضبط علي 0 يؤدي إلى تعطيل هذا الأسلوب من البحث في تلك الحالات.)", + "Enable LDAP password changes per user" : "تمكين تغيير كلمة المرور لكل مستخدم علي خادم LDAP ", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "يتيح خادم بروتوكول LDAP للمستخدمين تغيير كلمة المرور الخاصة بهم والسماح لمسؤولي النظام المتميزين ومسؤولي المجموعات بتغيير كلمة مرور مستخدمي الخادم. وتعمل هذه الخاصية عندما يتم تهيئة وضبط سياسات التحكم في الوصول على خادم LDAP وفقًا لذلك. وحيث أن كلمات المرور يتم إرسالها فى صورة نصٍّ عادي إلى خادم LDAP، فيجب استخدام تشفير النقل وضبط تجزئة كلمة المرور على خادم LDAP.", + "(New password is sent as plain text to LDAP)" : "(يتم إرسال كلمة المرور الجديدة كنص عادي إلى خادم LDAP )", + "Default password policy DN" : "سياسة الاسم المميز لكلمة المرورالافتراضية", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "سياسة الاسم المميز DN لكلمة المرورالافتراضية التي سيتم استخدامها لمعالجة انتهاء صلاحية كلمة المرور تعمل فقط عندما يتم تمكين تغيير كلمة مرور خادم LDAP لكل مستخدم ويكون مدعومًا فقط بواسطة OpenLDAP. H. أترُكه فارغًا لتعطيل معالجة انتهاء صلاحية كلمة المرور.", + "Special Attributes" : "خصائص خاصة", + "Quota Field" : "حقل الحِّصّة التخزينية", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "اتركه فارغًا للحصة التخزينية الافتراضية للمستخدم. خلاف ذلك، حدد خاصّية خادم LDAP/AD.", + "Quota Default" : "الحصة الافتراضية", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "تخطِّي الحصة الافتراضية لمستخدمي خادم LDAP الذين ليس لديهم حصة محددة في حقل الحصة.", + "Email Field" : "خانة البريد الإلكتروني", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "قُم بتعيين البريد الإلكتروني للمستخدمين من خاصّية خادم LDAP الخاصة بهم. اتركه فارغًا للتصرُّف الافتراضي.", + "User Home Folder Naming Rule" : "قاعدة تسمية المجلد الرئيسي للمستخدم", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "أترُكه فارغًا لاسم المستخدم (افتراضي). خلاف ذلك، حدِّد خاصّية LDAP/AD.", + "\"$home\" Placeholder Field" : "حقل العنصر النائب \"$home\"", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "سيتم استبدال $home في تكوين وحدة التخزين الخارجية بقيمة الخاصّية المحددة", + "User Profile Attributes" : "خصائص الملف الشخصي للمستخدِم", + "Phone Field" : "خانة الهاتف", + "User profile Phone will be set from the specified attribute" : "خانة الهاتف في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Website Field" : "خانة موقع الويب", + "User profile Website will be set from the specified attribute" : "خانة موقع الويب في الملف الشخصي للمستخدم سيتم تعيينها من الخاصّية المحددة", + "Address Field" : "خانة العنوان", + "User profile Address will be set from the specified attribute" : "خانة العنوان في الملف الشخصي للمستخدم سيتم تعيينها من الخاصّية المُحدّدة", + "Twitter Field" : "خانة حساب تويتر", + "User profile Twitter will be set from the specified attribute" : "خانة حساب تويتر في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Fediverse Field" : "خانة حساب Fediverse", + "User profile Fediverse will be set from the specified attribute" : "خانة حساب Fediverse في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Organisation Field" : "خانة المؤسسة organization", + "User profile Organisation will be set from the specified attribute" : "خانة المنظمة organization في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Role Field" : "خانة الوظيفة role", + "User profile Role will be set from the specified attribute" : "خانة الوظيفة role في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Headline Field" : "حقل العنوان", + "User profile Headline will be set from the specified attribute" : "خانة العنوان في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Biography Field" : "خانة السيرة الذاتية biography", + "User profile Biography will be set from the specified attribute" : "خانة السيرة الذاتية biography في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Birthdate Field" : "حقل تاريخ الميلاد", + "User profile Date of birth will be set from the specified attribute" : "تاريخ الميلاد في ملف المستخدم سيتم ملؤه من الخانة المحددة", + "Pronouns Field" : "حقل الضمائر", + "User profile Pronouns will be set from the specified attribute" : "سيتم تعيين ضمائر ملف تعريف المستخدم من السمة المحددة", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "بشكل افتراضي، سيتم إنشاء اسم المستخدم الداخلي internal username من خاصّية المُغرّف المُميّز الشامل UUID. هذا يضمن أن اسم المستخدم فريدٌ ولا يلزمه أي تحويل في الأحرف. اسم المستخدم الداخلي مُقيّدٌ باستخدام هذه الأحرف فقط: [a-zA-Z0-9 _. @ -]. غير هذه الأحرف يقع استبدالها بما يقابلها من أحرف الآسكي ASCII أو - ببساطة - يقع حذفها. في حالة وقوع تضاربٍِ، سيتم إلحاق عدد بالاسم. \n\nيُستخدم هذا الاسم الداخلي لتعريف المستخدم داخليًا. وهو أيضًا الاسم الافتراضي للمجلد الرئيسي للمستخدم. و هو أيضًا جزء من عناوين remote URL القَصِيّة كما في خدمات DAV على سبيل المثال. باستخدام هذا الإعداد ، يمكن تجاوز السلوك الافتراضي. سيكون للتغييرات تأثير فقط على مستخدمي 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." : "بشكل افتراضي، يتم اكتشاف خاصية المعرف الفريد الشامل 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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "تُستخدم أسماء المستخدمين لتخزين وتخصيص البيانات التعريف الوصفية. من أجل تحديد المستخدمين والتعرف عليهم بدقة، سيكون لكل مستخدم على خادم LDAP اسم مستخدم داخلي. يتطلب هذا ربطاً mapping بين اسم المستخدم و مستخدم خادم LDAP. يتم تعيين اسم المستخدم الذي تم إنشاؤه إلى المعرف الفريد الشامل \"UUID\" لمستخدم LDAP. بالإضافة إلى ذلك، يتم تخزين الاسم المميز DN مؤقتًا أيضًا لتقليل تفاعل LDAP، ولكنه لا يستخدم لتحديد الهوية. وعند تغير الاسم المميز يتم العثور على التغييرات. ويتم استخدام اسم المستخدم الداخلي في كل مكان. إلغاء الربط سيكون له آثار متبقية في كل مكان. إلغاء الربط يؤثر على جميع تكوينات LDAP! لا تقم مطلقًا بإلغاء الربط في بيئة الإنتاج. فقط في مرحلة الاختبار أو المرحلة التجريبية.", + "Clear Username-LDAP User Mapping" : "إلغاء الربط بين اسم المستخدم في LDAP و المستخدم", + "Clear Groupname-LDAP Group Mapping" : "إلغاء الربط بين اسم المجموعة في LDAP و المجموعة", + "Invalid configuration. Please have a look at the logs for further details." : "تكوين غير صحيح. يرجى الرجوع إلى سجلات الأنشطة لمزيد من التفاصيل." }, "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/user_ldap/l10n/ar.json b/apps/user_ldap/l10n/ar.json index 20ba16d1481..9a3518c00fc 100644 --- a/apps/user_ldap/l10n/ar.json +++ b/apps/user_ldap/l10n/ar.json @@ -1,33 +1,236 @@ { "translations": { - "Failed to clear the mappings." : "فشل مسح الارتباطات (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." : "الإعدادات غير صحيحة. يرجى الاطلاع على سجلات المتابعة للمزيد من التفاصيل.", - "No action specified" : "لم يتم تحديد الإجراء", - "No configuration specified" : "لم يتم تحديد الإعدادات.", - "No data specified" : "لم يتم تحديد البيانات.", - " Could not set configuration %s" : "تعذر تنفيذ الإعداد %s", + "Failed to clear the mappings." : "فشل مسح الارتباطات mappings", + "Failed to delete the server configuration" : "تعذّر حذف ملف إعدادات الخادم", + "Invalid configuration: Anonymous binding is not allowed." : "تكوين غير صالح: الربط المجهول Anonymous binding غير مسموح به.", + "Valid configuration, connection established!" : "تكوين صالح، تمّ تأسيس الاتصال!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "تكوين صالح، لكن فشل الربط binding. يرجى التحقّق من إعدادات الخادم وأذونات الدخول credentials.", + "Invalid configuration: %s" : "تهيئة غير صحيحة: %s", + "No action specified" : "لم يتم تحديد أيّ إجراءٍ", + "No configuration specified" : "لم يتم تحديد أيّ إعداداتٍ", + "No data specified" : "لم يتم تحديد أيّ بياناتٍ", + "Invalid data specified" : "البيانات المحددة غير صالحة", + "Could not set configuration %1$s to %2$s" : "يتعذّر تعيين الإعداد %1$s لـ %2$s", + "Action does not exist" : "الإجراء غير موجود", + "Renewing …" : "التجديد جارٍ …", + "Very weak password" : "كلمة المرور ضعيفة جدا", + "Weak password" : "كلمة المرور ضعيفة", + "So-so password" : "كلمة المرور مقبولة نوعاً ما", + "Good password" : "كلمة المرور جيدة", + "Strong password" : "كلمة المرور قوية", + "The Base DN appears to be wrong" : "يبدو أن الاسم المميز الأساسي Base DN خاطئٌ", + "Testing configuration…" : "إختبار التهيئة...", "Configuration incorrect" : "الإعدادات غير صحيحة", "Configuration incomplete" : "الإعدادات غير مكتملة", "Configuration OK" : "الإعدادات صحيحة", - "Select groups" : "إختر مجموعة", - "Select object classes" : "اختر أصناف المكونات", - "{nthServer}. Server" : "الخادم {nthServer}.", + "Select groups" : "إختر المجموعات", + "Select object classes" : "إختر أصناف الكائنات object classes", + "Please check the credentials, they seem to be wrong." : "يرجى التحقق من حيثيّات الدخول credentials، يبدو أنها خاطئة.", + "Please specify the port, it could not be auto-detected." : "يُرجى تحديد المنفذ port، حيث لا يمكن اكتشافه تلقائيا.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "تعذر اكتشاف الاسم المميز الأساسي Base DN تلقائيًا، يرجى مراجعة حيثيّات الدخول credentials، والمُضيف host، والمنفذ port.", + "Could not detect Base DN, please enter it manually." : "تعذّر اكتشاف الاسم المميز الأساسي Base DN، يُرجى إدخاله يدويًا.", + "{nthServer}. Server" : "{nthServer}. الخادم", + "No object found in the given Base DN. Please revise." : "لم يتم العثور على أي كائن object في الاسم المميز الأساسي Base DN المحدد. يُرجي المُراجعة.", + "More than 1,000 directory entries available." : "يُوجد أكثر من 1,000 مُدخل في الدليل directory entries.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخل متاح من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم","{objectsFound} مدخلات متاحة من خلال الاسم المميز الأساسي المقدم"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "حدث خطأ. يرجي التحقق من الاسم المميز الأساسي Base DN، وكذلك إعدادات الاتصال، و حيثيّات الدخول credentials.", "Do you really want to delete the current Server Configuration?" : "هل ترغب فعلاً في حذف إعدادات الخادم الحالي؟", "Confirm Deletion" : "تأكيد الحذف", + "Mappings cleared successfully!" : "تم مسح الارتباطات mappings بنجاح!", + "Error while clearing the mappings." : "خطأ أثناء مسح الارتباطات mappings.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "الربط المجهول Anonymous bind غير مسموح به. يرجى إدخال الاسم المميز للمستخدم User DN، وكلمة المرور.", + "LDAP Operations error. Anonymous bind might not be allowed." : "خطأ في عمليات LDAP. قد لا يكون مسموحاُ بالربط المجهول Anonymous bind.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "فشل الحفظ. يرجى التأكد من أن قاعدة البيانات قيد التشغيل. أعد التحميل قبل المتابعة.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "تفعيل الوضع سوف ينتج عنه تمكين استعلامات بروتوكولLDAP التلقائية. وقد يستغرق الأمر بعض الوقت بناء على حجم LDAP خاصتك. هل ما زلت تريد تفعيل الوضع؟", + "Mode switch" : "تبديل النمط", "Select attributes" : "اختر الخصائص", - "_%s group found_::_%s groups found_" : ["لا توجد مجموعات: %s","تم إيجاد %s مجموعة واحدة","تم إيجاد %s مجموعتين","تم إيجاد %s مجموعات","تم إيجاد %s مجموعة","تم إيجاد %s مجموعة/مجموعات"], - "Server" : "خادم", - "Users" : "المستخدمين", - "Groups" : "مجموعات", - "Help" : "المساعدة", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "لم يتم العثور على المستخدم. يرجى التحقق من تحديدات تسجيل الدخول واسم المستخدم الخاصين بك. عامل التصفية الفعال (للنسخ واللصق للتحقق من صحة سطر الأوامر):<br/>", + "User found and settings verified." : "تم العثور على المستخدم وتم التحقق من الإعدادات.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "ضع في اعتبارك تضييق نطاق البحث، لأنه يشمل مستخدمين كُثْرٌ، ولن يتمكن سوى أول واحد منهم من تسجيل الدخول.", + "An unspecified error occurred. Please check log and settings." : "حدث خطأ غير محدد. يرجى التحقق من السجل والإعدادات.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "عامل تصفية البحث غير صالح؛ ربما بسبب مشكلات في بناء الجملة مثل عدم تساوي عدد الأقواس المفتوحة والمغلقة. يرجي المراجعة.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "حدث خطأ في الاتصال بـ LDAP/AD. يرجى التحقق من المضيف host، والمنفذ port، وبيانات تسجيل الدخول.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "العنصر النائب placeholder ـ \"%u مُعرّف\". سيتم استبداله باسم دخول عند الاستعلام من LDAP/AD.", + "Please provide a login name to test against" : "يرجى تقديم اسم تسجيل الدخول لاختباره", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "تم تعطيل مربع المجموعة؛ لأن خادم LDAP/AD لا يدعم خاصّيّة \"عضوٌ في\" memberOf.", + "Password change rejected. Hint: %s" : "تمّ رفض تغيير كلمة المرور. إرشاد: %s", + "Mandatory field \"%s\" left empty" : "الحقل الإلزامي \"%s\" تُرِك فارغاً", + "A password is given, but not an LDAP agent" : "تمّ إعطاء كلمة المرور لكن لم يتم إعطاء وكيل LDAP", + "No password is given for the user agent" : "لم يتم إعطاء كلمة المرور لوكيل المُستخدِم", + "No LDAP base DN was given" : "لم يتم إعطاء اسم الدليل الأساسي base DN لقائمة المستخدِمين LADP", + "User base DN is not a subnode of global base DN" : "الدليل الأساسي للمستخدِم User base DN ليس متفرعاً عن الدليل الأساسي العمومي Global base DN", + "Group base DN is not a subnode of global base DN" : "الدليل الأساسي للمجموعة Group base DN ليس متفرعاً عن الدليل الأساسي العمومي Global base DN", + "Please login with the new password" : "الرجاء تسجيل الدخول باستخدام كلمة المرور الجديدة", + "LDAP User backend" : "خلفية المستخدمين User backend من LDAP ", + "Your password will expire tomorrow." : "كلمة مرورك تنتهي صلاحيتها غداً.", + "Your password will expire today." : "كلمة مرورك تنتهي صلاحيتها اليوم.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %n أيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nيوم.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام."], + "LDAP/AD integration" : "التكامل مع LDAP/AD ", + "LDAP Connection" : "الاتصال بدليل المستخدِمين LDAP ", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s","فشل ارتباط %s مع تكوين دليل المستخدمين LDAP هذا.","فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s","فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s","فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s","فشل ارتباط %n مع تكوينات LDAP دليل المستخدمين: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s","فشل البحث عن %n تكوينات LDAP دليل المستخدمين: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["توجد %n تكوينات دليل مستخدمين LDAP غير نشطة:%s","بوجد تكوين. لدليل مستخدمين LDAP غير نشط: %s","توجد %n تكوينات دليل مستخدمين LDAP غير نشطة: %s","توجد %n تكوينات دليل مستخدمين LDAP غير نشطة: %s","توجد %n تكوينات دليل مستخدمين LDAP غير نشطة: %s","توجد %n تكوينات دليل مستخدمين LDAP غير نشطة: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ %n لأدلة المستخدمين LDAP المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في توصيلة دليل المستخدمين المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ %n لأدلة المستخدمين LDAP المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ%n لأدلة المستخدمين LDAP المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ%n لأدلة المستخدمين LDAP المُكوَّنة (%s)","الارتباط و البحث يعمل كما يجب في كل التوصيلات الـ %n لأدلة المستخدمين LDAP المُكوَّنة (%s)"], + "Invalid LDAP UUIDs" : "مُعرِّفات UUID الخاصة بـ LDAP غير صحيحة", + "None found" : "لم يُمكن العثور على أي شيء", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "تم العثور على مُعرِّفات UUID غير صالحة لحسابات أو مجموعات LDAP. الرجاء مراجعة الإعداد \"تجاوز اكتشاف UUID ـ Override UUID detection\" في الجزء الخبير من تكوين LDAP ثم اعطِ الأمر السطري: \"occ ldap:update-uuid\" لتحديثها", + "_%n group found_::_%n groups found_" : ["تم العثور على %n مجموعات","تم العثور على %n مجموعة","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات"], + "> 1000 groups found" : "> 1000 مجموعة موجودة", + "> 1000 users found" : "> 1000 مستخدِم موجود", + "_%n user found_::_%n users found_" : ["تم العثور على %n مستخدمين","تم العثور على %n مستخدم","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "تعذر اكتشاف خاصّية اسم العرض للمستخدم user display name attribute. يرجى تحديدها بنفسك في الإعدادات المتقدمة لخادم LDAP.", + "Could not find the desired feature" : "تعذر العثور على الميزة المطلوبة", + "Invalid Host" : "مُضيف غير صالح", + "LDAP user and group backend" : "خلفية المستخدمين و المجموعات من LDAP", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "يتيح هذا التطبيق لمسؤولي النظام توصيل نكست كلاود بدليل المستخدمين المستند إلى LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "يتيح هذا التطبيق لمسؤولي النظام توصيل نكست كلاود بدليل المستخدمين المستنِد إلى LDAP للمصادقة و توفير المستخدمين users، والمجموعات groups، و سمات المستخدمين user attributes. \nيمكن للمشرفين تكوين هذا التطبيق للاتصال بدليل LDAP واحد أو أكثر عبر واجهة LDAP. \nيمكن سحب سماتٍ مثل حصة المستخدم التخزينية، و البريد الإلكتروني، و التجسيدات الرمزية avatar، وعضوية المجموعات و غيرها إلى نكست كلاود باستخدام الاستعلامات والمرشحات المناسبة. \nيقوم المستخدم بتسجيل الدخول إلى نكست كلاود باستخدام حيثيات دخوله من LDAP أو AD، ويتم منحه حق الوصول بناءً على طلب المصادقة الذي تتم معالجته بواسطة خادم LDAP أو AD. \nلا يقوم نكست كلاود بتخزين كلمات مرور LDAP أو AD، بل يستخدم حيثيّات المستخدم هذه للمصادقة ثم يستخدم مُعرّف الجلسة session كمُعرّف للمستخدم. \n\nيتوفر المزيد من المعلومات في وثائق مستخدم LDAP و Group Backend.", + "Test Configuration" : "اختبر التكوين", + "Help" : "مساعدة", + "Groups meeting these criteria are available in %s:" : "المجموعات التي تلبي هذه المعايير متوفرة في %s:", + "Only these object classes:" : "فئات هذه الكائنات فقط:", + "Only from these groups:" : "فقط من هذه المجموعات:", + "Search groups" : "مجموعات البحث", + "Available groups" : "المجموعات المتاحة", + "Selected groups" : "المجموعات المحددة", + "Edit LDAP Query" : "تحرير استعلام من خادم LDAP", + "LDAP Filter:" : "تصفية LDAP:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "يحدد عامل التصفية أي مجموعات من LDAP سوف يكون لها حق الوصول إلى التطبيق %s.", + "Verify settings and count the groups" : "تحقق من الإعدادات و احصر عدد المجموعات", + "When logging in, %s will find the user based on the following attributes:" : "عند تسجيل الدخول، %sسوف تجد المستخدم بناءً على الخصائص التالية:", + "LDAP/AD Username:" : "اسم مستخدم LDAP/AD ـ : ", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "يسمح بتسجيل الدخول مقابل اسم مستخدم LDAP / AD ، والذي يكون إما \"uid\" أو \"sAMAccountName\" وسيتم اكتشافه.", + "LDAP/AD Email Address:" : "عنوان البريد الالكتروني LDAP/AD ـ :", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "يُسمح بتسجيل الدخول مقابل خاصّية البريد الإلكتروني. \"mail\" و \"mailPrimaryAddress\" مسموح بهما.", + "Other Attributes:" : "خصائص أخري:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "حدد عامل التصفية الذي سيتم تطبيقه، عند محاولة تسجيل الدخول. يحل \"%%uid\" محل اسم المستخدم في إجراء تسجيل الدخول. مثال: \"uid=%%uid\"", + "Test Loginname" : "اختبار اسم تسجيل الدخول", + "Attempts to receive a DN for the given loginname and the current login filter" : "محاولة تلقّي الاسم المميز DN لاسم تسجيل الدخول المحدد و عامل تصفية تسجيل الدخول الحالي", + "Verify settings" : "التحقُّق من الإعدادات", + "%s. Server:" : "%s. خادم:", + "Add a new configuration" : "إضافة تكوين جديد", + "Copy current configuration into new directory binding" : "نسخ التهيئة الحالية إلى دليل جديد مرتبط", + "Delete the current configuration" : "حذف التهيئة الحالية", "Host" : "المضيف", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "يمكنك التغاضي عن البروتوكول، ما لم يكن SSL مطلوب. إذا كان الأمر كذلك، فابدأ بـ ldaps", "Port" : "المنفذ", + "Detect 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=agent,dc=example,dc=com. للوصول مجهول الهوية anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.", "Password" : "كلمة المرور", + "For anonymous access, leave DN and Password empty." : "للوصول المجهول anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.", + "Save Credentials" : "حفظ بيانات تسجيل الدخول", + "One Base DN per line" : "اسم مميز واحد أساسي Base DN لكل سطر", + "You can specify Base DN for users and groups in the Advanced tab" : "يمكنك تحديد الاسم المميز الأساسي Base DN للمستخدمين والمجموعات من علامة تبويب الإعدادات المتقدمة", + "Detect Base DN" : "اكتشاف الاسم المميز الأساسي Base DN", + "Test Base DN" : "إختبر الاسم المميز الأساسي Base DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "يُلغي طلبات LDAP التلقائية. يُفضّل استعماله في حالة الخوادم التي تخدم أعداداً كبيرة، ولكنه يتطلب بعض المعرفة فيما يخص بروتوكول LDAP.", + "Manually enter LDAP filters (recommended for large directories)" : "الإدخال اليدوي لفلاتر بروتوكول LDAP (يُنصح به في حالة الأدلة الكبيرة)", + "Listing and searching for users is constrained by these criteria:" : "العرض والبحث عن المستخدمين مُقيّدٌ بهذه الشروط:", + "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." : "أكثر فئات الكائنات شيوعًا بالنسبة للمستخدمين هي: الشخص التنظيمي \"organizationalPerson\" والشخص \"person\" والمستخدم \"user\"وinetOrgPerson. إذا لم تكن متأكدًا من فئة الكائن التي تريد تحديدها، فيرجى استشارة مسئول الدليل الخاص بك.", + "The filter specifies which LDAP users shall have access to the %s instance." : "يُحدِّد عامل التصفية أيّ مستخدمي LDAP يمكنه الوصول إلى الخادم %s.", + "Verify settings and count users" : "التّحقق من الإعدادات وعدد المستخدمين", + "Saving" : "الحفظ جارٍ...", "Back" : "رجوع", - "Continue" : "المتابعة", - "Advanced" : "تعديلات متقدمه", - "Email Field" : "خانة البريد الإلكتروني" + "Continue" : "متابعة", + "Please renew your password." : "الرجاء تجديد كلمة مرورك.", + "An internal error occurred." : "حدث خطأ داخلي.", + "Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مسؤول النظام.", + "Current password" : "كلمة المرور الحالية", + "New password" : "كلمة المرور الجديدة", + "Renew password" : "تجديد كلمة المرور", + "Wrong password." : "كلمة مرور خاطئة.", + "Cancel" : "إلغاء", + "Server" : "خادم", + "Users" : "المستخدمين", + "Login Attributes" : "خصائص تسجيل الدخول", + "Groups" : "مجموعات", + "Expert" : "خبير", + "Advanced" : "متقدمة", + "<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> وِحدة PHP LDAP غير مُنصبّة؛ لذا فإن الخلفية لن تعمل. يرجى طلب تنصيبها من مسؤول النظام.", + "Connection Settings" : "إعدادات الربط", + "Configuration Active" : "الإعداد نشط", + "When unchecked, this configuration will be skipped." : "عندما لا يتم تحديده، سوف يتم تخطي هذه التهيئة.", + "Backup (Replica) Host" : "مضيف النسخ الاحتياطي (طِبقَ الأصل)", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "توفير مضيف احتياطي اختياري. يجب أن يكون نسخة طبق الأصل من خادم LDAP/AC.", + "Backup (Replica) Port" : "منفذ النسخ الاحتياطي (طِبقَ الأصل)", + "Disable Main Server" : "تعطيل الخادم الرئيسي", + "Only connect to the replica server." : "متصل فقط بالخادم الاحتياطي.", + "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." : "لا يوصي به، استخدمه للاختبار فقط! إذا كان الاتصال يعمل فقط مع هذا الخيار، فقم باستيراد شهادة SSL لخادم LDAP في الخادم %s.", + "Cache Time-To-Live" : "مدة صلاحية ذاكرة التخزين المؤقت cache", + "in seconds. A change empties the cache." : "خلال ثوان. يؤدي التغيير إلى إفراغ ذاكرة التخزين المؤقت cache.", + "Directory Settings" : "إعدادات الدليل", + "User Display Name Field" : "حقل عرض اسم المستخدم", + "The LDAP attribute to use to generate the user's display name." : "تستخدم سمة بروتوكول LDAP لتوليد اسم عرض المستخدم.", + "2nd User Display Name Field" : "الحقل 2 لعرض اسم المستخدم ", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "اختياري. سمة LDAP سوف تُضاف إلى اسم العرض بين قوسين. و النتيجة ستكون كما في المثال: »John Doe (john.doe@example.org)«.", + "Base User Tree" : "شجرة المستخدم الأساسي Base User Tree", + "One User Base DN per line" : "اسم مميز أساسي User Base DN لمستخدم واحد لكل سطر", + "User Search Attributes" : "خصائص بحث المستخدم", + "Optional; one attribute per line" : "اختياري؛ سمة واحدة لكل سطر", + "Disable users missing from LDAP" : "إيقاف المستخدمين غير الموجودين على LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "عند التشغيل، سيتم تعطيل المستخدمين الذين تمّ استيرادهم من LDAP لكن تعذّر إيحادهم عندها", + "Group Display Name Field" : "حقل عرض اسم المجموعة", + "The LDAP attribute to use to generate the groups's display name." : "تستخدم خاصية بروتوكول LDAP لإنشاء اسماء عرض للمجموعات.", + "Base Group Tree" : "شجرة المجموعة الأساسية Base Group Tree", + "One Group Base DN per line" : "اسم مميز أساسي Group Base DN واحد للمجموعة لكل سطر", + "Group Search Attributes" : "خصائص بحث المجموعات", + "Group-Member association" : "ارتباط أعضاء المجموعة Group-Member association", + "Dynamic Group Member URL" : "محدد موقع URL الديناميكي لعضو المجموعة ", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "تحتوي خاصية بروتوكولLDAP الموجودة في كائنات المجموعة على عنوان بحث LDAP و الذي يحدد الكائنات التي تنتمي إلى المجموعة. (الإعداد الفارغ يتسبب في تعطيل وظيفة عضوية المجموعة الديناميكية.)", + "Nested Groups" : "المجموعات المتداخلة", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "عند التشغيل، يتم دعم المجموعات التي تحتوي على مجموعات. (تعمل فقط إذا كان تحديد عضو المجموعة يحتوي على اسم مميز DN).", + "Paging chunksize" : "حجم رزم الصفحات Paging chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "يتم استخدام حجم الرِّزمَة لعمليات البحث المقسمة إلى صفحات في LDAP؛ والتي قد تعطي نتائج ضخمة تبعاً لعدد المستخدمين و المجموعات. (الضبط علي 0 يؤدي إلى تعطيل هذا الأسلوب من البحث في تلك الحالات.)", + "Enable LDAP password changes per user" : "تمكين تغيير كلمة المرور لكل مستخدم علي خادم LDAP ", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "يتيح خادم بروتوكول LDAP للمستخدمين تغيير كلمة المرور الخاصة بهم والسماح لمسؤولي النظام المتميزين ومسؤولي المجموعات بتغيير كلمة مرور مستخدمي الخادم. وتعمل هذه الخاصية عندما يتم تهيئة وضبط سياسات التحكم في الوصول على خادم LDAP وفقًا لذلك. وحيث أن كلمات المرور يتم إرسالها فى صورة نصٍّ عادي إلى خادم LDAP، فيجب استخدام تشفير النقل وضبط تجزئة كلمة المرور على خادم LDAP.", + "(New password is sent as plain text to LDAP)" : "(يتم إرسال كلمة المرور الجديدة كنص عادي إلى خادم LDAP )", + "Default password policy DN" : "سياسة الاسم المميز لكلمة المرورالافتراضية", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "سياسة الاسم المميز DN لكلمة المرورالافتراضية التي سيتم استخدامها لمعالجة انتهاء صلاحية كلمة المرور تعمل فقط عندما يتم تمكين تغيير كلمة مرور خادم LDAP لكل مستخدم ويكون مدعومًا فقط بواسطة OpenLDAP. H. أترُكه فارغًا لتعطيل معالجة انتهاء صلاحية كلمة المرور.", + "Special Attributes" : "خصائص خاصة", + "Quota Field" : "حقل الحِّصّة التخزينية", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "اتركه فارغًا للحصة التخزينية الافتراضية للمستخدم. خلاف ذلك، حدد خاصّية خادم LDAP/AD.", + "Quota Default" : "الحصة الافتراضية", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "تخطِّي الحصة الافتراضية لمستخدمي خادم LDAP الذين ليس لديهم حصة محددة في حقل الحصة.", + "Email Field" : "خانة البريد الإلكتروني", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "قُم بتعيين البريد الإلكتروني للمستخدمين من خاصّية خادم LDAP الخاصة بهم. اتركه فارغًا للتصرُّف الافتراضي.", + "User Home Folder Naming Rule" : "قاعدة تسمية المجلد الرئيسي للمستخدم", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "أترُكه فارغًا لاسم المستخدم (افتراضي). خلاف ذلك، حدِّد خاصّية LDAP/AD.", + "\"$home\" Placeholder Field" : "حقل العنصر النائب \"$home\"", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "سيتم استبدال $home في تكوين وحدة التخزين الخارجية بقيمة الخاصّية المحددة", + "User Profile Attributes" : "خصائص الملف الشخصي للمستخدِم", + "Phone Field" : "خانة الهاتف", + "User profile Phone will be set from the specified attribute" : "خانة الهاتف في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Website Field" : "خانة موقع الويب", + "User profile Website will be set from the specified attribute" : "خانة موقع الويب في الملف الشخصي للمستخدم سيتم تعيينها من الخاصّية المحددة", + "Address Field" : "خانة العنوان", + "User profile Address will be set from the specified attribute" : "خانة العنوان في الملف الشخصي للمستخدم سيتم تعيينها من الخاصّية المُحدّدة", + "Twitter Field" : "خانة حساب تويتر", + "User profile Twitter will be set from the specified attribute" : "خانة حساب تويتر في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Fediverse Field" : "خانة حساب Fediverse", + "User profile Fediverse will be set from the specified attribute" : "خانة حساب Fediverse في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Organisation Field" : "خانة المؤسسة organization", + "User profile Organisation will be set from the specified attribute" : "خانة المنظمة organization في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Role Field" : "خانة الوظيفة role", + "User profile Role will be set from the specified attribute" : "خانة الوظيفة role في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Headline Field" : "حقل العنوان", + "User profile Headline will be set from the specified attribute" : "خانة العنوان في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Biography Field" : "خانة السيرة الذاتية biography", + "User profile Biography will be set from the specified attribute" : "خانة السيرة الذاتية biography في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة", + "Birthdate Field" : "حقل تاريخ الميلاد", + "User profile Date of birth will be set from the specified attribute" : "تاريخ الميلاد في ملف المستخدم سيتم ملؤه من الخانة المحددة", + "Pronouns Field" : "حقل الضمائر", + "User profile Pronouns will be set from the specified attribute" : "سيتم تعيين ضمائر ملف تعريف المستخدم من السمة المحددة", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "بشكل افتراضي، سيتم إنشاء اسم المستخدم الداخلي internal username من خاصّية المُغرّف المُميّز الشامل UUID. هذا يضمن أن اسم المستخدم فريدٌ ولا يلزمه أي تحويل في الأحرف. اسم المستخدم الداخلي مُقيّدٌ باستخدام هذه الأحرف فقط: [a-zA-Z0-9 _. @ -]. غير هذه الأحرف يقع استبدالها بما يقابلها من أحرف الآسكي ASCII أو - ببساطة - يقع حذفها. في حالة وقوع تضاربٍِ، سيتم إلحاق عدد بالاسم. \n\nيُستخدم هذا الاسم الداخلي لتعريف المستخدم داخليًا. وهو أيضًا الاسم الافتراضي للمجلد الرئيسي للمستخدم. و هو أيضًا جزء من عناوين remote URL القَصِيّة كما في خدمات DAV على سبيل المثال. باستخدام هذا الإعداد ، يمكن تجاوز السلوك الافتراضي. سيكون للتغييرات تأثير فقط على مستخدمي 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." : "بشكل افتراضي، يتم اكتشاف خاصية المعرف الفريد الشامل 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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "تُستخدم أسماء المستخدمين لتخزين وتخصيص البيانات التعريف الوصفية. من أجل تحديد المستخدمين والتعرف عليهم بدقة، سيكون لكل مستخدم على خادم LDAP اسم مستخدم داخلي. يتطلب هذا ربطاً mapping بين اسم المستخدم و مستخدم خادم LDAP. يتم تعيين اسم المستخدم الذي تم إنشاؤه إلى المعرف الفريد الشامل \"UUID\" لمستخدم LDAP. بالإضافة إلى ذلك، يتم تخزين الاسم المميز DN مؤقتًا أيضًا لتقليل تفاعل LDAP، ولكنه لا يستخدم لتحديد الهوية. وعند تغير الاسم المميز يتم العثور على التغييرات. ويتم استخدام اسم المستخدم الداخلي في كل مكان. إلغاء الربط سيكون له آثار متبقية في كل مكان. إلغاء الربط يؤثر على جميع تكوينات LDAP! لا تقم مطلقًا بإلغاء الربط في بيئة الإنتاج. فقط في مرحلة الاختبار أو المرحلة التجريبية.", + "Clear Username-LDAP User Mapping" : "إلغاء الربط بين اسم المستخدم في LDAP و المستخدم", + "Clear Groupname-LDAP Group Mapping" : "إلغاء الربط بين اسم المجموعة في LDAP و المجموعة", + "Invalid configuration. Please have a look at the logs for further details." : "تكوين غير صحيح. يرجى الرجوع إلى سجلات الأنشطة لمزيد من التفاصيل." },"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/user_ldap/l10n/ast.js b/apps/user_ldap/l10n/ast.js deleted file mode 100644 index bef27c80976..00000000000 --- a/apps/user_ldap/l10n/ast.js +++ /dev/null @@ -1,159 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Fallu al llimpiar los mapeos.", - "Failed to delete the server configuration" : "Fallu al desaniciar la configuración del sirvidor", - "Valid configuration, connection established!" : "¡Configuración válida, afitóse la conexón!", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración non válida. Écha-yos un güeyu a los rexistros pa más detalles, por favor.", - "No action specified" : "Nun s'especificó l'aición", - "No configuration specified" : "Nun s'especificó la configuración", - "No data specified" : "Nun s'especificaron los datos", - " Could not set configuration %s" : "Nun pudo afitase la configuración %s", - "Action does not exist" : "L'acción nun esiste", - "Renewing …" : "Renovando...", - "Very weak password" : "Contraseña perfeble", - "Weak password" : "Contraseña feble", - "So-so password" : "Contraseña normalina", - "Good password" : "Contraseña bona", - "Strong password" : "Contraseña fuerte", - "The Base DN appears to be wrong" : "La base DN paez tar mal", - "Testing configuration…" : "Probando configuración...", - "Configuration incorrect" : "Configuración incorreuta", - "Configuration incomplete" : "Configuración incompleta", - "Configuration OK" : "Configuración correuta", - "Select groups" : "Esbillar grupos", - "Select object classes" : "Esbillar les clases d'oxetu", - "Please check the credentials, they seem to be wrong." : "Por favor, compruebe les credenciales, que paecen tar mal.", - "Please specify the port, it could not be auto-detected." : "Por favor especifica'l puertu, nun puede ser detectáu automáticamente .", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nun puede ser detectada automáticamente, por favor revisa les credenciales, host yá'l puertu.", - "Could not detect Base DN, please enter it manually." : "Nun se detectó base DN, por favor introduzla manualmente .", - "{nthServer}. Server" : "{nthServer}. Sirvidor", - "No object found in the given Base DN. Please revise." : "Nun s'atopó nengún oxetu na Base DN dada. Por favor, revísalo.", - "More than 1,000 directory entries available." : "Más de 1.000 entraes de directoriu disponibles.", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Asocedió un erru. Por favor, compruebe la Base DN , amás de la configuración de conexón y les credenciales.", - "Do you really want to delete the current Server Configuration?" : "¿Daveres que quies desaniciar la configuración actual del sirvidor?", - "Confirm Deletion" : "Confirmar desaniciu", - "Mappings cleared successfully!" : "¡Asignaciones borraes correutamente!", - "Error while clearing the mappings." : "Fallu mientres desaniciaben les asignaciones.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Nun s'almite l'enllaz anónimu. Por favor apurre un usuariu DN y contraseña.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Erru d'operaciones LDAP . Enllaz anónimu nun s'almite.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Nun pudo guardase. Por favor asegúrate que la base de datos ta en funcionamientu. Actualiza enantes de siguir.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar el mou va habilitar les consultes LDAP automátiques . Dependiendo del to tamañu de LDAP puede llevar un tiempu. ¿Inda deseya camudar el mou?", - "Select attributes" : "Esbillar atributos", - "User found and settings verified." : "Usuariu atopáu y la configuración verificada.", - "An unspecified error occurred. Please check log and settings." : "Asocedió un fallu non especificáu. Comprueba'l rexistru y los axustes, por favor.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtru de busca nun ye válidu , probablemente por cuenta de problemes de sintaxis como'l númberu impar de soportes abiertos y zarraos. Por favor revisalo.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Asocedió un erru de conexón a LDAP / AD, por favor, comprueba'l host, el puertu y les credenciales.", - "Please provide a login name to test against" : "Por favor, proporcione un nombre de inicio de sesión para comprobar en contra", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadru de grupu taba desactiváu , por mor qu'el servidor LDAP / AD nun almite memberOf .", - "Your password will expire today." : "Güei caduca la to contraseña.", - "LDAP / AD integration" : "Integración de LDAP/AD", - "_%s group found_::_%s groups found_" : ["%s grupu alcontráu","%s grupos alcontraos"], - "_%s user found_::_%s users found_" : ["%s usuariu alcontráu","%s usuarios alcontraos"], - "Could not find the desired feature" : "Nun pudo alcontrase la carauterística deseyada", - "Invalid Host" : "Agospiu non válidu", - "Test Configuration" : "Configuración de prueba", - "Help" : "Ayuda", - "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios tán disponibles en %s:", - "Only these object classes:" : "Namái d'estes clases d'oxetu:", - "Only from these groups:" : "Namái d'estos grupos:", - "Search groups" : "Esbillar grupos", - "Available groups" : "Grupos disponibles", - "Selected groups" : "Grupos seleicionaos", - "Edit LDAP Query" : "Editar consulta LDAP", - "LDAP Filter:" : "Filtru LDAP:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtru especifica qué grupos LDAP van tener accesu a %s.", - "Verify settings and count the groups" : "Verificar axustes y contar los grupos", - "When logging in, %s will find the user based on the following attributes:" : "Al empecipiar sesión, %s atópase l'usuariu en función de los siguientes atributos :", - "LDAP / AD Username:" : "Nome d'usuariu LDAP / AD:", - "LDAP / AD Email Address:" : "Direición e-mail LDAP / AD:", - "Other Attributes:" : "Otros atributos:", - "Test Loginname" : "Preba de Nome d'Aniciu de Sesión", - "Verify settings" : "Comprobar los axustes", - "%s. Server:" : "%s. Sirvidor:", - "Copy current configuration into new directory binding" : "Copiar configuración actual nel nuevu directoriu obligatoriu", - "Delete the current configuration" : "Desaniciar la configuración actual", - "Host" : "Equipu", - "Port" : "Puertu", - "Detect Port" : "Detectar Puertu", - "User DN" : "DN usuariu", - "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." : "El DN del usuariu veceru col que va facese l'asociación, p.ex. uid=axente,dc=exemplu,dc=com. P'accesu anónimu, dexa DN y contraseña baleros.", - "Password" : "Contraseña", - "For anonymous access, leave DN and Password empty." : "Pa un accesu anónimu, dexar el DN y la contraseña baleros.", - "One Base DN per line" : "Un DN Base por llinia", - "You can specify Base DN for users and groups in the Advanced tab" : "Pues especificar el DN base pa usuarios y grupos na llingüeta Avanzáu", - "Detect Base DN" : "Detectar Base DN", - "Test Base DN" : "Probar Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automátiques de LDAP. Meyor pa grandes configuraciones, pero rique mayor conocimientu de LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Inxerta manualmente los filtros de LDAP (recomendáu pa direutorios llargos)", - "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." : "Les clases d'oxetos más comunes pa los usuarios d'Internet son organizationalPerson, persona, usuariu y inetOrgPerson . Si nun ta seguro de qué clase d'oxetu escoyer, por favor consulte al so alministrador de directorios.", - "The filter specifies which LDAP users shall have access to the %s instance." : "El filtru especifica qué usuarios LDAP puen tener accesu a %s.", - "Verify settings and count users" : "Comprobar la configuración y usuarios de recuentu", - "Saving" : "Guardando", - "Back" : "Atrás", - "Continue" : "Continuar", - "Please renew your password." : "Renueva la to contraseña, por favor.", - "An internal error occurred." : "Asocedió un fallu internu.", - "Please try again or contact your administrator." : "Volvi tentalo o contauta col to alministrador, por favor.", - "Current password" : "Contraseña actual", - "New password" : "Contraseña nueva", - "Renew password" : "Renovar contraseña", - "Wrong password." : "Contraseña incorreuta.", - "Cancel" : "Encaboxar", - "Server" : "Sirvidor", - "Users" : "Usuarios", - "Login Attributes" : "Los atributos d'aniciu de sesión", - "Groups" : "Grupos", - "Expert" : "Espertu", - "Advanced" : "Avanzáu", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avisu:</b> El módulu LDAP de PHP nun ta instaláu, el sistema nun va funcionar. Por favor consulta al alministrador del sistema pa instalalu.", - "Connection Settings" : "Axustes de conexón", - "Configuration Active" : "Configuración activa", - "When unchecked, this configuration will be skipped." : "Cuando nun tea conseñáu, saltaráse esta configuración.", - "Backup (Replica) Host" : "Sirvidor de copia de seguranza (Réplica)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Dar un sirvidor de copia de seguranza opcional. Tien de ser una réplica del sirvidor principal LDAP / AD.", - "Backup (Replica) Port" : "Puertu pa copies de seguranza (Réplica)", - "Disable Main Server" : "Deshabilitar sirvidor principal", - "Only connect to the replica server." : "Coneutar namái col sirvidor de réplica.", - "Turn off SSL certificate validation." : "Apagar la validación del certificáu 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." : "Nun se recomienda, ¡úsalu namái pa pruebes! Si la conexón namái funciona con esta opción, importa'l certificáu SSL del sirvidor LDAP nel to sirvidor %s.", - "Cache Time-To-Live" : "Cache Time-To-Live", - "in seconds. A change empties the cache." : "en segundos. Un cambéu vacia la caché.", - "Directory Settings" : "Axustes del direutoriu", - "User Display Name Field" : "Campu de nome d'usuariu a amosar", - "The LDAP attribute to use to generate the user's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del usuariu.", - "2nd User Display Name Field" : "2ª usuariu amuesa Nome del campu", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributu LDAP que s'amesta al nome de visualización ente paréntesis. Los resultaos en, por exemplu, »John Doe (john.doe@example.org)«.", - "Base User Tree" : "Árbol base d'usuariu", - "One User Base DN per line" : "Un DN Base d'Usuariu por llinia", - "User Search Attributes" : "Atributos de la gueta d'usuariu", - "Optional; one attribute per line" : "Opcional; un atributu por llinia", - "Group Display Name Field" : "Campu de nome de grupu a amosar", - "The LDAP attribute to use to generate the groups's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del grupu.", - "Base Group Tree" : "Árbol base de grupu", - "One Group Base DN per line" : "Un DN Base de Grupu por llinia", - "Group Search Attributes" : "Atributos de gueta de grupu", - "Group-Member association" : "Asociación Grupu-Miembru", - "Dynamic Group Member URL" : "URL Dinámica de Grupu d'Usuarios", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atributu LDAP que nos oxetos de grupu contien una gueta de URLs de LDAP que determina qué oxetos pertenecen al grupu. (Un axuste vacíu desanicia la funcionalidá dinámica de pertenencia al grupu.)", - "Nested Groups" : "Grupos añeraos", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando s'active, van permitise grupos que contengan otros grupos (namái funciona si l'atributu de miembru de grupu contién DNs).", - "Paging chunksize" : "Tamañu de los fragmentos de paxinación", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamañu de los fragmentos usáu pa busques LDAP paxinaes que puen devolver resultaos voluminosos, como enubmeración d'usuarios o de grupos. (Si s'afita en 0, van deshabilitase les busques LDAP paxinaes neses situaciones.)", - "(New password is sent as plain text to LDAP)" : "(La contraseña únviase como testu planu a LDAP)", - "Special Attributes" : "Atributos especiales", - "Quota Field" : "Cuota", - "Quota Default" : "Cuota por defeutu", - "Email Field" : "E-mail", - "User Home Folder Naming Rule" : "Regla pa la carpeta Home d'usuariu", - "Internal Username" : "Nome d'usuariu internu", - "Internal Username Attribute:" : "Atributu Nome d'usuariu Internu:", - "Override UUID detection" : "Sobrescribir la deteición 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." : "Por defeutu, l'atributu UUID autodetéutase. Esti atributu úsase pa identificar induldablemente usuarios y grupos LDAP. Arriendes, el nome d'usuariu internu va crease en bas al UUID, si nun s'especificó otru comportamientu arriba. Pues sobrescribir la configuración y pasar un atributu de la to eleición. Tienes d'asegurate de que l'atributu de la to eleición seya accesible polos usuarios y grupos y ser únicu. Déxalu en blanco pa usar el comportamientu por defeutu. Los cambeos van tener efeutu namái nos usuarios y grupos de LDAP mapeaos (amestaos) recién.", - "UUID Attribute for Users:" : "Atributu UUID pa usuarios:", - "UUID Attribute for Groups:" : "Atributu UUID pa Grupos:", - "Username-LDAP User Mapping" : "Asignación del Nome d'usuariu LDAP", - "Clear Username-LDAP User Mapping" : "Llimpiar l'asignación de los Nomes d'usuariu de los usuarios LDAP", - "Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ast.json b/apps/user_ldap/l10n/ast.json deleted file mode 100644 index b30026ea339..00000000000 --- a/apps/user_ldap/l10n/ast.json +++ /dev/null @@ -1,157 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Fallu al llimpiar los mapeos.", - "Failed to delete the server configuration" : "Fallu al desaniciar la configuración del sirvidor", - "Valid configuration, connection established!" : "¡Configuración válida, afitóse la conexón!", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración non válida. Écha-yos un güeyu a los rexistros pa más detalles, por favor.", - "No action specified" : "Nun s'especificó l'aición", - "No configuration specified" : "Nun s'especificó la configuración", - "No data specified" : "Nun s'especificaron los datos", - " Could not set configuration %s" : "Nun pudo afitase la configuración %s", - "Action does not exist" : "L'acción nun esiste", - "Renewing …" : "Renovando...", - "Very weak password" : "Contraseña perfeble", - "Weak password" : "Contraseña feble", - "So-so password" : "Contraseña normalina", - "Good password" : "Contraseña bona", - "Strong password" : "Contraseña fuerte", - "The Base DN appears to be wrong" : "La base DN paez tar mal", - "Testing configuration…" : "Probando configuración...", - "Configuration incorrect" : "Configuración incorreuta", - "Configuration incomplete" : "Configuración incompleta", - "Configuration OK" : "Configuración correuta", - "Select groups" : "Esbillar grupos", - "Select object classes" : "Esbillar les clases d'oxetu", - "Please check the credentials, they seem to be wrong." : "Por favor, compruebe les credenciales, que paecen tar mal.", - "Please specify the port, it could not be auto-detected." : "Por favor especifica'l puertu, nun puede ser detectáu automáticamente .", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nun puede ser detectada automáticamente, por favor revisa les credenciales, host yá'l puertu.", - "Could not detect Base DN, please enter it manually." : "Nun se detectó base DN, por favor introduzla manualmente .", - "{nthServer}. Server" : "{nthServer}. Sirvidor", - "No object found in the given Base DN. Please revise." : "Nun s'atopó nengún oxetu na Base DN dada. Por favor, revísalo.", - "More than 1,000 directory entries available." : "Más de 1.000 entraes de directoriu disponibles.", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Asocedió un erru. Por favor, compruebe la Base DN , amás de la configuración de conexón y les credenciales.", - "Do you really want to delete the current Server Configuration?" : "¿Daveres que quies desaniciar la configuración actual del sirvidor?", - "Confirm Deletion" : "Confirmar desaniciu", - "Mappings cleared successfully!" : "¡Asignaciones borraes correutamente!", - "Error while clearing the mappings." : "Fallu mientres desaniciaben les asignaciones.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Nun s'almite l'enllaz anónimu. Por favor apurre un usuariu DN y contraseña.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Erru d'operaciones LDAP . Enllaz anónimu nun s'almite.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Nun pudo guardase. Por favor asegúrate que la base de datos ta en funcionamientu. Actualiza enantes de siguir.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar el mou va habilitar les consultes LDAP automátiques . Dependiendo del to tamañu de LDAP puede llevar un tiempu. ¿Inda deseya camudar el mou?", - "Select attributes" : "Esbillar atributos", - "User found and settings verified." : "Usuariu atopáu y la configuración verificada.", - "An unspecified error occurred. Please check log and settings." : "Asocedió un fallu non especificáu. Comprueba'l rexistru y los axustes, por favor.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtru de busca nun ye válidu , probablemente por cuenta de problemes de sintaxis como'l númberu impar de soportes abiertos y zarraos. Por favor revisalo.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Asocedió un erru de conexón a LDAP / AD, por favor, comprueba'l host, el puertu y les credenciales.", - "Please provide a login name to test against" : "Por favor, proporcione un nombre de inicio de sesión para comprobar en contra", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadru de grupu taba desactiváu , por mor qu'el servidor LDAP / AD nun almite memberOf .", - "Your password will expire today." : "Güei caduca la to contraseña.", - "LDAP / AD integration" : "Integración de LDAP/AD", - "_%s group found_::_%s groups found_" : ["%s grupu alcontráu","%s grupos alcontraos"], - "_%s user found_::_%s users found_" : ["%s usuariu alcontráu","%s usuarios alcontraos"], - "Could not find the desired feature" : "Nun pudo alcontrase la carauterística deseyada", - "Invalid Host" : "Agospiu non válidu", - "Test Configuration" : "Configuración de prueba", - "Help" : "Ayuda", - "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios tán disponibles en %s:", - "Only these object classes:" : "Namái d'estes clases d'oxetu:", - "Only from these groups:" : "Namái d'estos grupos:", - "Search groups" : "Esbillar grupos", - "Available groups" : "Grupos disponibles", - "Selected groups" : "Grupos seleicionaos", - "Edit LDAP Query" : "Editar consulta LDAP", - "LDAP Filter:" : "Filtru LDAP:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtru especifica qué grupos LDAP van tener accesu a %s.", - "Verify settings and count the groups" : "Verificar axustes y contar los grupos", - "When logging in, %s will find the user based on the following attributes:" : "Al empecipiar sesión, %s atópase l'usuariu en función de los siguientes atributos :", - "LDAP / AD Username:" : "Nome d'usuariu LDAP / AD:", - "LDAP / AD Email Address:" : "Direición e-mail LDAP / AD:", - "Other Attributes:" : "Otros atributos:", - "Test Loginname" : "Preba de Nome d'Aniciu de Sesión", - "Verify settings" : "Comprobar los axustes", - "%s. Server:" : "%s. Sirvidor:", - "Copy current configuration into new directory binding" : "Copiar configuración actual nel nuevu directoriu obligatoriu", - "Delete the current configuration" : "Desaniciar la configuración actual", - "Host" : "Equipu", - "Port" : "Puertu", - "Detect Port" : "Detectar Puertu", - "User DN" : "DN usuariu", - "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." : "El DN del usuariu veceru col que va facese l'asociación, p.ex. uid=axente,dc=exemplu,dc=com. P'accesu anónimu, dexa DN y contraseña baleros.", - "Password" : "Contraseña", - "For anonymous access, leave DN and Password empty." : "Pa un accesu anónimu, dexar el DN y la contraseña baleros.", - "One Base DN per line" : "Un DN Base por llinia", - "You can specify Base DN for users and groups in the Advanced tab" : "Pues especificar el DN base pa usuarios y grupos na llingüeta Avanzáu", - "Detect Base DN" : "Detectar Base DN", - "Test Base DN" : "Probar Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automátiques de LDAP. Meyor pa grandes configuraciones, pero rique mayor conocimientu de LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Inxerta manualmente los filtros de LDAP (recomendáu pa direutorios llargos)", - "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." : "Les clases d'oxetos más comunes pa los usuarios d'Internet son organizationalPerson, persona, usuariu y inetOrgPerson . Si nun ta seguro de qué clase d'oxetu escoyer, por favor consulte al so alministrador de directorios.", - "The filter specifies which LDAP users shall have access to the %s instance." : "El filtru especifica qué usuarios LDAP puen tener accesu a %s.", - "Verify settings and count users" : "Comprobar la configuración y usuarios de recuentu", - "Saving" : "Guardando", - "Back" : "Atrás", - "Continue" : "Continuar", - "Please renew your password." : "Renueva la to contraseña, por favor.", - "An internal error occurred." : "Asocedió un fallu internu.", - "Please try again or contact your administrator." : "Volvi tentalo o contauta col to alministrador, por favor.", - "Current password" : "Contraseña actual", - "New password" : "Contraseña nueva", - "Renew password" : "Renovar contraseña", - "Wrong password." : "Contraseña incorreuta.", - "Cancel" : "Encaboxar", - "Server" : "Sirvidor", - "Users" : "Usuarios", - "Login Attributes" : "Los atributos d'aniciu de sesión", - "Groups" : "Grupos", - "Expert" : "Espertu", - "Advanced" : "Avanzáu", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avisu:</b> El módulu LDAP de PHP nun ta instaláu, el sistema nun va funcionar. Por favor consulta al alministrador del sistema pa instalalu.", - "Connection Settings" : "Axustes de conexón", - "Configuration Active" : "Configuración activa", - "When unchecked, this configuration will be skipped." : "Cuando nun tea conseñáu, saltaráse esta configuración.", - "Backup (Replica) Host" : "Sirvidor de copia de seguranza (Réplica)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Dar un sirvidor de copia de seguranza opcional. Tien de ser una réplica del sirvidor principal LDAP / AD.", - "Backup (Replica) Port" : "Puertu pa copies de seguranza (Réplica)", - "Disable Main Server" : "Deshabilitar sirvidor principal", - "Only connect to the replica server." : "Coneutar namái col sirvidor de réplica.", - "Turn off SSL certificate validation." : "Apagar la validación del certificáu 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." : "Nun se recomienda, ¡úsalu namái pa pruebes! Si la conexón namái funciona con esta opción, importa'l certificáu SSL del sirvidor LDAP nel to sirvidor %s.", - "Cache Time-To-Live" : "Cache Time-To-Live", - "in seconds. A change empties the cache." : "en segundos. Un cambéu vacia la caché.", - "Directory Settings" : "Axustes del direutoriu", - "User Display Name Field" : "Campu de nome d'usuariu a amosar", - "The LDAP attribute to use to generate the user's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del usuariu.", - "2nd User Display Name Field" : "2ª usuariu amuesa Nome del campu", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributu LDAP que s'amesta al nome de visualización ente paréntesis. Los resultaos en, por exemplu, »John Doe (john.doe@example.org)«.", - "Base User Tree" : "Árbol base d'usuariu", - "One User Base DN per line" : "Un DN Base d'Usuariu por llinia", - "User Search Attributes" : "Atributos de la gueta d'usuariu", - "Optional; one attribute per line" : "Opcional; un atributu por llinia", - "Group Display Name Field" : "Campu de nome de grupu a amosar", - "The LDAP attribute to use to generate the groups's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del grupu.", - "Base Group Tree" : "Árbol base de grupu", - "One Group Base DN per line" : "Un DN Base de Grupu por llinia", - "Group Search Attributes" : "Atributos de gueta de grupu", - "Group-Member association" : "Asociación Grupu-Miembru", - "Dynamic Group Member URL" : "URL Dinámica de Grupu d'Usuarios", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atributu LDAP que nos oxetos de grupu contien una gueta de URLs de LDAP que determina qué oxetos pertenecen al grupu. (Un axuste vacíu desanicia la funcionalidá dinámica de pertenencia al grupu.)", - "Nested Groups" : "Grupos añeraos", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando s'active, van permitise grupos que contengan otros grupos (namái funciona si l'atributu de miembru de grupu contién DNs).", - "Paging chunksize" : "Tamañu de los fragmentos de paxinación", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamañu de los fragmentos usáu pa busques LDAP paxinaes que puen devolver resultaos voluminosos, como enubmeración d'usuarios o de grupos. (Si s'afita en 0, van deshabilitase les busques LDAP paxinaes neses situaciones.)", - "(New password is sent as plain text to LDAP)" : "(La contraseña únviase como testu planu a LDAP)", - "Special Attributes" : "Atributos especiales", - "Quota Field" : "Cuota", - "Quota Default" : "Cuota por defeutu", - "Email Field" : "E-mail", - "User Home Folder Naming Rule" : "Regla pa la carpeta Home d'usuariu", - "Internal Username" : "Nome d'usuariu internu", - "Internal Username Attribute:" : "Atributu Nome d'usuariu Internu:", - "Override UUID detection" : "Sobrescribir la deteición 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." : "Por defeutu, l'atributu UUID autodetéutase. Esti atributu úsase pa identificar induldablemente usuarios y grupos LDAP. Arriendes, el nome d'usuariu internu va crease en bas al UUID, si nun s'especificó otru comportamientu arriba. Pues sobrescribir la configuración y pasar un atributu de la to eleición. Tienes d'asegurate de que l'atributu de la to eleición seya accesible polos usuarios y grupos y ser únicu. Déxalu en blanco pa usar el comportamientu por defeutu. Los cambeos van tener efeutu namái nos usuarios y grupos de LDAP mapeaos (amestaos) recién.", - "UUID Attribute for Users:" : "Atributu UUID pa usuarios:", - "UUID Attribute for Groups:" : "Atributu UUID pa Grupos:", - "Username-LDAP User Mapping" : "Asignación del Nome d'usuariu LDAP", - "Clear Username-LDAP User Mapping" : "Llimpiar l'asignación de los Nomes d'usuariu de los usuarios LDAP", - "Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/az.js b/apps/user_ldap/l10n/az.js deleted file mode 100644 index b431ba72723..00000000000 --- a/apps/user_ldap/l10n/az.js +++ /dev/null @@ -1,37 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Xəritələnməni silmək mümkün olmadı", - "Failed to delete the server configuration" : "Server configini silmək mümkün olmadı", - "The configuration is valid and the connection could be established!" : "Configurasiya doğrudur və qoşulmaq mümkündür!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Configurasiya doğrudur yalnız, birləşmədə səhv oldu. Xahiş olunur server quraşdırmalarını və daxil etdiyiniz verilənlərin düzgünlüyünü yoxlayasınız.", - "The configuration is invalid. Please have a look at the logs for further details." : "Configurasiya dügün deyil. Əlavə detallar üçün xahiş edirik jurnal faylına baxasınız.", - "No action specified" : "Heç bir iş təyin edilməyib", - "No configuration specified" : "Təyin edilmiş konfiqurasiya yoxdur", - "No data specified" : "Təyin edilmiş data yoxdur", - " Could not set configuration %s" : "%s configi təyin etmək mümkün olmadı", - "Configuration incorrect" : "Konfiqurasiya düzgün deyil", - "Configuration incomplete" : "Konfiqruasiya bitmiş deyil", - "Configuration OK" : "Konfiqurasiya OK-dir", - "Select groups" : "Qrupları seç", - "Select object classes" : "object class-larını seç", - "{nthServer}. Server" : "{nthServer}. Server", - "Do you really want to delete the current Server Configuration?" : "Siz hal-hazırki server konfiqini silmək istədiyinizdən həqiqətən əminsinizmi?", - "Confirm Deletion" : "Silinmənin təsdiqi", - "Select attributes" : "Atributları seç", - "_%s group found_::_%s groups found_" : ["%s qruplar tapıldı","%s qruplar tapıldı"], - "_%s user found_::_%s users found_" : ["%s istifadəçilər tapıldı","%s istifadəçilər tapıldı"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "İstifadəçinin ekran atributu adını təyin etmək mümkün deyil. Xahiş olunur sizin özünüz onu əllə ldap konfiqində təyin edəsiniz.", - "Could not find the desired feature" : "Arzulanılan imkanı tapmaq mümkün deyil", - "Invalid Host" : "Yalnış Host", - "Server" : "Server", - "Users" : "İstifadəçilər", - "Groups" : "Qruplar", - "Test Configuration" : "Konfiqurasiya testi", - "Help" : "Kömək", - "Host" : "Şəbəkədə ünvan", - "Port" : "Port", - "Password" : "Şifrə", - "Advanced" : "İrəliləmiş" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/az.json b/apps/user_ldap/l10n/az.json deleted file mode 100644 index aa5e52cb346..00000000000 --- a/apps/user_ldap/l10n/az.json +++ /dev/null @@ -1,35 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Xəritələnməni silmək mümkün olmadı", - "Failed to delete the server configuration" : "Server configini silmək mümkün olmadı", - "The configuration is valid and the connection could be established!" : "Configurasiya doğrudur və qoşulmaq mümkündür!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Configurasiya doğrudur yalnız, birləşmədə səhv oldu. Xahiş olunur server quraşdırmalarını və daxil etdiyiniz verilənlərin düzgünlüyünü yoxlayasınız.", - "The configuration is invalid. Please have a look at the logs for further details." : "Configurasiya dügün deyil. Əlavə detallar üçün xahiş edirik jurnal faylına baxasınız.", - "No action specified" : "Heç bir iş təyin edilməyib", - "No configuration specified" : "Təyin edilmiş konfiqurasiya yoxdur", - "No data specified" : "Təyin edilmiş data yoxdur", - " Could not set configuration %s" : "%s configi təyin etmək mümkün olmadı", - "Configuration incorrect" : "Konfiqurasiya düzgün deyil", - "Configuration incomplete" : "Konfiqruasiya bitmiş deyil", - "Configuration OK" : "Konfiqurasiya OK-dir", - "Select groups" : "Qrupları seç", - "Select object classes" : "object class-larını seç", - "{nthServer}. Server" : "{nthServer}. Server", - "Do you really want to delete the current Server Configuration?" : "Siz hal-hazırki server konfiqini silmək istədiyinizdən həqiqətən əminsinizmi?", - "Confirm Deletion" : "Silinmənin təsdiqi", - "Select attributes" : "Atributları seç", - "_%s group found_::_%s groups found_" : ["%s qruplar tapıldı","%s qruplar tapıldı"], - "_%s user found_::_%s users found_" : ["%s istifadəçilər tapıldı","%s istifadəçilər tapıldı"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "İstifadəçinin ekran atributu adını təyin etmək mümkün deyil. Xahiş olunur sizin özünüz onu əllə ldap konfiqində təyin edəsiniz.", - "Could not find the desired feature" : "Arzulanılan imkanı tapmaq mümkün deyil", - "Invalid Host" : "Yalnış Host", - "Server" : "Server", - "Users" : "İstifadəçilər", - "Groups" : "Qruplar", - "Test Configuration" : "Konfiqurasiya testi", - "Help" : "Kömək", - "Host" : "Şəbəkədə ünvan", - "Port" : "Port", - "Password" : "Şifrə", - "Advanced" : "İrəliləmiş" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/be.js b/apps/user_ldap/l10n/be.js deleted file mode 100644 index 99117026327..00000000000 --- a/apps/user_ldap/l10n/be.js +++ /dev/null @@ -1,6 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Advanced" : "Дасведчаны" -}, -"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/user_ldap/l10n/be.json b/apps/user_ldap/l10n/be.json deleted file mode 100644 index 987589ccd81..00000000000 --- a/apps/user_ldap/l10n/be.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "translations": { - "Advanced" : "Дасведчаны" -},"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/user_ldap/l10n/bg.js b/apps/user_ldap/l10n/bg.js index 5f78fbd4de0..4cef2c94481 100644 --- a/apps/user_ldap/l10n/bg.js +++ b/apps/user_ldap/l10n/bg.js @@ -3,16 +3,21 @@ OC.L10N.register( { "Failed to clear the mappings." : "Неуспешно изчистване на mapping-ите.", "Failed to delete the server configuration" : "Неуспешен опит за изтриване на сървърната конфигурация.", + "Invalid configuration: Anonymous binding is not allowed." : "Невалидна конфигурация: Анонимното обвързване не е разрешено.", + "Valid configuration, connection established!" : "Валидна конфигурация, връзката е установена!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Валидна конфигурация, но обвързването не бе успешно. Моля, проверете настройките и идентификационните данни на сървъра.", "No action specified" : "Не е посочено действие", "No configuration specified" : "Не е посочена конфигурация", "No data specified" : "Не са посочени данни", - " Could not set configuration %s" : "Неуспешно задаване на конфигруацията %s", + "Invalid data specified" : "Посочени са невалидни данни", "Action does not exist" : "Действието не съществува", + "Renewing …" : "Подновяване …", "Very weak password" : "Много проста парола", "Weak password" : "Проста парола", "So-so password" : "Не особено добра парола", "Good password" : "Добра парола", "Strong password" : "Сложна парола", + "The Base DN appears to be wrong" : "Базовото DN изглежда е грешно", "Testing configuration…" : "Изпробване на конфигурацията...", "Configuration incorrect" : "Конфигурацията е грешна", "Configuration incomplete" : "Конфигурацията не е завършена", @@ -21,52 +26,107 @@ OC.L10N.register( "Select object classes" : "Избери типове обекти", "Please check the credentials, they seem to be wrong." : "Моля, проверете идентификационните данни, изглежда че са неправилни.", "Please specify the port, it could not be auto-detected." : "Моля, посочете порт, той не може да бъде автоматично определен.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Базовото DN не може да бъде открито автоматично, моля, ревизирайте идентификационните данни, хоста и порта.", + "Could not detect Base DN, please enter it manually." : "Базовото DN не можа да бъде открито, моля, въведете го ръчно.", "{nthServer}. Server" : "{nthServer}. Сървър", + "No object found in the given Base DN. Please revise." : "Няма намерен обект в даденото базово DN. Моля, ревизирайте.", + "More than 1,000 directory entries available." : "Налични са повече от 1000 записа в директорията.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} записи, налични в рамките на предоставеното базово DN","{objectsFound} записи, налични в рамките на предоставеното базово DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Възникна грешка. Моля, проверете базовото DN, както и настройките за връзка и идентификационни данни.", "Do you really want to delete the current Server Configuration?" : "Наистина ли желаете текущата сървърна конфигурация да бъде изтрита?", "Confirm Deletion" : "Потвърди Изтриването", + "Mappings cleared successfully!" : "Съпоставянията са изчистени успешно!", + "Error while clearing the mappings." : "Грешка при изчистването на съпоставянията.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Не е позволено анонимно обвързване. Моля, посочете потребителско DN и парола.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Грешка при LDAP операции. Анонимното обвързване може да не е разрешено.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Записването не беше успешно. Моля, уверете се, че базата данни е в експлоатация. Презаредете, преди да продължите.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Превключването на режима ще активира автоматичните LDAP заявки. В зависимост от размера на вашия LDAP може да отнеме известно време. Все още ли искате да превключите режима?", + "Mode switch" : "Превключване на режим", "Select attributes" : "Избери атрибути", - "LDAP / AD integration" : "LDAP / AD интеграция", - "_%s group found_::_%s groups found_" : ["%s открита група","%s открити групи"], - "_%s user found_::_%s users found_" : ["%s октрит потребител","%s октрити потребители"], + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Потребителят не е намерен. Моля, проверете вашите атрибути за вход и име на потребител. Ефективен филтър (за копиране и поставяне за проверка от командния ред):", + "User found and settings verified." : "Намерен е потребител и настройките са проверени.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Помислете за стесняване на търсенето, тъй като то обхваща много потребители, само първият от които ще може да влезе.", + "An unspecified error occurred. Please check log and settings." : "Възникна неуточнена грешка. Моля, проверете журнала и настройките.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Невалиден филтър за търсене, вероятно поради проблеми със синтаксиса като нечетен брой отворени и затворени скоби. Моля, проверете.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Възникна грешка при свързване към LDAP/AD. Моля, проверете хост сървър, порт и идентификационни данни.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заместителят „ %u“ липсва. Той ще бъде заменен с името за вход при запитване към LDAP/AD.", + "Please provide a login name to test against" : "Моля, посочете име за вход, срещу което да тествате", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Груповата кутия е деактивирана, тъй като LDAP/AD сървърът не поддържа memberOf.", + "Please login with the new password" : "Моля, влезте с новата парола", + "LDAP User backend" : "LDAP потребителски сървър", + "Your password will expire tomorrow." : "Вашата парола ще изтече утре.", + "Your password will expire today." : "Вашата парола ще изтече днес.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Вашата парола ще изтече в рамките на %n дни.","Вашата парола ще изтече в рамките на %n дни."], + "LDAP/AD integration" : "LDAP/AD интеграция", + "_%n group found_::_%n groups found_" : ["%n открити групи","%n открити групи"], + "> 1000 groups found" : "> 1000 открити групи", + "> 1000 users found" : "> 1000 намерени потребители", + "_%n user found_::_%n users found_" : ["%n намерени потребители","%n намерени потребители"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не можа да се открие атрибут за показвано име на потребителя. Моля, посочете го сами в разширените настройки на LDAP.", "Could not find the desired feature" : "Не е открита желанта функция", "Invalid Host" : "Невалиден хост", + "LDAP user and group backend" : "Потребителски и групов LDAP сървър", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Това приложение позволява на администраторите да свържат Nextcloud към потребителска директория, базирана на LDAP. ", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Това приложение позволява на администраторите да свържат Nextcloud към LDAP-базирана потребителска директория за удостоверяване и предоставяне на потребители, групи и потребителски атрибути. Администраторите могат да конфигурират това приложение да се свързва с една или повече LDAP директории или Active Directories/активни директории/, чрез LDAP интерфейс. Атрибути, като потребителска квота, имейл, снимки на аватар, членство в групи и други могат да бъдат изтеглени в Nextcloud от директория със съответните заявки и филтри.\n\nПотребителя влиза в Nextcloud със своите LDAP или AD идентификационни данни и му се предоставя достъп въз основа на заявка за удостоверяване, обработвана от LDAP или AD сървъра. Nextcloud не съхранява LDAP или AD пароли, а тези идентификационни данни се използват за удостоверяване на потребител и след това Nextcloud използва сесия за потребителския идентификатор. Повече информация е налична в документацията на LDAP потребител и групов сървър.", "Test Configuration" : "Изпробване на конфигурацията", "Help" : "Помощ", "Groups meeting these criteria are available in %s:" : "Групи спазващи тези критерии са разположени в %s:", + "Only these object classes:" : "Само тези класове обекти:", + "Only from these groups:" : "Само от тези групи:", + "Search groups" : "Търсене на групи", "Available groups" : "Налични групи", "Selected groups" : "Избрани групи", + "Edit LDAP Query" : "Редактиране на LDAP заявка", "LDAP Filter:" : "LDAP филтър:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Филтърът посочва кои LDAP групи ще имат достъп до %s инсталацията.", - "LDAP / AD Username:" : "LDAP / AD потребител:", - "LDAP / AD Email Address:" : "LDAP / AD имейл адрес:", + "Verify settings and count the groups" : "Проверете настройките и пребройте групите", + "When logging in, %s will find the user based on the following attributes:" : "Когато влезе, %s ще намери потребител въз основа на следните атрибути:", + "LDAP/AD Username:" : "LDAP / AD Потребител:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволява влизане с име на потребител на LDAP/AD, което е или „uid“ или „sAMAccountName“ и ще бъде открито.", + "LDAP/AD Email Address:" : "LDAP / AD имейл адрес:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Позволява влизане срещу имейл атрибут. Разрешени са „mail “ и „mailPrimaryAddress“.", "Other Attributes:" : "Други атрибути:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Определя филтър, който да се приложи при опит за влизане. „%%“ замества името на потребител в действието за влизане. Пример: „uid=%%uid “", "Test Loginname" : "Проверка на Потребителско име", + "Attempts to receive a DN for the given loginname and the current login filter" : "Опити за получаване на DN за даденото име за влизане и текущия филтър за вход", "Verify settings" : "Потвърди настройките", "%s. Server:" : "%s. Сървър:", + "Add a new configuration" : "Добавяне на нова конфигурация", + "Copy current configuration into new directory binding" : "Копиране на текущата конфигурация в ново обвързване на директория", "Delete the current configuration" : "Изтриване на текущата конфигурация", "Host" : "Хост", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Можете да пропуснете протокола, освен ако не изисквате SSL. Ако е така, започнете с ldaps://", "Port" : "Порт", "Detect Port" : "Открит Port", "User DN" : "User 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 и Парола празни.", + "Save Credentials" : "Запиши идентификационни данни", "One Base DN per line" : "По един Base DN на ред", "You can specify Base DN for users and groups in the Advanced tab" : "Можете да настроите Base DN за отделни потребители/групи в раздела \"Допълнителни\"", + "Detect Base DN" : "Откриване на базов DN", + "Test Base DN" : " Тестване на базов DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избягва автоматични LDAP заявки. По-добра опция за големи инсталации, но изисква LDAP познания.", "Manually enter LDAP filters (recommended for large directories)" : "Ръчно въвеждана на LDAP филтри(препоръчано за по-големи папки)", + "Listing and searching for users is constrained by these criteria:" : "Записването в списък и търсенето на потребители е ограничено от следните критерии:", + "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." : "Най-често срещаните обектни класове за потребителите са OrganizationalPerson, person, user и inetOrgPerson. Ако не сте сигурни кой обектен клас да изберете, моля, консултирайте се с администратора на директорията.", "The filter specifies which LDAP users shall have access to the %s instance." : "Филтърът посочва кои LDAP потребители ще имат достъп до %s инсталацията.", + "Verify settings and count users" : "Проверете настройките и пребройте потребителите", "Saving" : "Записване", "Back" : "Назад", "Continue" : "Продължи", + "Please renew your password." : "Моля, обновете вашата парола.", "An internal error occurred." : "Възникна вътрешно сървърна грешка.", "Please try again or contact your administrator." : "Опитайте отново или се свържете с администраотра.", "Current password" : "Текуща парола", "New password" : "Нова парола", + "Renew password" : "Обновете парола", "Wrong password." : "Грешна парола.", "Cancel" : "Отказ", "Server" : "Сървър", "Users" : "Потребители", + "Login Attributes" : "Атрибути за влизане", "Groups" : "Групи", "Expert" : "Експерт", "Advanced" : "Допълнителни", @@ -74,7 +134,9 @@ OC.L10N.register( "Connection Settings" : "Настройки на Връзката", "Configuration Active" : "Конфигурацията е Активна", "When unchecked, this configuration will be skipped." : "Когато не е отметнато, тази конфигурация ще бъде прескочена.", + "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." : "Свържи се само с репликирания сървър.", "Turn off SSL certificate validation." : "Изключи валидацията на SSL сертификата.", @@ -82,28 +144,75 @@ OC.L10N.register( "Cache Time-To-Live" : "Кеширай Time-To-Live", "in seconds. A change empties the cache." : "в секунди. Всяка промяна изтрива кеша.", "Directory Settings" : "Настройки на Директорията", + "User Display Name Field" : "Поле на име за визуализация на потребител", "The LDAP attribute to use to generate the user's display name." : "LDAP атрибутът, който да бъде използван за генериране на видимото име на потребителя.", + "2nd User Display Name Field" : "2-ро поле на име за визуализация на потребител", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "По избор. LDAP атрибут, който да се добави към екранното име в скоби. Резултати напр. »Джон Доу (john.doe@example.org)«.", "Base User Tree" : "Base User Tree", "One User Base DN per line" : "По един User Base DN на ред", "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" : "Base Group Tree", "One Group Base DN per line" : "По един Group Base DN на ред", "Group Search Attributes" : "Атрибути на Групово Търсене", "Group-Member association" : "Group-Member асоциация", + "Dynamic Group Member URL" : "URL адрес на член на динамичната група", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP е атрибутът, който на групови обекти съдържа URL адрес за търсене на LDAP, който определя, кои обекти принадлежат към групата. (Празна настройка деактивира функционалността за динамично членство в група.)", + "Nested Groups" : "Вложени Групи", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Когато е включени, се подържат групи в групи. (Работи единствено ако членът на групата притежава атрибута DNs).", "Paging chunksize" : "Размер на paging-а", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Размерът използван за връщането на големи резултати от LDAP търсения като изброяване на потребители или групи. (Стойност 0 изключва paged LDAP търсения в тези ситуации).", + "Enable LDAP password changes per user" : "Активиране на промените на LDAP паролата на потребител", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Позволете на потребителите на LDAP да променят паролата си и позволете на супер администраторите и груповите администратори да променят паролата на своите потребители на LDAP. Работи само когато политиките за контрол на достъпа са конфигурирани в съответствие на LDAP сървъра. Тъй като пароли се изпращат в обикновен текст към LDAP сървъра, трябва да се използва транспортно криптиране и да се конфигурира хеширането на паролата на LDAP сървъра.", + "(New password is sent as plain text to LDAP)" : "(Новата парола се изпраща като обикновен текст до LDAP)", + "Default password policy DN" : "Политика за парола по подразбиране на DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN на политика за парола по подразбиране, която ще се използва за обработка на изтичане на паролата. Работи само когато промените на LDAP паролата на потребител са разрешени и се поддържа само от OpenLDAP. Оставете празно, за да деактивирате обработката на изтичане на паролата.", "Special Attributes" : "Специални атрибути", "Quota Field" : "Поле за Квота", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Оставете празно за квота по подразбиране на потребителя. В противен случай посочете LDAP/AD атрибут.", "Quota Default" : "Детайли на квотата", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Отмяна на квотата по подразбиране за потребители на LDAP, които нямат зададена квота в полето за квота.", "Email Field" : "Поле за имейл", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Задайте имейла на потребителя от неговия LDAP атрибут. Оставете го празно за поведение по подразбиране.", + "User Home Folder Naming Rule" : "Правило за наименуване на домашна папка на потребителя", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставете празно за име на потребител (по пдразбиране). Или посочете LDAP/AD атрибут.", + "\"$home\" Placeholder Field" : "„$home“ Заместващо поле", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home в конфигурация за външно хранилище ще бъде заменен със стойността на посочения атрибут", + "User Profile Attributes" : "Атрибути на Потребителски Профил", + "Phone Field" : "Поле за Телефонен номер", + "User profile Phone will be set from the specified attribute" : "Телефонът на потребителския профил ще бъде зададен от определения атрибут", + "Website Field" : "Поле за Уеб сайт", + "User profile Website will be set from the specified attribute" : "Уеб сайтът на потребителския профил ще бъде зададен от определения атрибут", + "Address Field" : "Поле за Адрес", + "User profile Address will be set from the specified attribute" : "Адресът на потребителския профил ще бъде зададен от определения атрибут", + "Twitter Field" : "Twitter Поле", + "User profile Twitter will be set from the specified attribute" : "Потребителският профил вTwitter ще бъде зададен от определения атрибут", + "Fediverse Field" : "Fediverse Поле", + "User profile Fediverse will be set from the specified attribute" : "Потребителският профил във Fediverse ще бъде зададен от определения атрибут", + "Organisation Field" : "Поле за име на Организация", + "User profile Organisation will be set from the specified attribute" : "Организацията на потребителския профил ще бъде зададена от определения атрибут", + "Role Field" : "Поле за Роля", + "User profile Role will be set from the specified attribute" : "Ролята на потребителския профил ще бъде зададена от определения атрибут", + "Headline Field" : "Поле за Заглавие", + "User profile Headline will be set from the specified attribute" : "Заглавието на потребителския профил ще бъде зададено от определения атрибут", + "Biography Field" : "Поле за Биография", + "User profile Biography will be set from the specified attribute" : "Биографията на потребителския профил ще бъде зададена от определения атрибут", + "User profile Date of birth will be set from the specified attribute" : "Датата на раждане в потребителския профил ще се зададе от този атрибут", + "Pronouns Field" : "Поле за обръщение", + "User profile Pronouns will be set from the specified attribute" : "Опциите за обръщение в профила на потребителите ще се зададат от този атрибут", "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "По подразбиране вътрешното име на потребител ще бъде създадено от атрибута UUID. Той гарантира, че името на потребител е уникално и знаците не трябва да се преобразуват. Вътрешното име на потребител има ограничението, че са позволени само тези знаци: [a-zA-Z0-9_.@-]. Други знаци се заменят с тяхното ASCII съответствие или просто се пропускат. При сблъсъци числото ще бъде добавено/увеличено. Вътрешното име на потребител се използва за вътрешно идентифициране на потребител. Това също е името по подразбиране за домашната папка на потребителя. Той също така е част от отдалечени URL адреси, например за всички *DAV услуги. С тази настройка поведението по подразбиране може да бъде отменено. Промените ще имат ефект само върху ново съпоставени (добавени) потребители на 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." : "Обикновено UUID атрибутът ще бъде намерен автоматично. UUID атрибута се използва, за да се идентифицират еднозначно LDAP потребители и групи. Освен това ще бъде генерирано вътрешното име базирано на UUID-то, ако такова не е посочено по-горе. Можете да промените настройката и да използвате атрибут по свой избор. Наложително е атрибутът да бъде уникален както за потребителите така и за групите. Промените ще се отразят само за новодобавени (map-нати) LDAP потребители.", "UUID Attribute for Users:" : "UUID атрибут за потребителите:", - "UUID Attribute for Groups:" : "UUID атрибут за групите:" + "UUID Attribute for Groups:" : "UUID атрибут за групите:", + "Username-LDAP User Mapping" : "Име на потребител-LDAP Потребителско съпоставяне ", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Потребителските имена се използват за съхраняване и присвояване на метаданни. С цел точно идентифициране и разпознаване на потребителите, всеки потребител на LDAP ще има вътрешно име на потребител. Това изисква съпоставяне от име на потребител към потребител на LDAP. Създаденото име на потребител се съпоставя с UUID на потребителя на LDAP. Освен това DN се кешира, за да се намали взаимодействието с LDAP, но не се използва за идентификация. Ако DN се промени, промените ще бъдат намерени. Вътрешното име на потребител се използва навсякъде. Изчистването на съпоставянията ще има остатъци навсякъде. Изчистването на съпоставянията не е чувствително към конфигурацията, засяга всички LDAP конфигурации! Никога не изчиствайте съпоставянията в производствена среда, само в тестов или експериментален етап.", + "Clear Username-LDAP User Mapping" : "Изчистване на име на потребител-LDAP Потребителско съпоставяне ", + "Clear Groupname-LDAP Group Mapping" : "Изчистване на име на група-LDAP Потребителско съпоставяне ", + "Invalid configuration. Please have a look at the logs for further details." : "Невалидна конфигурация. Моля, разгледайте журналите за повече подробности." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/bg.json b/apps/user_ldap/l10n/bg.json index 977c78b93b9..edb583c67e1 100644 --- a/apps/user_ldap/l10n/bg.json +++ b/apps/user_ldap/l10n/bg.json @@ -1,16 +1,21 @@ { "translations": { "Failed to clear the mappings." : "Неуспешно изчистване на mapping-ите.", "Failed to delete the server configuration" : "Неуспешен опит за изтриване на сървърната конфигурация.", + "Invalid configuration: Anonymous binding is not allowed." : "Невалидна конфигурация: Анонимното обвързване не е разрешено.", + "Valid configuration, connection established!" : "Валидна конфигурация, връзката е установена!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Валидна конфигурация, но обвързването не бе успешно. Моля, проверете настройките и идентификационните данни на сървъра.", "No action specified" : "Не е посочено действие", "No configuration specified" : "Не е посочена конфигурация", "No data specified" : "Не са посочени данни", - " Could not set configuration %s" : "Неуспешно задаване на конфигруацията %s", + "Invalid data specified" : "Посочени са невалидни данни", "Action does not exist" : "Действието не съществува", + "Renewing …" : "Подновяване …", "Very weak password" : "Много проста парола", "Weak password" : "Проста парола", "So-so password" : "Не особено добра парола", "Good password" : "Добра парола", "Strong password" : "Сложна парола", + "The Base DN appears to be wrong" : "Базовото DN изглежда е грешно", "Testing configuration…" : "Изпробване на конфигурацията...", "Configuration incorrect" : "Конфигурацията е грешна", "Configuration incomplete" : "Конфигурацията не е завършена", @@ -19,52 +24,107 @@ "Select object classes" : "Избери типове обекти", "Please check the credentials, they seem to be wrong." : "Моля, проверете идентификационните данни, изглежда че са неправилни.", "Please specify the port, it could not be auto-detected." : "Моля, посочете порт, той не може да бъде автоматично определен.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Базовото DN не може да бъде открито автоматично, моля, ревизирайте идентификационните данни, хоста и порта.", + "Could not detect Base DN, please enter it manually." : "Базовото DN не можа да бъде открито, моля, въведете го ръчно.", "{nthServer}. Server" : "{nthServer}. Сървър", + "No object found in the given Base DN. Please revise." : "Няма намерен обект в даденото базово DN. Моля, ревизирайте.", + "More than 1,000 directory entries available." : "Налични са повече от 1000 записа в директорията.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} записи, налични в рамките на предоставеното базово DN","{objectsFound} записи, налични в рамките на предоставеното базово DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Възникна грешка. Моля, проверете базовото DN, както и настройките за връзка и идентификационни данни.", "Do you really want to delete the current Server Configuration?" : "Наистина ли желаете текущата сървърна конфигурация да бъде изтрита?", "Confirm Deletion" : "Потвърди Изтриването", + "Mappings cleared successfully!" : "Съпоставянията са изчистени успешно!", + "Error while clearing the mappings." : "Грешка при изчистването на съпоставянията.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Не е позволено анонимно обвързване. Моля, посочете потребителско DN и парола.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Грешка при LDAP операции. Анонимното обвързване може да не е разрешено.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Записването не беше успешно. Моля, уверете се, че базата данни е в експлоатация. Презаредете, преди да продължите.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Превключването на режима ще активира автоматичните LDAP заявки. В зависимост от размера на вашия LDAP може да отнеме известно време. Все още ли искате да превключите режима?", + "Mode switch" : "Превключване на режим", "Select attributes" : "Избери атрибути", - "LDAP / AD integration" : "LDAP / AD интеграция", - "_%s group found_::_%s groups found_" : ["%s открита група","%s открити групи"], - "_%s user found_::_%s users found_" : ["%s октрит потребител","%s октрити потребители"], + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Потребителят не е намерен. Моля, проверете вашите атрибути за вход и име на потребител. Ефективен филтър (за копиране и поставяне за проверка от командния ред):", + "User found and settings verified." : "Намерен е потребител и настройките са проверени.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Помислете за стесняване на търсенето, тъй като то обхваща много потребители, само първият от които ще може да влезе.", + "An unspecified error occurred. Please check log and settings." : "Възникна неуточнена грешка. Моля, проверете журнала и настройките.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Невалиден филтър за търсене, вероятно поради проблеми със синтаксиса като нечетен брой отворени и затворени скоби. Моля, проверете.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Възникна грешка при свързване към LDAP/AD. Моля, проверете хост сървър, порт и идентификационни данни.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заместителят „ %u“ липсва. Той ще бъде заменен с името за вход при запитване към LDAP/AD.", + "Please provide a login name to test against" : "Моля, посочете име за вход, срещу което да тествате", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Груповата кутия е деактивирана, тъй като LDAP/AD сървърът не поддържа memberOf.", + "Please login with the new password" : "Моля, влезте с новата парола", + "LDAP User backend" : "LDAP потребителски сървър", + "Your password will expire tomorrow." : "Вашата парола ще изтече утре.", + "Your password will expire today." : "Вашата парола ще изтече днес.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Вашата парола ще изтече в рамките на %n дни.","Вашата парола ще изтече в рамките на %n дни."], + "LDAP/AD integration" : "LDAP/AD интеграция", + "_%n group found_::_%n groups found_" : ["%n открити групи","%n открити групи"], + "> 1000 groups found" : "> 1000 открити групи", + "> 1000 users found" : "> 1000 намерени потребители", + "_%n user found_::_%n users found_" : ["%n намерени потребители","%n намерени потребители"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не можа да се открие атрибут за показвано име на потребителя. Моля, посочете го сами в разширените настройки на LDAP.", "Could not find the desired feature" : "Не е открита желанта функция", "Invalid Host" : "Невалиден хост", + "LDAP user and group backend" : "Потребителски и групов LDAP сървър", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Това приложение позволява на администраторите да свържат Nextcloud към потребителска директория, базирана на LDAP. ", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Това приложение позволява на администраторите да свържат Nextcloud към LDAP-базирана потребителска директория за удостоверяване и предоставяне на потребители, групи и потребителски атрибути. Администраторите могат да конфигурират това приложение да се свързва с една или повече LDAP директории или Active Directories/активни директории/, чрез LDAP интерфейс. Атрибути, като потребителска квота, имейл, снимки на аватар, членство в групи и други могат да бъдат изтеглени в Nextcloud от директория със съответните заявки и филтри.\n\nПотребителя влиза в Nextcloud със своите LDAP или AD идентификационни данни и му се предоставя достъп въз основа на заявка за удостоверяване, обработвана от LDAP или AD сървъра. Nextcloud не съхранява LDAP или AD пароли, а тези идентификационни данни се използват за удостоверяване на потребител и след това Nextcloud използва сесия за потребителския идентификатор. Повече информация е налична в документацията на LDAP потребител и групов сървър.", "Test Configuration" : "Изпробване на конфигурацията", "Help" : "Помощ", "Groups meeting these criteria are available in %s:" : "Групи спазващи тези критерии са разположени в %s:", + "Only these object classes:" : "Само тези класове обекти:", + "Only from these groups:" : "Само от тези групи:", + "Search groups" : "Търсене на групи", "Available groups" : "Налични групи", "Selected groups" : "Избрани групи", + "Edit LDAP Query" : "Редактиране на LDAP заявка", "LDAP Filter:" : "LDAP филтър:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Филтърът посочва кои LDAP групи ще имат достъп до %s инсталацията.", - "LDAP / AD Username:" : "LDAP / AD потребител:", - "LDAP / AD Email Address:" : "LDAP / AD имейл адрес:", + "Verify settings and count the groups" : "Проверете настройките и пребройте групите", + "When logging in, %s will find the user based on the following attributes:" : "Когато влезе, %s ще намери потребител въз основа на следните атрибути:", + "LDAP/AD Username:" : "LDAP / AD Потребител:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволява влизане с име на потребител на LDAP/AD, което е или „uid“ или „sAMAccountName“ и ще бъде открито.", + "LDAP/AD Email Address:" : "LDAP / AD имейл адрес:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Позволява влизане срещу имейл атрибут. Разрешени са „mail “ и „mailPrimaryAddress“.", "Other Attributes:" : "Други атрибути:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Определя филтър, който да се приложи при опит за влизане. „%%“ замества името на потребител в действието за влизане. Пример: „uid=%%uid “", "Test Loginname" : "Проверка на Потребителско име", + "Attempts to receive a DN for the given loginname and the current login filter" : "Опити за получаване на DN за даденото име за влизане и текущия филтър за вход", "Verify settings" : "Потвърди настройките", "%s. Server:" : "%s. Сървър:", + "Add a new configuration" : "Добавяне на нова конфигурация", + "Copy current configuration into new directory binding" : "Копиране на текущата конфигурация в ново обвързване на директория", "Delete the current configuration" : "Изтриване на текущата конфигурация", "Host" : "Хост", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Можете да пропуснете протокола, освен ако не изисквате SSL. Ако е така, започнете с ldaps://", "Port" : "Порт", "Detect Port" : "Открит Port", "User DN" : "User 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 и Парола празни.", + "Save Credentials" : "Запиши идентификационни данни", "One Base DN per line" : "По един Base DN на ред", "You can specify Base DN for users and groups in the Advanced tab" : "Можете да настроите Base DN за отделни потребители/групи в раздела \"Допълнителни\"", + "Detect Base DN" : "Откриване на базов DN", + "Test Base DN" : " Тестване на базов DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избягва автоматични LDAP заявки. По-добра опция за големи инсталации, но изисква LDAP познания.", "Manually enter LDAP filters (recommended for large directories)" : "Ръчно въвеждана на LDAP филтри(препоръчано за по-големи папки)", + "Listing and searching for users is constrained by these criteria:" : "Записването в списък и търсенето на потребители е ограничено от следните критерии:", + "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." : "Най-често срещаните обектни класове за потребителите са OrganizationalPerson, person, user и inetOrgPerson. Ако не сте сигурни кой обектен клас да изберете, моля, консултирайте се с администратора на директорията.", "The filter specifies which LDAP users shall have access to the %s instance." : "Филтърът посочва кои LDAP потребители ще имат достъп до %s инсталацията.", + "Verify settings and count users" : "Проверете настройките и пребройте потребителите", "Saving" : "Записване", "Back" : "Назад", "Continue" : "Продължи", + "Please renew your password." : "Моля, обновете вашата парола.", "An internal error occurred." : "Възникна вътрешно сървърна грешка.", "Please try again or contact your administrator." : "Опитайте отново или се свържете с администраотра.", "Current password" : "Текуща парола", "New password" : "Нова парола", + "Renew password" : "Обновете парола", "Wrong password." : "Грешна парола.", "Cancel" : "Отказ", "Server" : "Сървър", "Users" : "Потребители", + "Login Attributes" : "Атрибути за влизане", "Groups" : "Групи", "Expert" : "Експерт", "Advanced" : "Допълнителни", @@ -72,7 +132,9 @@ "Connection Settings" : "Настройки на Връзката", "Configuration Active" : "Конфигурацията е Активна", "When unchecked, this configuration will be skipped." : "Когато не е отметнато, тази конфигурация ще бъде прескочена.", + "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." : "Свържи се само с репликирания сървър.", "Turn off SSL certificate validation." : "Изключи валидацията на SSL сертификата.", @@ -80,28 +142,75 @@ "Cache Time-To-Live" : "Кеширай Time-To-Live", "in seconds. A change empties the cache." : "в секунди. Всяка промяна изтрива кеша.", "Directory Settings" : "Настройки на Директорията", + "User Display Name Field" : "Поле на име за визуализация на потребител", "The LDAP attribute to use to generate the user's display name." : "LDAP атрибутът, който да бъде използван за генериране на видимото име на потребителя.", + "2nd User Display Name Field" : "2-ро поле на име за визуализация на потребител", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "По избор. LDAP атрибут, който да се добави към екранното име в скоби. Резултати напр. »Джон Доу (john.doe@example.org)«.", "Base User Tree" : "Base User Tree", "One User Base DN per line" : "По един User Base DN на ред", "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" : "Base Group Tree", "One Group Base DN per line" : "По един Group Base DN на ред", "Group Search Attributes" : "Атрибути на Групово Търсене", "Group-Member association" : "Group-Member асоциация", + "Dynamic Group Member URL" : "URL адрес на член на динамичната група", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP е атрибутът, който на групови обекти съдържа URL адрес за търсене на LDAP, който определя, кои обекти принадлежат към групата. (Празна настройка деактивира функционалността за динамично членство в група.)", + "Nested Groups" : "Вложени Групи", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Когато е включени, се подържат групи в групи. (Работи единствено ако членът на групата притежава атрибута DNs).", "Paging chunksize" : "Размер на paging-а", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Размерът използван за връщането на големи резултати от LDAP търсения като изброяване на потребители или групи. (Стойност 0 изключва paged LDAP търсения в тези ситуации).", + "Enable LDAP password changes per user" : "Активиране на промените на LDAP паролата на потребител", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Позволете на потребителите на LDAP да променят паролата си и позволете на супер администраторите и груповите администратори да променят паролата на своите потребители на LDAP. Работи само когато политиките за контрол на достъпа са конфигурирани в съответствие на LDAP сървъра. Тъй като пароли се изпращат в обикновен текст към LDAP сървъра, трябва да се използва транспортно криптиране и да се конфигурира хеширането на паролата на LDAP сървъра.", + "(New password is sent as plain text to LDAP)" : "(Новата парола се изпраща като обикновен текст до LDAP)", + "Default password policy DN" : "Политика за парола по подразбиране на DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN на политика за парола по подразбиране, която ще се използва за обработка на изтичане на паролата. Работи само когато промените на LDAP паролата на потребител са разрешени и се поддържа само от OpenLDAP. Оставете празно, за да деактивирате обработката на изтичане на паролата.", "Special Attributes" : "Специални атрибути", "Quota Field" : "Поле за Квота", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Оставете празно за квота по подразбиране на потребителя. В противен случай посочете LDAP/AD атрибут.", "Quota Default" : "Детайли на квотата", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Отмяна на квотата по подразбиране за потребители на LDAP, които нямат зададена квота в полето за квота.", "Email Field" : "Поле за имейл", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Задайте имейла на потребителя от неговия LDAP атрибут. Оставете го празно за поведение по подразбиране.", + "User Home Folder Naming Rule" : "Правило за наименуване на домашна папка на потребителя", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставете празно за име на потребител (по пдразбиране). Или посочете LDAP/AD атрибут.", + "\"$home\" Placeholder Field" : "„$home“ Заместващо поле", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home в конфигурация за външно хранилище ще бъде заменен със стойността на посочения атрибут", + "User Profile Attributes" : "Атрибути на Потребителски Профил", + "Phone Field" : "Поле за Телефонен номер", + "User profile Phone will be set from the specified attribute" : "Телефонът на потребителския профил ще бъде зададен от определения атрибут", + "Website Field" : "Поле за Уеб сайт", + "User profile Website will be set from the specified attribute" : "Уеб сайтът на потребителския профил ще бъде зададен от определения атрибут", + "Address Field" : "Поле за Адрес", + "User profile Address will be set from the specified attribute" : "Адресът на потребителския профил ще бъде зададен от определения атрибут", + "Twitter Field" : "Twitter Поле", + "User profile Twitter will be set from the specified attribute" : "Потребителският профил вTwitter ще бъде зададен от определения атрибут", + "Fediverse Field" : "Fediverse Поле", + "User profile Fediverse will be set from the specified attribute" : "Потребителският профил във Fediverse ще бъде зададен от определения атрибут", + "Organisation Field" : "Поле за име на Организация", + "User profile Organisation will be set from the specified attribute" : "Организацията на потребителския профил ще бъде зададена от определения атрибут", + "Role Field" : "Поле за Роля", + "User profile Role will be set from the specified attribute" : "Ролята на потребителския профил ще бъде зададена от определения атрибут", + "Headline Field" : "Поле за Заглавие", + "User profile Headline will be set from the specified attribute" : "Заглавието на потребителския профил ще бъде зададено от определения атрибут", + "Biography Field" : "Поле за Биография", + "User profile Biography will be set from the specified attribute" : "Биографията на потребителския профил ще бъде зададена от определения атрибут", + "User profile Date of birth will be set from the specified attribute" : "Датата на раждане в потребителския профил ще се зададе от този атрибут", + "Pronouns Field" : "Поле за обръщение", + "User profile Pronouns will be set from the specified attribute" : "Опциите за обръщение в профила на потребителите ще се зададат от този атрибут", "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "По подразбиране вътрешното име на потребител ще бъде създадено от атрибута UUID. Той гарантира, че името на потребител е уникално и знаците не трябва да се преобразуват. Вътрешното име на потребител има ограничението, че са позволени само тези знаци: [a-zA-Z0-9_.@-]. Други знаци се заменят с тяхното ASCII съответствие или просто се пропускат. При сблъсъци числото ще бъде добавено/увеличено. Вътрешното име на потребител се използва за вътрешно идентифициране на потребител. Това също е името по подразбиране за домашната папка на потребителя. Той също така е част от отдалечени URL адреси, например за всички *DAV услуги. С тази настройка поведението по подразбиране може да бъде отменено. Промените ще имат ефект само върху ново съпоставени (добавени) потребители на 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." : "Обикновено UUID атрибутът ще бъде намерен автоматично. UUID атрибута се използва, за да се идентифицират еднозначно LDAP потребители и групи. Освен това ще бъде генерирано вътрешното име базирано на UUID-то, ако такова не е посочено по-горе. Можете да промените настройката и да използвате атрибут по свой избор. Наложително е атрибутът да бъде уникален както за потребителите така и за групите. Промените ще се отразят само за новодобавени (map-нати) LDAP потребители.", "UUID Attribute for Users:" : "UUID атрибут за потребителите:", - "UUID Attribute for Groups:" : "UUID атрибут за групите:" + "UUID Attribute for Groups:" : "UUID атрибут за групите:", + "Username-LDAP User Mapping" : "Име на потребител-LDAP Потребителско съпоставяне ", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Потребителските имена се използват за съхраняване и присвояване на метаданни. С цел точно идентифициране и разпознаване на потребителите, всеки потребител на LDAP ще има вътрешно име на потребител. Това изисква съпоставяне от име на потребител към потребител на LDAP. Създаденото име на потребител се съпоставя с UUID на потребителя на LDAP. Освен това DN се кешира, за да се намали взаимодействието с LDAP, но не се използва за идентификация. Ако DN се промени, промените ще бъдат намерени. Вътрешното име на потребител се използва навсякъде. Изчистването на съпоставянията ще има остатъци навсякъде. Изчистването на съпоставянията не е чувствително към конфигурацията, засяга всички LDAP конфигурации! Никога не изчиствайте съпоставянията в производствена среда, само в тестов или експериментален етап.", + "Clear Username-LDAP User Mapping" : "Изчистване на име на потребител-LDAP Потребителско съпоставяне ", + "Clear Groupname-LDAP Group Mapping" : "Изчистване на име на група-LDAP Потребителско съпоставяне ", + "Invalid configuration. Please have a look at the logs for further details." : "Невалидна конфигурация. Моля, разгледайте журналите за повече подробности." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/bg_BG.js b/apps/user_ldap/l10n/bg_BG.js deleted file mode 100644 index 80ca296043f..00000000000 --- a/apps/user_ldap/l10n/bg_BG.js +++ /dev/null @@ -1,107 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Неуспешно изчистване на mapping-ите.", - "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." : "Конфигурацията е валидна, но Bind-а неуспя. Моля, провери сървърните настройки, потребителското име и паролата.", - "The configuration is invalid. Please have a look at the logs for further details." : "Невалидна конфигурация. Моля, разгледай докладите за допълнителна информация.", - "No action specified" : "Не е посочено действие", - "No configuration specified" : "Не е посочена конфигурация", - "No data specified" : "Не са посочени данни", - " Could not set configuration %s" : "Неуспешно задаване на конфигруацията %s", - "Configuration incorrect" : "Конфигурацията е грешна", - "Configuration incomplete" : "Конфигурацията не е завършена", - "Configuration OK" : "Конфигурацията е ОК", - "Select groups" : "Избери Групи", - "Select object classes" : "Избери типове обекти", - "{nthServer}. Server" : "{nthServer}. Сървър", - "Do you really want to delete the current Server Configuration?" : "Наистина ли искаш да изтриеш текущата Сървърна Конфигурация?", - "Confirm Deletion" : "Потвърди Изтриването", - "Select attributes" : "Избери атрибути", - "_%s group found_::_%s groups found_" : ["%s открита група","%s открити групи"], - "_%s user found_::_%s users found_" : ["%s октрит потребител","%s октрити потребители"], - "Could not find the desired feature" : "Не е открита желанта функция", - "Invalid Host" : "Невалиден Сървър", - "Server" : "Сървър", - "Users" : "Потребители", - "Groups" : "Групи", - "Test Configuration" : "Тествай Конфигурацията", - "Help" : "Помощ", - "Groups meeting these criteria are available in %s:" : "Групи спазващи тези критерии са разположени в %s:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Филтърът посочва кои LDAP групи ще имат достъп до %s инсталацията.", - "Other Attributes:" : "Други Атрибути:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Заявява филтърът, който да бъде приложен при опит за вписване. %%uid замества потребителското име в полето login action. Пример: \"uid=%%uid\".", - "Test Loginname" : "Проверка на Потребителско име", - "Verify settings" : "Потвърди настройките", - "1. Server" : "1. Сървър", - "%s. Server:" : "%s. Сървър:", - "Host" : "Host", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Протоколът не задължителен освен ако не изискваш SLL. В такъв случай започни с ldaps://", - "Port" : "Порт", - "Detect Port" : "Открит Port", - "User DN" : "User 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" : "По един Base DN на ред", - "You can specify Base DN for users and groups in the Advanced tab" : "Можеш да настроиш Base DN за отделни потребители и групи в разделителя Допълнителни.", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избягва автоматични LDAP заявки. По-добра опция за големи инсталации, но изисква LDAP познания.", - "Manually enter LDAP filters (recommended for large directories)" : "Ръчно въвеждана на LDAP филтри(препоръчано за по-големи папки)", - "The filter specifies which LDAP users shall have access to the %s instance." : "Филтърът посочва кои LDAP потребители ще имат достъп до %s инсталацията.", - "Saving" : "Записване", - "Back" : "Назад", - "Continue" : "Продължи", - "LDAP" : "LDAP", - "Expert" : "Експерт", - "Advanced" : "Допълнителни", - "<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> PHP LDAP модулът не е инсталиран, сървърът няма да работи. Моля, поискай системният админстратор да го инсталира.", - "Connection Settings" : "Настройки на Връзката", - "Configuration Active" : "Конфигурацията е Активна", - "When unchecked, this configuration will be skipped." : "Когато не е отметнато, тази конфигурация ще бъде прескочена.", - "Backup (Replica) Host" : "Backup (Replica) Host", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Задай незадължителен резервен сървър. Трябва да бъде реплика на главния LDAP/AD сървър.", - "Backup (Replica) Port" : "Backup (Replica) Port", - "Disable Main Server" : "Изключи Главиния Сървър", - "Only connect to the replica server." : "Свържи се само с репликирания сървър.", - "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." : "Не е пропоръчително, ползвай само за тестване. Ако връзката работи само с тази опция, вмъкни LDAP сървърния SSL сертификат в твоя %s сървър.", - "Cache Time-To-Live" : "Кеширай Time-To-Live", - "in seconds. A change empties the cache." : "в секунди. Всяка промяна изтрива кеша.", - "Directory Settings" : "Настройки на Директорията", - "User Display Name Field" : "Поле User Display Name", - "The LDAP attribute to use to generate the user's display name." : "LDAP атрибутът, който да бъде използван за генериране на видимото име на потребителя.", - "Base User Tree" : "Base User Tree", - "One User Base DN per line" : "По един User Base DN на ред", - "User Search Attributes" : "Атрибути на Потребителско Търсене", - "Optional; one attribute per line" : "По желание; един атрибут на ред", - "Group Display Name Field" : "Поле Group Display Name", - "The LDAP attribute to use to generate the groups's display name." : "LDAP атрибутът, който да бъде използван за генерирането на видмото име на групата.", - "Base Group Tree" : "Base Group Tree", - "One Group Base DN per line" : "По един Group Base DN на ред", - "Group Search Attributes" : "Атрибути на Групово Търсене", - "Group-Member association" : "Group-Member асоциация", - "Nested Groups" : "Nested Групи", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Когато е включени, се подържат групи в групи. (Работи единствено ако членът на групата притежава атрибута DNs).", - "Paging chunksize" : "Размер на paging-а", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Размерът използван за връщането на големи резултати от LDAP търсения като изброяване на потребители или групи. (Стойност 0 изключва paged LDAP търсения в тези ситуации).", - "Special Attributes" : "Специални Атрибути", - "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 атрибут.", - "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 еквиваленти или ще бъдат просто пренебрегнати. Ако има сблъсъци ще бъде добавено/увеличено число. Вътрешното потребителско име се използва, за да се идентифицира вътрешно потребителя. То е и директорията по подразбиране на потребителя. Също така е част от отдалечените URL-и, на пример за всички *DAV услуги. С тази настройка може да бъде променено всичко това. За да постигнеш подобно държание на това, което беше в ownCloud 5 въведи съдържанието на user display name атрибутът тук. Остави го празно да се държи, както по подразбиране. Промените ще се отразят само на новодобавени(map-нати) 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." : "По подразбиране, UUID атрибутът ще бъде автоматично намерен. UUID се използва, за да се идентифицират еднозначно LDAP потребители и групи. Също така, вътрешното име ще бъде генерирано базирано на UUID, ако такова не е посочено по-горе. Можеш да промениш тази настройка и да използваш атрибут по свой избор. Трябва да се увериш, че атрибутът, който си избрал може да бъде проверен, както за потребителите така и за групите, и да е уникален. Промените ще се отразят само на новодобавени(map-нати) LDAP потребители.", - "UUID Attribute for Users:" : "UUID Атрибут за Потребителите:", - "UUID Attribute for Groups:" : "UUID Атрибут за Групите:", - "Username-LDAP User Mapping" : "Username-LDAP User Mapping", - "Clear Username-LDAP User Mapping" : "Изчисти Username-LDAP User Mapping", - "Clear Groupname-LDAP Group Mapping" : "Изчисти Groupname-LDAP Group Mapping" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/bg_BG.json b/apps/user_ldap/l10n/bg_BG.json deleted file mode 100644 index ab7ed7c5c6a..00000000000 --- a/apps/user_ldap/l10n/bg_BG.json +++ /dev/null @@ -1,105 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Неуспешно изчистване на mapping-ите.", - "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." : "Конфигурацията е валидна, но Bind-а неуспя. Моля, провери сървърните настройки, потребителското име и паролата.", - "The configuration is invalid. Please have a look at the logs for further details." : "Невалидна конфигурация. Моля, разгледай докладите за допълнителна информация.", - "No action specified" : "Не е посочено действие", - "No configuration specified" : "Не е посочена конфигурация", - "No data specified" : "Не са посочени данни", - " Could not set configuration %s" : "Неуспешно задаване на конфигруацията %s", - "Configuration incorrect" : "Конфигурацията е грешна", - "Configuration incomplete" : "Конфигурацията не е завършена", - "Configuration OK" : "Конфигурацията е ОК", - "Select groups" : "Избери Групи", - "Select object classes" : "Избери типове обекти", - "{nthServer}. Server" : "{nthServer}. Сървър", - "Do you really want to delete the current Server Configuration?" : "Наистина ли искаш да изтриеш текущата Сървърна Конфигурация?", - "Confirm Deletion" : "Потвърди Изтриването", - "Select attributes" : "Избери атрибути", - "_%s group found_::_%s groups found_" : ["%s открита група","%s открити групи"], - "_%s user found_::_%s users found_" : ["%s октрит потребител","%s октрити потребители"], - "Could not find the desired feature" : "Не е открита желанта функция", - "Invalid Host" : "Невалиден Сървър", - "Server" : "Сървър", - "Users" : "Потребители", - "Groups" : "Групи", - "Test Configuration" : "Тествай Конфигурацията", - "Help" : "Помощ", - "Groups meeting these criteria are available in %s:" : "Групи спазващи тези критерии са разположени в %s:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Филтърът посочва кои LDAP групи ще имат достъп до %s инсталацията.", - "Other Attributes:" : "Други Атрибути:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Заявява филтърът, който да бъде приложен при опит за вписване. %%uid замества потребителското име в полето login action. Пример: \"uid=%%uid\".", - "Test Loginname" : "Проверка на Потребителско име", - "Verify settings" : "Потвърди настройките", - "1. Server" : "1. Сървър", - "%s. Server:" : "%s. Сървър:", - "Host" : "Host", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Протоколът не задължителен освен ако не изискваш SLL. В такъв случай започни с ldaps://", - "Port" : "Порт", - "Detect Port" : "Открит Port", - "User DN" : "User 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" : "По един Base DN на ред", - "You can specify Base DN for users and groups in the Advanced tab" : "Можеш да настроиш Base DN за отделни потребители и групи в разделителя Допълнителни.", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избягва автоматични LDAP заявки. По-добра опция за големи инсталации, но изисква LDAP познания.", - "Manually enter LDAP filters (recommended for large directories)" : "Ръчно въвеждана на LDAP филтри(препоръчано за по-големи папки)", - "The filter specifies which LDAP users shall have access to the %s instance." : "Филтърът посочва кои LDAP потребители ще имат достъп до %s инсталацията.", - "Saving" : "Записване", - "Back" : "Назад", - "Continue" : "Продължи", - "LDAP" : "LDAP", - "Expert" : "Експерт", - "Advanced" : "Допълнителни", - "<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> PHP LDAP модулът не е инсталиран, сървърът няма да работи. Моля, поискай системният админстратор да го инсталира.", - "Connection Settings" : "Настройки на Връзката", - "Configuration Active" : "Конфигурацията е Активна", - "When unchecked, this configuration will be skipped." : "Когато не е отметнато, тази конфигурация ще бъде прескочена.", - "Backup (Replica) Host" : "Backup (Replica) Host", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Задай незадължителен резервен сървър. Трябва да бъде реплика на главния LDAP/AD сървър.", - "Backup (Replica) Port" : "Backup (Replica) Port", - "Disable Main Server" : "Изключи Главиния Сървър", - "Only connect to the replica server." : "Свържи се само с репликирания сървър.", - "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." : "Не е пропоръчително, ползвай само за тестване. Ако връзката работи само с тази опция, вмъкни LDAP сървърния SSL сертификат в твоя %s сървър.", - "Cache Time-To-Live" : "Кеширай Time-To-Live", - "in seconds. A change empties the cache." : "в секунди. Всяка промяна изтрива кеша.", - "Directory Settings" : "Настройки на Директорията", - "User Display Name Field" : "Поле User Display Name", - "The LDAP attribute to use to generate the user's display name." : "LDAP атрибутът, който да бъде използван за генериране на видимото име на потребителя.", - "Base User Tree" : "Base User Tree", - "One User Base DN per line" : "По един User Base DN на ред", - "User Search Attributes" : "Атрибути на Потребителско Търсене", - "Optional; one attribute per line" : "По желание; един атрибут на ред", - "Group Display Name Field" : "Поле Group Display Name", - "The LDAP attribute to use to generate the groups's display name." : "LDAP атрибутът, който да бъде използван за генерирането на видмото име на групата.", - "Base Group Tree" : "Base Group Tree", - "One Group Base DN per line" : "По един Group Base DN на ред", - "Group Search Attributes" : "Атрибути на Групово Търсене", - "Group-Member association" : "Group-Member асоциация", - "Nested Groups" : "Nested Групи", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Когато е включени, се подържат групи в групи. (Работи единствено ако членът на групата притежава атрибута DNs).", - "Paging chunksize" : "Размер на paging-а", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Размерът използван за връщането на големи резултати от LDAP търсения като изброяване на потребители или групи. (Стойност 0 изключва paged LDAP търсения в тези ситуации).", - "Special Attributes" : "Специални Атрибути", - "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 атрибут.", - "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 еквиваленти или ще бъдат просто пренебрегнати. Ако има сблъсъци ще бъде добавено/увеличено число. Вътрешното потребителско име се използва, за да се идентифицира вътрешно потребителя. То е и директорията по подразбиране на потребителя. Също така е част от отдалечените URL-и, на пример за всички *DAV услуги. С тази настройка може да бъде променено всичко това. За да постигнеш подобно държание на това, което беше в ownCloud 5 въведи съдържанието на user display name атрибутът тук. Остави го празно да се държи, както по подразбиране. Промените ще се отразят само на новодобавени(map-нати) 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." : "По подразбиране, UUID атрибутът ще бъде автоматично намерен. UUID се използва, за да се идентифицират еднозначно LDAP потребители и групи. Също така, вътрешното име ще бъде генерирано базирано на UUID, ако такова не е посочено по-горе. Можеш да промениш тази настройка и да използваш атрибут по свой избор. Трябва да се увериш, че атрибутът, който си избрал може да бъде проверен, както за потребителите така и за групите, и да е уникален. Промените ще се отразят само на новодобавени(map-нати) LDAP потребители.", - "UUID Attribute for Users:" : "UUID Атрибут за Потребителите:", - "UUID Attribute for Groups:" : "UUID Атрибут за Групите:", - "Username-LDAP User Mapping" : "Username-LDAP User Mapping", - "Clear Username-LDAP User Mapping" : "Изчисти Username-LDAP User Mapping", - "Clear Groupname-LDAP Group Mapping" : "Изчисти Groupname-LDAP Group Mapping" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/bn_BD.js b/apps/user_ldap/l10n/bn_BD.js deleted file mode 100644 index c74a22160e6..00000000000 --- a/apps/user_ldap/l10n/bn_BD.js +++ /dev/null @@ -1,80 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "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." : "কনফিগারেশনটি বৈধ তবে Bind ব্যার্থ। দয়া করে সার্ভার নিয়ামকসমূহ এবং ব্যবহারকারী পরীক্ষা করুন।", - "The configuration is invalid. Please have a look at the logs for further details." : "কনফিহারেশনটি অবৈধ। বিস্তারিত জানতে দয়া করে লগ দেখুন।", - "No action specified" : "কোন কার্যাদেশ সুনির্দিষ্ট নয়", - "No configuration specified" : " কোন কনফিগারেসন সুনির্দিষ্ট নয়", - "No data specified" : "কোন ডাটা সুনির্দিষ্ট নয়", - " Could not set configuration %s" : "%s কনফিগারেসন ঠিক করা গেল না", - "Configuration incorrect" : "ভুল কনফিগারেসন", - "Configuration incomplete" : "অসম্পূর্ণ কনফিগারেসন", - "Configuration OK" : "কনফিগারেসন ঠিক আছে", - "Select groups" : "গ্রুপ নির্ধারণ", - "Select object classes" : "অবজেক্ট ক্লাস নির্ধারণ", - "{nthServer}. Server" : "{nthServer}. সার্ভার", - "Do you really want to delete the current Server Configuration?" : "আপনি কি সত্যিই চলতি সার্ভার কনফিগারেসন মুছতে চান?", - "Confirm Deletion" : "মোছার আদেশ নিশ্চিত করুন", - "Select attributes" : "বৈশিষ্ট্য নির্ধারণ", - "_%s group found_::_%s groups found_" : ["%s গ্রুপ পাওয়া গেছে","%s গ্রুপ পাওয়া গেছে"], - "_%s user found_::_%s users found_" : ["%s ব্যাবহারকারী পাওয়া গেছে","%s ব্যাবহারকারী পাওয়া গেছে"], - "Could not find the desired feature" : "চাহিদামাফিক ফিচারটি পাওয়া গেলনা", - "Invalid Host" : "অবৈধ হোস্ট", - "Server" : "সার্ভার", - "Users" : "ব্যবহারকারী", - "Groups" : "গোষ্ঠীসমূহ", - "Test Configuration" : "পরীক্ষামূলক কনফিগারেসন", - "Help" : "সহায়িকা", - "Groups meeting these criteria are available in %s:" : "প্রদত্ত বৈশিষ্ট্য অনুযায়ী %s এ প্রাপ্তব্য গ্রুপসমূহ:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "ফিল্টারটি %s সার্ভারে কোন কোন LDAP গ্রুপ প্রবেশাধিকার পাবে তা নির্ধারণ করে।", - "Other Attributes:" : "অন্যান্য বৈশিষ্ট্য:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "প্রবেশ প্রচেষ্টা নিলে প্রযোজ্য ফিল্টার নির্ধারণ করে। প্রবেশকালে %%uid ব্যাবহারকারীর নামকে প্রতিস্থাপন করে। ঊদাহরণ: \"uid=%%uid\"", - "1. Server" : "1. সার্ভার", - "%s. Server:" : "%s. সার্ভার:", - "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." : "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. পরিচয় গোপন রেখে অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।", - "Password" : "কূটশব্দ", - "For anonymous access, leave DN and Password empty." : "অজ্ঞাতকুলশীল অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।", - "One Base DN per line" : "লাইনপ্রতি একটি Base DN", - "You can specify Base DN for users and groups in the Advanced tab" : "সুচারু ট্যঅবে গিয়ে আপনি ব্যবহারকারি এবং গোষ্ঠীসমূহের জন্য ভিত্তি DN নির্ধারণ করতে পারেন।", - "The filter specifies which LDAP users shall have access to the %s instance." : "এই ফিল্টারটি কোন কোন LDAP ব্যবহারকারী %s সার্ভারে প্রবেশ করবেন তা বাছাই করে।", - "Back" : "পেছনে যাও", - "Continue" : "চালিয়ে যাও", - "Expert" : "দক্ষ", - "Advanced" : "সুচারু", - "<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>Warning:</b> Apps user_ldap and 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>Warning:</b> PHP LDAP মডিউল ইনস্টল করা নেই, ব্যাকএন্ড কাজ করবেনা। সিস্টেম প্রশাসককে এটি ইনস্টল করতে বলুন।", - "Connection Settings" : "সংযোগ নিয়ামকসমূহ", - "Configuration Active" : "কনফিগারেসন সক্রিয়", - "When unchecked, this configuration will be skipped." : "চেকমার্ক তুলে দিলে কনফিগারেসন এড়িয়ে যাবে।", - "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." : "শুধুমাত্র নকল সার্ভারে সংযোগ দাও।", - "Turn off SSL certificate validation." : "SSL সনদপত্র যাচাইকরণ বন্ধ রাক।", - "Cache Time-To-Live" : "ক্যাশে টাইম-টু-লিভ", - "in seconds. A change empties the cache." : "সেকেন্ডে। কোন পরিবর্তন ক্যাসে খালি করবে।", - "Directory Settings" : "ডিরেক্টরি নিয়ামকসমূহ", - "User Display Name Field" : "ব্যবহারকারীর প্রদর্শিতব্য নামের ক্ষেত্র", - "The LDAP attribute to use to generate the user's display name." : "ব্যবহারকারীর প্রদর্শনীয় নাম তৈরি করার জন্য ব্যবহৃত LDAP বৈশিষ্ট্য।", - "Base User Tree" : "ভিত্তি ব্যবহারকারি বৃক্ষাকারে", - "Group Display Name Field" : "গোষ্ঠীর প্রদর্শিতব্য নামের ক্ষেত্র", - "Base Group Tree" : "ভিত্তি গোষ্ঠী বৃক্ষাকারে", - "Group Search Attributes" : "গ্রুপ খোঁজার বৈশিষ্ট্য", - "Group-Member association" : "গোষ্ঠী-সদস্য সংস্থাপন", - "Nested Groups" : "একতাবদ্ধ গোষ্ঠিসমূহ", - "Special Attributes" : "বিশেষ বৈশিষ্ট্যসমূহ", - "Quota Field" : "কোটা", - "Quota Default" : "পূর্বনির্ধারিত কোটা", - "in bytes" : "বাইটে", - "Email Field" : "ইমেইল ক্ষেত্র", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "ব্যবহারকারী নামের জন্য ফাঁকা রাখুন (পূর্বনির্ধারিত)। অন্যথায়, LDAP/AD বৈশিষ্ট্য নির্ধারণ করুন।" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/bn_BD.json b/apps/user_ldap/l10n/bn_BD.json deleted file mode 100644 index 68883909add..00000000000 --- a/apps/user_ldap/l10n/bn_BD.json +++ /dev/null @@ -1,78 +0,0 @@ -{ "translations": { - "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." : "কনফিগারেশনটি বৈধ তবে Bind ব্যার্থ। দয়া করে সার্ভার নিয়ামকসমূহ এবং ব্যবহারকারী পরীক্ষা করুন।", - "The configuration is invalid. Please have a look at the logs for further details." : "কনফিহারেশনটি অবৈধ। বিস্তারিত জানতে দয়া করে লগ দেখুন।", - "No action specified" : "কোন কার্যাদেশ সুনির্দিষ্ট নয়", - "No configuration specified" : " কোন কনফিগারেসন সুনির্দিষ্ট নয়", - "No data specified" : "কোন ডাটা সুনির্দিষ্ট নয়", - " Could not set configuration %s" : "%s কনফিগারেসন ঠিক করা গেল না", - "Configuration incorrect" : "ভুল কনফিগারেসন", - "Configuration incomplete" : "অসম্পূর্ণ কনফিগারেসন", - "Configuration OK" : "কনফিগারেসন ঠিক আছে", - "Select groups" : "গ্রুপ নির্ধারণ", - "Select object classes" : "অবজেক্ট ক্লাস নির্ধারণ", - "{nthServer}. Server" : "{nthServer}. সার্ভার", - "Do you really want to delete the current Server Configuration?" : "আপনি কি সত্যিই চলতি সার্ভার কনফিগারেসন মুছতে চান?", - "Confirm Deletion" : "মোছার আদেশ নিশ্চিত করুন", - "Select attributes" : "বৈশিষ্ট্য নির্ধারণ", - "_%s group found_::_%s groups found_" : ["%s গ্রুপ পাওয়া গেছে","%s গ্রুপ পাওয়া গেছে"], - "_%s user found_::_%s users found_" : ["%s ব্যাবহারকারী পাওয়া গেছে","%s ব্যাবহারকারী পাওয়া গেছে"], - "Could not find the desired feature" : "চাহিদামাফিক ফিচারটি পাওয়া গেলনা", - "Invalid Host" : "অবৈধ হোস্ট", - "Server" : "সার্ভার", - "Users" : "ব্যবহারকারী", - "Groups" : "গোষ্ঠীসমূহ", - "Test Configuration" : "পরীক্ষামূলক কনফিগারেসন", - "Help" : "সহায়িকা", - "Groups meeting these criteria are available in %s:" : "প্রদত্ত বৈশিষ্ট্য অনুযায়ী %s এ প্রাপ্তব্য গ্রুপসমূহ:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "ফিল্টারটি %s সার্ভারে কোন কোন LDAP গ্রুপ প্রবেশাধিকার পাবে তা নির্ধারণ করে।", - "Other Attributes:" : "অন্যান্য বৈশিষ্ট্য:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "প্রবেশ প্রচেষ্টা নিলে প্রযোজ্য ফিল্টার নির্ধারণ করে। প্রবেশকালে %%uid ব্যাবহারকারীর নামকে প্রতিস্থাপন করে। ঊদাহরণ: \"uid=%%uid\"", - "1. Server" : "1. সার্ভার", - "%s. Server:" : "%s. সার্ভার:", - "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." : "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. পরিচয় গোপন রেখে অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।", - "Password" : "কূটশব্দ", - "For anonymous access, leave DN and Password empty." : "অজ্ঞাতকুলশীল অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।", - "One Base DN per line" : "লাইনপ্রতি একটি Base DN", - "You can specify Base DN for users and groups in the Advanced tab" : "সুচারু ট্যঅবে গিয়ে আপনি ব্যবহারকারি এবং গোষ্ঠীসমূহের জন্য ভিত্তি DN নির্ধারণ করতে পারেন।", - "The filter specifies which LDAP users shall have access to the %s instance." : "এই ফিল্টারটি কোন কোন LDAP ব্যবহারকারী %s সার্ভারে প্রবেশ করবেন তা বাছাই করে।", - "Back" : "পেছনে যাও", - "Continue" : "চালিয়ে যাও", - "Expert" : "দক্ষ", - "Advanced" : "সুচারু", - "<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>Warning:</b> Apps user_ldap and 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>Warning:</b> PHP LDAP মডিউল ইনস্টল করা নেই, ব্যাকএন্ড কাজ করবেনা। সিস্টেম প্রশাসককে এটি ইনস্টল করতে বলুন।", - "Connection Settings" : "সংযোগ নিয়ামকসমূহ", - "Configuration Active" : "কনফিগারেসন সক্রিয়", - "When unchecked, this configuration will be skipped." : "চেকমার্ক তুলে দিলে কনফিগারেসন এড়িয়ে যাবে।", - "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." : "শুধুমাত্র নকল সার্ভারে সংযোগ দাও।", - "Turn off SSL certificate validation." : "SSL সনদপত্র যাচাইকরণ বন্ধ রাক।", - "Cache Time-To-Live" : "ক্যাশে টাইম-টু-লিভ", - "in seconds. A change empties the cache." : "সেকেন্ডে। কোন পরিবর্তন ক্যাসে খালি করবে।", - "Directory Settings" : "ডিরেক্টরি নিয়ামকসমূহ", - "User Display Name Field" : "ব্যবহারকারীর প্রদর্শিতব্য নামের ক্ষেত্র", - "The LDAP attribute to use to generate the user's display name." : "ব্যবহারকারীর প্রদর্শনীয় নাম তৈরি করার জন্য ব্যবহৃত LDAP বৈশিষ্ট্য।", - "Base User Tree" : "ভিত্তি ব্যবহারকারি বৃক্ষাকারে", - "Group Display Name Field" : "গোষ্ঠীর প্রদর্শিতব্য নামের ক্ষেত্র", - "Base Group Tree" : "ভিত্তি গোষ্ঠী বৃক্ষাকারে", - "Group Search Attributes" : "গ্রুপ খোঁজার বৈশিষ্ট্য", - "Group-Member association" : "গোষ্ঠী-সদস্য সংস্থাপন", - "Nested Groups" : "একতাবদ্ধ গোষ্ঠিসমূহ", - "Special Attributes" : "বিশেষ বৈশিষ্ট্যসমূহ", - "Quota Field" : "কোটা", - "Quota Default" : "পূর্বনির্ধারিত কোটা", - "in bytes" : "বাইটে", - "Email Field" : "ইমেইল ক্ষেত্র", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "ব্যবহারকারী নামের জন্য ফাঁকা রাখুন (পূর্বনির্ধারিত)। অন্যথায়, LDAP/AD বৈশিষ্ট্য নির্ধারণ করুন।" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/bn_IN.js b/apps/user_ldap/l10n/bn_IN.js deleted file mode 100644 index c0e75c83618..00000000000 --- a/apps/user_ldap/l10n/bn_IN.js +++ /dev/null @@ -1,6 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Host" : "হোস্ট" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/bn_IN.json b/apps/user_ldap/l10n/bn_IN.json deleted file mode 100644 index e80623a1235..00000000000 --- a/apps/user_ldap/l10n/bn_IN.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "translations": { - "Host" : "হোস্ট" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/bs.js b/apps/user_ldap/l10n/bs.js deleted file mode 100644 index a30255595fe..00000000000 --- a/apps/user_ldap/l10n/bs.js +++ /dev/null @@ -1,12 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "Korisnici", - "Groups" : "Grupe", - "Help" : "Pomoć", - "Port" : "Priključak", - "Password" : "Lozinka", - "Continue" : "Nastavi", - "Advanced" : "Napredno" -}, -"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/bs.json b/apps/user_ldap/l10n/bs.json deleted file mode 100644 index 3172f54cf89..00000000000 --- a/apps/user_ldap/l10n/bs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "translations": { - "Users" : "Korisnici", - "Groups" : "Grupe", - "Help" : "Pomoć", - "Port" : "Priključak", - "Password" : "Lozinka", - "Continue" : "Nastavi", - "Advanced" : "Napredno" -},"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/user_ldap/l10n/ca.js b/apps/user_ldap/l10n/ca.js index 7b71e99ca6d..f19ed3d3ef5 100644 --- a/apps/user_ldap/l10n/ca.js +++ b/apps/user_ldap/l10n/ca.js @@ -2,24 +2,25 @@ OC.L10N.register( "user_ldap", { "Failed to clear the mappings." : "No s’han pogut netejar les assignacions.", - "Failed to delete the server configuration" : "No s'han pogut suprimir els paràmetres del servidor", + "Failed to delete the server configuration" : "No s'han pogut suprimir la configuració del servidor", "Invalid configuration: Anonymous binding is not allowed." : "Configuració no vàlida: no es permet l'enllaç anònim.", "Valid configuration, connection established!" : "Configuració vàlida, connexió establerta!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuració vàlida, però no s'ha pogut enllaçar. Comproveu la configuració del servidor i les credencials.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuració no vàlida. Feu un cop d'ull als registres per obtenir més informació.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuració vàlida, però no s'ha pogut enllaçar. Comproveu els paràmetres del servidor i les credencials.", + "Invalid configuration: %s" : "Configuració no vàlida: %s", "No action specified" : "No heu especificat cap acció", "No configuration specified" : "No heu especificat cap configuració", "No data specified" : "No heu especificat cap dada", - " Could not set configuration %s" : "No s'ha pogut establir la configuració %s", + "Invalid data specified" : "Les dades especificades no són vàlides", + "Could not set configuration %1$s to %2$s" : "No s'ha pogut establir la configuració %1$s a %2$s", "Action does not exist" : "L'acció no existeix", - "Renewing …" : "Renovant ...", + "Renewing …" : "Renovant …", "Very weak password" : "Contrasenya massa feble", "Weak password" : "Contrasenya feble", "So-so password" : "Contrasenya passable", "Good password" : "Contrasenya bona", "Strong password" : "Contrasenya forta", "The Base DN appears to be wrong" : "El DN de base sembla estar equivocat", - "Testing configuration…" : "Probant configuració...", + "Testing configuration…" : "Probant configuració…", "Configuration incorrect" : "Configuració incorrecte", "Configuration incomplete" : "Configuració incompleta", "Configuration OK" : "Configuració correcte", @@ -27,45 +28,61 @@ OC.L10N.register( "Select object classes" : "Seleccioneu les classes dels objectes", "Please check the credentials, they seem to be wrong." : "Comproveu les credencials, semblen estar equivocades.", "Please specify the port, it could not be auto-detected." : "Especifiqueu el port, no s'ha pogut detectar automàticament.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN no es pot detectar automàticament, reviseu les credencials, l'amfitrió i el port.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN no es pot detectar automàticament, reviseu les credencials, el servidor i el port.", "Could not detect Base DN, please enter it manually." : "No s'ha pogut detectar Base DN, introduïu-lo manualment.", "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No s'ha trobat cap objecte a la Base DN donada. Reviseu.", - "More than 1,000 directory entries available." : "Hi ha més de 1.000 entrades de directoris disponibles.", + "More than 1,000 directory entries available." : "Hi ha més de 1.000 entrades de directori disponibles.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Hi ha {objectsFound} entrades disponibles al DN de base proporcionat","Hi ha {objectsFound} entrades disponibles al DN de base proporcionat"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hi ha hagut un error. Comproveu la base DN, així com la configuració de connexió i les credencials.", - "Do you really want to delete the current Server Configuration?" : "Segur que voleu suprimir els paràmetres actuals del servidor?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hi ha hagut un error. Comproveu la base DN, així com la paràmetres de connexió i les credencials.", + "Do you really want to delete the current Server Configuration?" : "Segur que voleu suprimir la Configuració actual del Servidor?", "Confirm Deletion" : "Confirma l'eliminació", "Mappings cleared successfully!" : "S'han netejat les assignacions amb èxit!", "Error while clearing the mappings." : "S'ha produït un error en eliminar les assignacions.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "L'enllaç anònim no està permès. Proporcioneu un DN d'usuari i contrasenya.", "LDAP Operations error. Anonymous bind might not be allowed." : "Error d'operacions LDAP. L'enllaç anònim no es pot permetre.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "S'ha produït un error en desar. Assegureu-vos que la base de dades està en Operació. Torneu a carregar abans de continuar.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Si canvieu el mode, activareu les consultes LDAP automàtiques. Depenent de la vostra mida LDAP, poden trigar una estona. Voleu canviar el mode?", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Si canvieu el mode, habilitareu les consultes LDAP automàtiques. Depenent de la vostra mida LDAP, poden trigar una estona. Voleu canviar el mode?", "Mode switch" : "Canvia el mode", "Select attributes" : "Seleccioneu els atributs", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuari no trobat. Comproveu els vostres atributs d'inici de sessió i el vostre nom d'usuari. Filtre eficaç (per copiar i enganxar per a la validació de la línia de comandaments):<br/>", - "User found and settings verified." : "S'ha trobat l'usuari i s'ha verificat la configuració.", + "User found and settings verified." : "S'ha trobat l'usuari i s'han verificat els paràmetres.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Penseu a reduir la vostra cerca, ja que ha inclòs molts usuaris, només el primer dels quals podrà iniciar sessió.", - "An unspecified error occurred. Please check log and settings." : "S'ha produït un error no especificat. Verifiqueu el registre i la configuració.", + "An unspecified error occurred. Please check log and settings." : "S'ha produït un error no especificat. Verifiqueu el registre i els paràmetres.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtre de cerca no és vàlid, probablement a causa de problemes de sintaxi com el nombre impar de parèntesis oberts i tancats. Reviseu.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "S'ha produït un error de connexió a LDAP / AD, consulteu l'amfitrió, el port i les credencials.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el text variable \"%u id\". Es reemplaçarà amb el nom d'usuari quan consulteu LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "S'ha produït un error de connexió a LDAP/AD. Comproveu el servidor, el port i les credencials.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posició \"%uid\". Se substituirà pel nom d'inici de sessió en consultar LDAP/AD.", "Please provide a login name to test against" : "Proporcioneu un nom d'inici de sessió per provar-ho", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El quadre del grup s'ha desactivat, perquè el servidor LDAP / AD no admet memberOf.", - "Password change rejected. Hint: " : "El canvi de contrasenya s'ha rebutjat. Pista:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El quadre de grup s'ha desactivat perquè el servidor LDAP/AD no admet memberOf.", + "Password change rejected. Hint: %s" : "S'ha rebutjat el canvi de contrasenya. Pista: %s", + "Mandatory field \"%s\" left empty" : "El camp obligatori \"%s\" s'ha deixat buit", + "A password is given, but not an LDAP agent" : "Es dóna una contrasenya, però no un agent LDAP", + "No password is given for the user agent" : "No es dóna cap contrasenya per a l'agent d'usuari", + "No LDAP base DN was given" : "No s'ha donat cap DN base LDAP", + "User base DN is not a subnode of global base DN" : "El DN base d'usuari no és un subnode del DN base global", + "Group base DN is not a subnode of global base DN" : "El DN base del grup no és un subnode del DN base global", "Please login with the new password" : "Inicieu sessió amb la nova contrasenya", "LDAP User backend" : "Rerefons d'usuari LDAP", "Your password will expire tomorrow." : "La contrasenya caducarà demà.", "Your password will expire today." : "La contrasenya caducarà avui.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La vostra contrasenya expirarà en %n dies.","La vostra contrasenya expirarà d'aquí %n dies."], - "LDAP / AD integration" : "Integració LDAP / AD", - "_%s group found_::_%s groups found_" : ["S'ha trobat %s grup","S'han trobat %s grups"], - "_%s user found_::_%s users found_" : ["S'ha trobat %s usuari","S'han trobat %s usuaris"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No s'ha pogut detectar l'atribut del nom de visualització de l'usuari. Si us plau, especifiqueu-vos a la configuració LDAP avançada.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La vostra contrasenya expirarà en %n dies.","La vostra contrasenya caducarà d'aquí %n dies."], + "LDAP/AD integration" : "Integració LDAP/AD", + "LDAP Connection" : "Connexió LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Ha fallat l'enllaç per a aquesta configuració LDAP: %s","Ha fallat l'enllaç per %n configuracions LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["No s'ha pogut cercar aquesta configuració LDAP: %s"," No s’han pogut cercar %n configuracions LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Hi ha una configuració LDAP inactiva: %s","Hi han %n configuracions LDAP inactives: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["L'enllaç i la cerca funciona a la connexió LDAP configurada (%s)","L’enllaç i la cerca funciona a totes les %n connexions LDAP configurades (%s)"], + "Invalid LDAP UUIDs" : "UUID no vàlid", + "None found" : "No s'ha trobat cap", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "S'han trobat UUID no vàlids de comptes o grups LDAP. Reviseu el vostre paràmetre d'\"Anul·lació de la detecció d'UUID\" a la part Expert de la configuració LDAP i utilitzeu \"occ ldap:update-uuid\" per actualitzar-los.", + "_%n group found_::_%n groups found_" : ["S'ha trobat %n grup","S’han trobat %n grups"], + "> 1000 groups found" : "> 1000 grups trobats", + "> 1000 users found" : "> 1000 usuaris trobats", + "_%n user found_::_%n users found_" : ["S'ha trobat %n usuari","S’han trobat %n usuaris"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No s'ha pogut detectar l'atribut del nom de visualització de l'usuari. Si us plau, especifiqueu-vos als paràmetres de LDAP avançats.", "Could not find the desired feature" : "La característica desitjada no s'ha trobat", - "Invalid Host" : "Ordinador central no vàlid", - "LDAP user and group backend" : "Usuari LDAP i grup de suport", + "Invalid Host" : "Servidor no vàlid", + "LDAP user and group backend" : "Usuari LDAP i grup de rerefons", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aquesta aplicació permet als administradors connectar Nextcloud a un directori d'usuari basat en LDAP.", "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aquest aplicació permet als administradors connectar Nextcloud a un directori LDAP per autenticació i subministrament d'usuaris, grups i atributs d'usuari. Els administradors poden configurar aquesta aplicació per connectar a un o més directoris LDAP o ActiveDirectories (AD) a través de la interfície LDAP. Amb les consultes i filtres adequats es poden extreure i importar a Nextcloud atributs d'usuari com la quota, adreça de correu, avatar, pertinença a grups i més.\n\nUn usuari accedeix a Nextcloud amb les seves credencials LDAP o AD, i rep accés gràcies a l'autenticació gestionada pel servidor LDAP / AD. Nextcloud en cap moment emmagatzema la contrasenya LDAP o AD, ans al contrari, un cop l'usuari s'ha identificat correctament Nextcloud emprarà variables de sessió per desar només el ID de l'usuari. Podeu trobar més informació a la documentació sobre gestió d'usuaris i grups LDAP.", "Test Configuration" : "Comprovació de la configuració", @@ -76,24 +93,25 @@ OC.L10N.register( "Search groups" : "Buscar grups", "Available groups" : "Grups disponibles", "Selected groups" : "Grups seleccionats", - "Edit LDAP Query" : "Editeu la consulta LDAP", + "Edit LDAP Query" : "Edició de la consulta LDAP", "LDAP Filter:" : "Filtre LDAP:", "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtre especifica quins grups LDAP haurien de tenir accés a la instància %s.", - "Verify settings and count the groups" : "Comprova la configuració i compta els grups", - "When logging in, %s will find the user based on the following attributes:" : "Quan s'accedeixi, %s cercarà l'usuari segons aquests atributs:", - "LDAP / AD Username:" : "Usuari LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permet l'inici de sessió emprant el nom d'usuari LDAP / AD, que és \"uid\" o bé \"sAMAccountName\" i serà detectat.", - "LDAP / AD Email Address:" : "Adreça de correu LDAP / AD:", + "Verify settings and count the groups" : "Comprova els paràmetres i compta els grups", + "When logging in, %s will find the user based on the following attributes:" : "Quan s'accedeixi, %s trobarà l'usuari segons aquests atributs:", + "LDAP/AD Username:" : "Nom d'usuari LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permet inici de sessió amb el nom d'usuari LDAP/AD, que és \"uid\" o \"sAMAccountName\" i es detectarà.", + "LDAP/AD Email Address:" : "Adreça de correu electrònic LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permet l'inici de sessió emprant l'atribut adreça de correu. S'accepten \"mail\" i \"mailPrimaryAddress\" .", "Other Attributes:" : "Altres atributs:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defineix el filtre a aplicar quan s'inicia sessió. \"%%uid\" reemplaça el nom d'usuari en l'acció d'identificar-se. Exemple \"uid=%%uid\"", "Test Loginname" : "Nom d'usuari de prova", - "Verify settings" : "Comprova la configuració", + "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta rebre un DN per al nom d'inici de sessió donat i el filtre d'inici de sessió actual", + "Verify settings" : "Comprova els paràmetres", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Afegeix una nova configuració", - "Copy current configuration into new directory binding" : "Copia l'actual configuració en la nova connexió", - "Delete the current configuration" : "Esborra la configuració actual", - "Host" : "Equip remot", + "Copy current configuration into new directory binding" : "Copia l'actual configuració en la nova connexió al directori", + "Delete the current configuration" : "Suprimeix la configuració actual", + "Host" : "Servidor", "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Podeu ometre el protocol, si no requeriu SSL. Si ho requeriu llavors comenceu amb ldaps://", "Port" : "Port", "Detect Port" : "Detecta port", @@ -108,16 +126,16 @@ OC.L10N.register( "Test Base DN" : "Prova el DN de base", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticions LDAP automàtiques. És millor per configuracions grans, però requereix tenir certs coneixements de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introducció manual de filtres LDAP (recomanat per a directoris grans)", - "Listing and searching for users is constrained by these criteria:" : "La consulta i cerca per part dels usuaris és restringida pels següents criteris:", + "Listing and searching for users is constrained by these criteria:" : "Llistat i cerca per part dels usuaris és restringida pels següents criteris:", "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." : "Las classes d'objectes més comunes pels usuaris són organizationalPerson, person, user, i inetOrgPerson. Si no esteu segurs de quina classe d'objecte escollir llavors consulteu el vostre administrador de directori.", - "The filter specifies which LDAP users shall have access to the %s instance." : "El filtre especifica quins usuaris LDAP haurien de tenir accés a la instància %s", - "Verify settings and count users" : "Verifica configuracions i compta usuaris", - "Saving" : "Desant...", + "The filter specifies which LDAP users shall have access to the %s instance." : "El filtre especifica quins usuaris LDAP haurien de tenir accés a la instància %s.", + "Verify settings and count users" : "Verifica paràmetres i compta usuaris", + "Saving" : "S'està desant", "Back" : "Enrere", "Continue" : "Continua", "Please renew your password." : "Heu de renovar la vostra contrasenya.", "An internal error occurred." : "Hi ha hagut un error intern inesperat.", - "Please try again or contact your administrator." : "Proveu un altre cop o contacteu al vostre administrador.", + "Please try again or contact your administrator." : "Torneu-ho a provar o contacteu al vostre administrador.", "Current password" : "Contrasenya actual", "New password" : "Nova contrasenya", "Renew password" : "Renova la contrasenya", @@ -125,70 +143,96 @@ OC.L10N.register( "Cancel" : "Cancel·la", "Server" : "Servidor", "Users" : "Usuaris", - "Login Attributes" : "Atributs d'accés", + "Login Attributes" : "Atributs d'inici de sessió", "Groups" : "Grups", "Expert" : "Expert", "Advanced" : "Avançat", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avís:</b> El mòdul PHP LDAP no està instal·lat, el dorsal no funcionarà. Demaneu a l'administrador del sistema que l'instal·li.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avís:</b> El mòdul PHP LDAP no està instal·lat, el rerefons no funcionarà. Demaneu a l'administrador del sistema que l'instal·li.", "Connection Settings" : "Paràmetres de connexió", "Configuration Active" : "Configuració activa", "When unchecked, this configuration will be skipped." : "Si està desmarcat, aquesta configuració s'ometrà.", - "Backup (Replica) Host" : "Màquina de còpia de serguretat (rèplica)", + "Backup (Replica) Host" : "Servidor de còpia de seguretat (rèplica)", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Afegiu una màquina de còpia de seguretat opcional. Ha de ser una rèplica del servidor LDAP/AD principal.", "Backup (Replica) Port" : "Port de la còpia de seguretat (rèplica)", - "Disable Main Server" : "Desactiva el servidor principal", + "Disable Main Server" : "Inhabilita el servidor principal", "Only connect to the replica server." : "Connecta només al servidor rèplica.", "Turn off SSL certificate validation." : "Desactiva la validació de certificat 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." : "No es recomana, useu-ho només com a prova! Importeu el certificat SSL del servidor LDAP al servidor %s només si la connexió funciona amb aquesta opció.", "Cache Time-To-Live" : "Memòria cau Time-To-Live", "in seconds. A change empties the cache." : "en segons. Un canvi buidarà la memòria cau.", - "Directory Settings" : "Configuracio de carpetes", + "Directory Settings" : "Paràmetres de carpetes", "User Display Name Field" : "Camp per mostrar el nom d'usuari", "The LDAP attribute to use to generate the user's display name." : "Atribut LDAP a usar per generar el nom a mostrar de l'usuari.", "2nd User Display Name Field" : "Camp del 2n nom d'usuari a mostrar", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atribut LDAP per ser afegit al nom a mostrar entre parèntesis. Esdevé en quelcom així: »Oriol Junqueras (oriol.junqueras@exemple.cat)«.", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atribut LDAP per ser afegit al nom a mostrar entre parèntesis. Esdevé en quelcom així: »Oriol Mas (oriol.mas@exemple.cat)«.", "Base User Tree" : "Arbre base d'usuaris", "One User Base DN per line" : "Una DN Base d'Usuari per línia", "User Search Attributes" : "Atributs de cerca d'usuari", "Optional; one attribute per line" : "Opcional; Un atribut per línia", + "Disable users missing from LDAP" : "Inhabilita els usuaris que falten a LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quan estigui activat, es desactivaran els usuaris importats des de LDAP que després faltin", "Group Display Name Field" : "Camp per mostrar el nom del grup", "The LDAP attribute to use to generate the groups's display name." : "Atribut LDAP a usar per generar el nom a mostrar del grup.", "Base Group Tree" : "Arbre base de grups", "One Group Base DN per line" : "Una DN Base de Grup per línia", "Group Search Attributes" : "Atributs de cerca de grup", "Group-Member association" : "Associació membres-grup", - "Dynamic Group Member URL" : "URL del Dynamic Group Member", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atribut LDAP que en objectes de Grup conté un URL de cerca LDAP que determina quins objectes pertanyen al grup. (Si es deixa en blanc es desactiva la funcionalitat de pertinença dinàmica a grups)", + "Dynamic Group Member URL" : "URL del Membre de Grup Dinàmic", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atribut LDAP que en objectes de Grup conté un URL de cerca LDAP que determina quins objectes pertanyen al grup. (Si es deixa el paràmetre en blanc es desactiva la funcionalitat de pertinença dinàmica a grups)", "Nested Groups" : "Grups imbricats", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quan està activat, els grups que contenen grups estan permesos. (Només funciona si l'atribut del grup membre conté DNs.)", "Paging chunksize" : "Mida de la pàgina", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Mida usada per cerques LDAP paginades que podrien retornar respostes de volcat com enumeració d'usuari o grup. (Establint-ho a 0 desactiva les cerques LDAP paginades en aquestes situacions.)", - "Enable LDAP password changes per user" : "Activa el canvi de contrasenya LDAP pels usuaris", + "Enable LDAP password changes per user" : "Habilita el canvi de contrasenya LDAP pels usuaris", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permet als usuaris LDAP canviar la seva contrasenya i permet als Súper administradors i Administradors de grup canviar les contrasenyes dels seus usuaris LDAP. Només funciona quan les polítiques del control d'accés es configuren de igual manera al servidor LDAP. Com les contrasenyes s'envien en text pla (no xifrat) al servidor LDAP, s'ha d'usar transport xifrat i s'hauria de configurar el servidor LDAP per usar resum de contrasenyes (\"hashing\").", "(New password is sent as plain text to LDAP)" : "(La nova contrasenya s'envia com a text pla al servidor LDAP)", - "Default password policy DN" : "DN de la política de contrasenya predeterminada", - "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN d'una política de contrasenya predeterminada que serà emprada per a la gestió de la caducitat de contrasenyes. Només funciona quan està activat el canvi de contrasenyes per part dels usuaris i només és compatible amb OpenLDAP. Deixeu buit aquest camp per desactivar aquesta gestió de contrasenyes caducades.", + "Default password policy DN" : "DN de la política de contrasenya per defecte", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN d'una política de contrasenya predeterminada que serà emprada per a la gestió de la caducitat de contrasenyes. Només funciona quan està habilitat el canvi de contrasenyes per part dels usuaris i només és compatible amb OpenLDAP. Deixeu buit aquest camp per desactivar aquesta gestió de contrasenyes caducades.", "Special Attributes" : "Atributs especials", "Quota Field" : "Camp de quota", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixeu buit per usar la quota predeterminada pels usuaris, O si no, indiqueu un atribut LDAP/AD.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixeu buit per usar la quota per defecte pels usuaris, O si no, indiqueu un atribut LDAP/AD.", "Quota Default" : "Quota per defecte", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobreescriu la quota predeterminada pels usuaris LDAP que no tenen una quota establerta en el camp Quota.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobreescriu la quota per defecte pels usuaris LDAP que no tenen una quota establerta en el camp Quota.", "Email Field" : "Camp de correu electrònic", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Estableix l'adreça de correu a partir del seu atribut LDAP. Deixeu buit pel comportament predeterminat.", "User Home Folder Naming Rule" : "Norma per anomenar la carpeta arrel d'usuari", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar buit pel nom d'usuari (per defecte). Altrament, especificar un atribut LDAP/AD.", - "\"$home\" Placeholder Field" : "Camp de text variable per \"$home\" ", + "\"$home\" Placeholder Field" : "Camp de marcador de posició \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "En la configuració d'un emmagatzematge extern es reemplaçarà $home amb el valor de l'atribut especificat", + "User Profile Attributes" : "Atributs del perfil d'usuari", + "Phone Field" : "Camp de telèfon", + "User profile Phone will be set from the specified attribute" : "Perfil d'usuari El telèfon s'establirà a partir de l'atribut especificat", + "Website Field" : "Camp del lloc web", + "User profile Website will be set from the specified attribute" : "Perfil d'usuari Lloc web s'establirà a partir de l'atribut especificat", + "Address Field" : "Camp d’adreça", + "User profile Address will be set from the specified attribute" : "Perfil d'usuari L'adreça s'establirà a partir de l'atribut especificat", + "Twitter Field" : "Camp de Twitter", + "User profile Twitter will be set from the specified attribute" : "El perfil d'usuari de Twitter s'establirà a partir de l'atribut especificat", + "Fediverse Field" : "Camp Fediverse", + "User profile Fediverse will be set from the specified attribute" : "El perfil d'usuari Fediverse s'establirà a partir de l'atribut especificat", + "Organisation Field" : "Camp de l'organització", + "User profile Organisation will be set from the specified attribute" : "Organització del Perfil d'usuari s'establirà a partir de l'atribut especificat", + "Role Field" : "Camp de rol", + "User profile Role will be set from the specified attribute" : "El rol del perfil d'usuari s'establirà a partir de l'atribut especificat", + "Headline Field" : "Camp de titular", + "User profile Headline will be set from the specified attribute" : "El títol del perfil d'usuari s'establirà a partir de l'atribut especificat", + "Biography Field" : "Camp de Biografia", + "User profile Biography will be set from the specified attribute" : "La biografia del perfil d'usuari s'establirà a partir de l'atribut especificat", + "Birthdate Field" : "Camp de data de naixement", + "User profile Date of birth will be set from the specified attribute" : "La Data de naixement al perfil d’usuari s'establirà a partir de l'atribut especificat", + "Pronouns Field" : "Camp de pronoms", + "User profile Pronouns will be set from the specified attribute" : "Els pronoms al Perfil d’usuari s’establiran a partir de l'atribut especificat", "Internal Username" : "Nom d'usuari intern", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Per defecte el nom d'usuari intern es crearà a partir de l'atribut UUID. Això assegura que el nom d'usuari sigui únic i que no calgui conversió de caràcters. El nom d'usuari intern té com a restricció que només es permeten aquests caràcters: [ a-zA-Z0-9_.@- ]. Altres caràcters són reemplaçats amb la seva correspondència ASCII o bé s'ometen. Si hi coincidència amb un altre usuari existent llavors s'afegeix o incrementa un número al final. El nom d'usuari intern s'usa per a identificar a un usuari internament. Alhora que és el nom predeterminat per la carpeta de l'usuari. També forma part de URLs per a ús remot, per exemple pels serveis *DAV (webDAV, etc...). Amb aquest atribut, es pot sobreescriure el comportament predeterminat. Deixeu-lo buit per assumir el comportament predeterminat. Els canvis només tindran efecte quan s'afegeixin/assignin nous usuaris LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Per defecte, el nom d'usuari intern es crearà a partir de l'atribut UUID. S'assegura que el nom d'usuari és únic i que els caràcters no s'han de convertir. El nom d'usuari intern té la restricció que només es permeten aquests caràcters: [a-zA-Z0-9_.@-]. Altres caràcters es substitueixen per la seva correspondència ASCII o simplement s'ometen. En les col·lisions, s'afegirà/augmentarà un nombre. El nom d'usuari intern s'utilitza per identificar un usuari internament. També és el nom per defecte de la carpeta d'inici de l'usuari. També forma part dels URL remots, per exemple, per a tots els serveis DAV. Amb aquest paràmetre, es pot anul·lar el comportament per defecte. Els canvis només tindran efecte en els usuaris LDAP (afegits) recentment assignats. Deixeu-lo buit per al comportament per defecte.", "Internal Username Attribute:" : "Atribut nom d'usuari intern:", "Override UUID detection" : "Sobrescriu la detecció 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." : "Per defecte, owncloud autodetecta l'atribut UUID. L'atribut UUID s'utilitza per identificar usuaris i grups de forma indubtable. També el nom d'usuari intern es crearà en base a la UUIS, si no heu especificat res diferent a dalt. Podeu sobreescriure l'arranjament i passar l'atribut que desitgeu. Heu d'assegurar-vos que l'atribut que escolliu pot ser recollit tant pels usuaris com pels grups i que és únic. Deixeu-ho en blanc si preferiu el comportament per defecte. els canvis s'aplicaran als usuaris i grups LDAP mapats de nou (afegits).", + "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." : "Per defecte, owncloud autodetecta l'atribut UUID. L'atribut UUID s'utilitza per identificar usuaris i grups automàticament. També el nom d'usuari intern es crearà en base a la UUID, si no heu especificat res diferent a dalt. Podeu sobreescriure el paràmetre i passar l'atribut que desitgeu. Heu d'assegurar-vos que l'atribut que escolliu pot ser recollit tant pels usuaris com pels grups i que és únic. Deixeu-ho en blanc si preferiu el comportament per defecte. els canvis s'aplicaran als usuaris i grups LDAP mapats de nou (afegits).", "UUID Attribute for Users:" : "Atribut UUID per Usuaris:", "UUID Attribute for Groups:" : "Atribut UUID per Grups:", "Username-LDAP User Mapping" : "Mapatge d'usuari Nom d'usuari-LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Els noms d'usuari son emprats per emmagatzemar i assignar metadades. Per tal d'identificar i reconèixer amb precisió als usuaris, cada usuari LDAP té un nom d'usuari intern. Això requereix una assignació de noms d'usuari interns per a cada un dels usuaris LDAP. Al nom d'usuari creat s'assigna el UUID de l'usuari LDAP. A més el DN es guarda en memòria cau per a reduir la interacció amb LDAP, però no s'utilitza per a identificació. Si el DN canvia, es trobaran els canvis. El nom d'usuari intern s'utilitza arreu. Netejar el mapa d'assignacions deixaria restes per totes bandes. Netejar el mapa d'assignacions no és que sigui sensible a la configuració, sinó que afecta a totes les configuracions LDAP! Mai netegeu el mapa d'assignacions en un entorn de producció, només en escenaris de proves o experimentals.", "Clear Username-LDAP User Mapping" : "Elimina el mapatge d'usuari Nom d'usuari-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Suprimeix el mapatge de grup Nom de grup-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Suprimeix el mapatge de grup Nom de grup-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuració no vàlida. Feu un cop d'ull als registres per obtenir més informació." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ca.json b/apps/user_ldap/l10n/ca.json index 68a00bc65da..86c945a684b 100644 --- a/apps/user_ldap/l10n/ca.json +++ b/apps/user_ldap/l10n/ca.json @@ -1,23 +1,24 @@ { "translations": { "Failed to clear the mappings." : "No s’han pogut netejar les assignacions.", - "Failed to delete the server configuration" : "No s'han pogut suprimir els paràmetres del servidor", + "Failed to delete the server configuration" : "No s'han pogut suprimir la configuració del servidor", "Invalid configuration: Anonymous binding is not allowed." : "Configuració no vàlida: no es permet l'enllaç anònim.", "Valid configuration, connection established!" : "Configuració vàlida, connexió establerta!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuració vàlida, però no s'ha pogut enllaçar. Comproveu la configuració del servidor i les credencials.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuració no vàlida. Feu un cop d'ull als registres per obtenir més informació.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuració vàlida, però no s'ha pogut enllaçar. Comproveu els paràmetres del servidor i les credencials.", + "Invalid configuration: %s" : "Configuració no vàlida: %s", "No action specified" : "No heu especificat cap acció", "No configuration specified" : "No heu especificat cap configuració", "No data specified" : "No heu especificat cap dada", - " Could not set configuration %s" : "No s'ha pogut establir la configuració %s", + "Invalid data specified" : "Les dades especificades no són vàlides", + "Could not set configuration %1$s to %2$s" : "No s'ha pogut establir la configuració %1$s a %2$s", "Action does not exist" : "L'acció no existeix", - "Renewing …" : "Renovant ...", + "Renewing …" : "Renovant …", "Very weak password" : "Contrasenya massa feble", "Weak password" : "Contrasenya feble", "So-so password" : "Contrasenya passable", "Good password" : "Contrasenya bona", "Strong password" : "Contrasenya forta", "The Base DN appears to be wrong" : "El DN de base sembla estar equivocat", - "Testing configuration…" : "Probant configuració...", + "Testing configuration…" : "Probant configuració…", "Configuration incorrect" : "Configuració incorrecte", "Configuration incomplete" : "Configuració incompleta", "Configuration OK" : "Configuració correcte", @@ -25,45 +26,61 @@ "Select object classes" : "Seleccioneu les classes dels objectes", "Please check the credentials, they seem to be wrong." : "Comproveu les credencials, semblen estar equivocades.", "Please specify the port, it could not be auto-detected." : "Especifiqueu el port, no s'ha pogut detectar automàticament.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN no es pot detectar automàticament, reviseu les credencials, l'amfitrió i el port.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN no es pot detectar automàticament, reviseu les credencials, el servidor i el port.", "Could not detect Base DN, please enter it manually." : "No s'ha pogut detectar Base DN, introduïu-lo manualment.", "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No s'ha trobat cap objecte a la Base DN donada. Reviseu.", - "More than 1,000 directory entries available." : "Hi ha més de 1.000 entrades de directoris disponibles.", + "More than 1,000 directory entries available." : "Hi ha més de 1.000 entrades de directori disponibles.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Hi ha {objectsFound} entrades disponibles al DN de base proporcionat","Hi ha {objectsFound} entrades disponibles al DN de base proporcionat"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hi ha hagut un error. Comproveu la base DN, així com la configuració de connexió i les credencials.", - "Do you really want to delete the current Server Configuration?" : "Segur que voleu suprimir els paràmetres actuals del servidor?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hi ha hagut un error. Comproveu la base DN, així com la paràmetres de connexió i les credencials.", + "Do you really want to delete the current Server Configuration?" : "Segur que voleu suprimir la Configuració actual del Servidor?", "Confirm Deletion" : "Confirma l'eliminació", "Mappings cleared successfully!" : "S'han netejat les assignacions amb èxit!", "Error while clearing the mappings." : "S'ha produït un error en eliminar les assignacions.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "L'enllaç anònim no està permès. Proporcioneu un DN d'usuari i contrasenya.", "LDAP Operations error. Anonymous bind might not be allowed." : "Error d'operacions LDAP. L'enllaç anònim no es pot permetre.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "S'ha produït un error en desar. Assegureu-vos que la base de dades està en Operació. Torneu a carregar abans de continuar.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Si canvieu el mode, activareu les consultes LDAP automàtiques. Depenent de la vostra mida LDAP, poden trigar una estona. Voleu canviar el mode?", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Si canvieu el mode, habilitareu les consultes LDAP automàtiques. Depenent de la vostra mida LDAP, poden trigar una estona. Voleu canviar el mode?", "Mode switch" : "Canvia el mode", "Select attributes" : "Seleccioneu els atributs", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuari no trobat. Comproveu els vostres atributs d'inici de sessió i el vostre nom d'usuari. Filtre eficaç (per copiar i enganxar per a la validació de la línia de comandaments):<br/>", - "User found and settings verified." : "S'ha trobat l'usuari i s'ha verificat la configuració.", + "User found and settings verified." : "S'ha trobat l'usuari i s'han verificat els paràmetres.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Penseu a reduir la vostra cerca, ja que ha inclòs molts usuaris, només el primer dels quals podrà iniciar sessió.", - "An unspecified error occurred. Please check log and settings." : "S'ha produït un error no especificat. Verifiqueu el registre i la configuració.", + "An unspecified error occurred. Please check log and settings." : "S'ha produït un error no especificat. Verifiqueu el registre i els paràmetres.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtre de cerca no és vàlid, probablement a causa de problemes de sintaxi com el nombre impar de parèntesis oberts i tancats. Reviseu.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "S'ha produït un error de connexió a LDAP / AD, consulteu l'amfitrió, el port i les credencials.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el text variable \"%u id\". Es reemplaçarà amb el nom d'usuari quan consulteu LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "S'ha produït un error de connexió a LDAP/AD. Comproveu el servidor, el port i les credencials.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posició \"%uid\". Se substituirà pel nom d'inici de sessió en consultar LDAP/AD.", "Please provide a login name to test against" : "Proporcioneu un nom d'inici de sessió per provar-ho", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El quadre del grup s'ha desactivat, perquè el servidor LDAP / AD no admet memberOf.", - "Password change rejected. Hint: " : "El canvi de contrasenya s'ha rebutjat. Pista:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El quadre de grup s'ha desactivat perquè el servidor LDAP/AD no admet memberOf.", + "Password change rejected. Hint: %s" : "S'ha rebutjat el canvi de contrasenya. Pista: %s", + "Mandatory field \"%s\" left empty" : "El camp obligatori \"%s\" s'ha deixat buit", + "A password is given, but not an LDAP agent" : "Es dóna una contrasenya, però no un agent LDAP", + "No password is given for the user agent" : "No es dóna cap contrasenya per a l'agent d'usuari", + "No LDAP base DN was given" : "No s'ha donat cap DN base LDAP", + "User base DN is not a subnode of global base DN" : "El DN base d'usuari no és un subnode del DN base global", + "Group base DN is not a subnode of global base DN" : "El DN base del grup no és un subnode del DN base global", "Please login with the new password" : "Inicieu sessió amb la nova contrasenya", "LDAP User backend" : "Rerefons d'usuari LDAP", "Your password will expire tomorrow." : "La contrasenya caducarà demà.", "Your password will expire today." : "La contrasenya caducarà avui.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La vostra contrasenya expirarà en %n dies.","La vostra contrasenya expirarà d'aquí %n dies."], - "LDAP / AD integration" : "Integració LDAP / AD", - "_%s group found_::_%s groups found_" : ["S'ha trobat %s grup","S'han trobat %s grups"], - "_%s user found_::_%s users found_" : ["S'ha trobat %s usuari","S'han trobat %s usuaris"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No s'ha pogut detectar l'atribut del nom de visualització de l'usuari. Si us plau, especifiqueu-vos a la configuració LDAP avançada.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La vostra contrasenya expirarà en %n dies.","La vostra contrasenya caducarà d'aquí %n dies."], + "LDAP/AD integration" : "Integració LDAP/AD", + "LDAP Connection" : "Connexió LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Ha fallat l'enllaç per a aquesta configuració LDAP: %s","Ha fallat l'enllaç per %n configuracions LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["No s'ha pogut cercar aquesta configuració LDAP: %s"," No s’han pogut cercar %n configuracions LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Hi ha una configuració LDAP inactiva: %s","Hi han %n configuracions LDAP inactives: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["L'enllaç i la cerca funciona a la connexió LDAP configurada (%s)","L’enllaç i la cerca funciona a totes les %n connexions LDAP configurades (%s)"], + "Invalid LDAP UUIDs" : "UUID no vàlid", + "None found" : "No s'ha trobat cap", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "S'han trobat UUID no vàlids de comptes o grups LDAP. Reviseu el vostre paràmetre d'\"Anul·lació de la detecció d'UUID\" a la part Expert de la configuració LDAP i utilitzeu \"occ ldap:update-uuid\" per actualitzar-los.", + "_%n group found_::_%n groups found_" : ["S'ha trobat %n grup","S’han trobat %n grups"], + "> 1000 groups found" : "> 1000 grups trobats", + "> 1000 users found" : "> 1000 usuaris trobats", + "_%n user found_::_%n users found_" : ["S'ha trobat %n usuari","S’han trobat %n usuaris"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No s'ha pogut detectar l'atribut del nom de visualització de l'usuari. Si us plau, especifiqueu-vos als paràmetres de LDAP avançats.", "Could not find the desired feature" : "La característica desitjada no s'ha trobat", - "Invalid Host" : "Ordinador central no vàlid", - "LDAP user and group backend" : "Usuari LDAP i grup de suport", + "Invalid Host" : "Servidor no vàlid", + "LDAP user and group backend" : "Usuari LDAP i grup de rerefons", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aquesta aplicació permet als administradors connectar Nextcloud a un directori d'usuari basat en LDAP.", "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aquest aplicació permet als administradors connectar Nextcloud a un directori LDAP per autenticació i subministrament d'usuaris, grups i atributs d'usuari. Els administradors poden configurar aquesta aplicació per connectar a un o més directoris LDAP o ActiveDirectories (AD) a través de la interfície LDAP. Amb les consultes i filtres adequats es poden extreure i importar a Nextcloud atributs d'usuari com la quota, adreça de correu, avatar, pertinença a grups i més.\n\nUn usuari accedeix a Nextcloud amb les seves credencials LDAP o AD, i rep accés gràcies a l'autenticació gestionada pel servidor LDAP / AD. Nextcloud en cap moment emmagatzema la contrasenya LDAP o AD, ans al contrari, un cop l'usuari s'ha identificat correctament Nextcloud emprarà variables de sessió per desar només el ID de l'usuari. Podeu trobar més informació a la documentació sobre gestió d'usuaris i grups LDAP.", "Test Configuration" : "Comprovació de la configuració", @@ -74,24 +91,25 @@ "Search groups" : "Buscar grups", "Available groups" : "Grups disponibles", "Selected groups" : "Grups seleccionats", - "Edit LDAP Query" : "Editeu la consulta LDAP", + "Edit LDAP Query" : "Edició de la consulta LDAP", "LDAP Filter:" : "Filtre LDAP:", "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtre especifica quins grups LDAP haurien de tenir accés a la instància %s.", - "Verify settings and count the groups" : "Comprova la configuració i compta els grups", - "When logging in, %s will find the user based on the following attributes:" : "Quan s'accedeixi, %s cercarà l'usuari segons aquests atributs:", - "LDAP / AD Username:" : "Usuari LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permet l'inici de sessió emprant el nom d'usuari LDAP / AD, que és \"uid\" o bé \"sAMAccountName\" i serà detectat.", - "LDAP / AD Email Address:" : "Adreça de correu LDAP / AD:", + "Verify settings and count the groups" : "Comprova els paràmetres i compta els grups", + "When logging in, %s will find the user based on the following attributes:" : "Quan s'accedeixi, %s trobarà l'usuari segons aquests atributs:", + "LDAP/AD Username:" : "Nom d'usuari LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permet inici de sessió amb el nom d'usuari LDAP/AD, que és \"uid\" o \"sAMAccountName\" i es detectarà.", + "LDAP/AD Email Address:" : "Adreça de correu electrònic LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permet l'inici de sessió emprant l'atribut adreça de correu. S'accepten \"mail\" i \"mailPrimaryAddress\" .", "Other Attributes:" : "Altres atributs:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defineix el filtre a aplicar quan s'inicia sessió. \"%%uid\" reemplaça el nom d'usuari en l'acció d'identificar-se. Exemple \"uid=%%uid\"", "Test Loginname" : "Nom d'usuari de prova", - "Verify settings" : "Comprova la configuració", + "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta rebre un DN per al nom d'inici de sessió donat i el filtre d'inici de sessió actual", + "Verify settings" : "Comprova els paràmetres", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Afegeix una nova configuració", - "Copy current configuration into new directory binding" : "Copia l'actual configuració en la nova connexió", - "Delete the current configuration" : "Esborra la configuració actual", - "Host" : "Equip remot", + "Copy current configuration into new directory binding" : "Copia l'actual configuració en la nova connexió al directori", + "Delete the current configuration" : "Suprimeix la configuració actual", + "Host" : "Servidor", "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Podeu ometre el protocol, si no requeriu SSL. Si ho requeriu llavors comenceu amb ldaps://", "Port" : "Port", "Detect Port" : "Detecta port", @@ -106,16 +124,16 @@ "Test Base DN" : "Prova el DN de base", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticions LDAP automàtiques. És millor per configuracions grans, però requereix tenir certs coneixements de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introducció manual de filtres LDAP (recomanat per a directoris grans)", - "Listing and searching for users is constrained by these criteria:" : "La consulta i cerca per part dels usuaris és restringida pels següents criteris:", + "Listing and searching for users is constrained by these criteria:" : "Llistat i cerca per part dels usuaris és restringida pels següents criteris:", "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." : "Las classes d'objectes més comunes pels usuaris són organizationalPerson, person, user, i inetOrgPerson. Si no esteu segurs de quina classe d'objecte escollir llavors consulteu el vostre administrador de directori.", - "The filter specifies which LDAP users shall have access to the %s instance." : "El filtre especifica quins usuaris LDAP haurien de tenir accés a la instància %s", - "Verify settings and count users" : "Verifica configuracions i compta usuaris", - "Saving" : "Desant...", + "The filter specifies which LDAP users shall have access to the %s instance." : "El filtre especifica quins usuaris LDAP haurien de tenir accés a la instància %s.", + "Verify settings and count users" : "Verifica paràmetres i compta usuaris", + "Saving" : "S'està desant", "Back" : "Enrere", "Continue" : "Continua", "Please renew your password." : "Heu de renovar la vostra contrasenya.", "An internal error occurred." : "Hi ha hagut un error intern inesperat.", - "Please try again or contact your administrator." : "Proveu un altre cop o contacteu al vostre administrador.", + "Please try again or contact your administrator." : "Torneu-ho a provar o contacteu al vostre administrador.", "Current password" : "Contrasenya actual", "New password" : "Nova contrasenya", "Renew password" : "Renova la contrasenya", @@ -123,70 +141,96 @@ "Cancel" : "Cancel·la", "Server" : "Servidor", "Users" : "Usuaris", - "Login Attributes" : "Atributs d'accés", + "Login Attributes" : "Atributs d'inici de sessió", "Groups" : "Grups", "Expert" : "Expert", "Advanced" : "Avançat", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avís:</b> El mòdul PHP LDAP no està instal·lat, el dorsal no funcionarà. Demaneu a l'administrador del sistema que l'instal·li.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Avís:</b> El mòdul PHP LDAP no està instal·lat, el rerefons no funcionarà. Demaneu a l'administrador del sistema que l'instal·li.", "Connection Settings" : "Paràmetres de connexió", "Configuration Active" : "Configuració activa", "When unchecked, this configuration will be skipped." : "Si està desmarcat, aquesta configuració s'ometrà.", - "Backup (Replica) Host" : "Màquina de còpia de serguretat (rèplica)", + "Backup (Replica) Host" : "Servidor de còpia de seguretat (rèplica)", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Afegiu una màquina de còpia de seguretat opcional. Ha de ser una rèplica del servidor LDAP/AD principal.", "Backup (Replica) Port" : "Port de la còpia de seguretat (rèplica)", - "Disable Main Server" : "Desactiva el servidor principal", + "Disable Main Server" : "Inhabilita el servidor principal", "Only connect to the replica server." : "Connecta només al servidor rèplica.", "Turn off SSL certificate validation." : "Desactiva la validació de certificat 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." : "No es recomana, useu-ho només com a prova! Importeu el certificat SSL del servidor LDAP al servidor %s només si la connexió funciona amb aquesta opció.", "Cache Time-To-Live" : "Memòria cau Time-To-Live", "in seconds. A change empties the cache." : "en segons. Un canvi buidarà la memòria cau.", - "Directory Settings" : "Configuracio de carpetes", + "Directory Settings" : "Paràmetres de carpetes", "User Display Name Field" : "Camp per mostrar el nom d'usuari", "The LDAP attribute to use to generate the user's display name." : "Atribut LDAP a usar per generar el nom a mostrar de l'usuari.", "2nd User Display Name Field" : "Camp del 2n nom d'usuari a mostrar", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atribut LDAP per ser afegit al nom a mostrar entre parèntesis. Esdevé en quelcom així: »Oriol Junqueras (oriol.junqueras@exemple.cat)«.", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atribut LDAP per ser afegit al nom a mostrar entre parèntesis. Esdevé en quelcom així: »Oriol Mas (oriol.mas@exemple.cat)«.", "Base User Tree" : "Arbre base d'usuaris", "One User Base DN per line" : "Una DN Base d'Usuari per línia", "User Search Attributes" : "Atributs de cerca d'usuari", "Optional; one attribute per line" : "Opcional; Un atribut per línia", + "Disable users missing from LDAP" : "Inhabilita els usuaris que falten a LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quan estigui activat, es desactivaran els usuaris importats des de LDAP que després faltin", "Group Display Name Field" : "Camp per mostrar el nom del grup", "The LDAP attribute to use to generate the groups's display name." : "Atribut LDAP a usar per generar el nom a mostrar del grup.", "Base Group Tree" : "Arbre base de grups", "One Group Base DN per line" : "Una DN Base de Grup per línia", "Group Search Attributes" : "Atributs de cerca de grup", "Group-Member association" : "Associació membres-grup", - "Dynamic Group Member URL" : "URL del Dynamic Group Member", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atribut LDAP que en objectes de Grup conté un URL de cerca LDAP que determina quins objectes pertanyen al grup. (Si es deixa en blanc es desactiva la funcionalitat de pertinença dinàmica a grups)", + "Dynamic Group Member URL" : "URL del Membre de Grup Dinàmic", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atribut LDAP que en objectes de Grup conté un URL de cerca LDAP que determina quins objectes pertanyen al grup. (Si es deixa el paràmetre en blanc es desactiva la funcionalitat de pertinença dinàmica a grups)", "Nested Groups" : "Grups imbricats", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quan està activat, els grups que contenen grups estan permesos. (Només funciona si l'atribut del grup membre conté DNs.)", "Paging chunksize" : "Mida de la pàgina", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Mida usada per cerques LDAP paginades que podrien retornar respostes de volcat com enumeració d'usuari o grup. (Establint-ho a 0 desactiva les cerques LDAP paginades en aquestes situacions.)", - "Enable LDAP password changes per user" : "Activa el canvi de contrasenya LDAP pels usuaris", + "Enable LDAP password changes per user" : "Habilita el canvi de contrasenya LDAP pels usuaris", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permet als usuaris LDAP canviar la seva contrasenya i permet als Súper administradors i Administradors de grup canviar les contrasenyes dels seus usuaris LDAP. Només funciona quan les polítiques del control d'accés es configuren de igual manera al servidor LDAP. Com les contrasenyes s'envien en text pla (no xifrat) al servidor LDAP, s'ha d'usar transport xifrat i s'hauria de configurar el servidor LDAP per usar resum de contrasenyes (\"hashing\").", "(New password is sent as plain text to LDAP)" : "(La nova contrasenya s'envia com a text pla al servidor LDAP)", - "Default password policy DN" : "DN de la política de contrasenya predeterminada", - "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN d'una política de contrasenya predeterminada que serà emprada per a la gestió de la caducitat de contrasenyes. Només funciona quan està activat el canvi de contrasenyes per part dels usuaris i només és compatible amb OpenLDAP. Deixeu buit aquest camp per desactivar aquesta gestió de contrasenyes caducades.", + "Default password policy DN" : "DN de la política de contrasenya per defecte", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN d'una política de contrasenya predeterminada que serà emprada per a la gestió de la caducitat de contrasenyes. Només funciona quan està habilitat el canvi de contrasenyes per part dels usuaris i només és compatible amb OpenLDAP. Deixeu buit aquest camp per desactivar aquesta gestió de contrasenyes caducades.", "Special Attributes" : "Atributs especials", "Quota Field" : "Camp de quota", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixeu buit per usar la quota predeterminada pels usuaris, O si no, indiqueu un atribut LDAP/AD.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixeu buit per usar la quota per defecte pels usuaris, O si no, indiqueu un atribut LDAP/AD.", "Quota Default" : "Quota per defecte", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobreescriu la quota predeterminada pels usuaris LDAP que no tenen una quota establerta en el camp Quota.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobreescriu la quota per defecte pels usuaris LDAP que no tenen una quota establerta en el camp Quota.", "Email Field" : "Camp de correu electrònic", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Estableix l'adreça de correu a partir del seu atribut LDAP. Deixeu buit pel comportament predeterminat.", "User Home Folder Naming Rule" : "Norma per anomenar la carpeta arrel d'usuari", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar buit pel nom d'usuari (per defecte). Altrament, especificar un atribut LDAP/AD.", - "\"$home\" Placeholder Field" : "Camp de text variable per \"$home\" ", + "\"$home\" Placeholder Field" : "Camp de marcador de posició \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "En la configuració d'un emmagatzematge extern es reemplaçarà $home amb el valor de l'atribut especificat", + "User Profile Attributes" : "Atributs del perfil d'usuari", + "Phone Field" : "Camp de telèfon", + "User profile Phone will be set from the specified attribute" : "Perfil d'usuari El telèfon s'establirà a partir de l'atribut especificat", + "Website Field" : "Camp del lloc web", + "User profile Website will be set from the specified attribute" : "Perfil d'usuari Lloc web s'establirà a partir de l'atribut especificat", + "Address Field" : "Camp d’adreça", + "User profile Address will be set from the specified attribute" : "Perfil d'usuari L'adreça s'establirà a partir de l'atribut especificat", + "Twitter Field" : "Camp de Twitter", + "User profile Twitter will be set from the specified attribute" : "El perfil d'usuari de Twitter s'establirà a partir de l'atribut especificat", + "Fediverse Field" : "Camp Fediverse", + "User profile Fediverse will be set from the specified attribute" : "El perfil d'usuari Fediverse s'establirà a partir de l'atribut especificat", + "Organisation Field" : "Camp de l'organització", + "User profile Organisation will be set from the specified attribute" : "Organització del Perfil d'usuari s'establirà a partir de l'atribut especificat", + "Role Field" : "Camp de rol", + "User profile Role will be set from the specified attribute" : "El rol del perfil d'usuari s'establirà a partir de l'atribut especificat", + "Headline Field" : "Camp de titular", + "User profile Headline will be set from the specified attribute" : "El títol del perfil d'usuari s'establirà a partir de l'atribut especificat", + "Biography Field" : "Camp de Biografia", + "User profile Biography will be set from the specified attribute" : "La biografia del perfil d'usuari s'establirà a partir de l'atribut especificat", + "Birthdate Field" : "Camp de data de naixement", + "User profile Date of birth will be set from the specified attribute" : "La Data de naixement al perfil d’usuari s'establirà a partir de l'atribut especificat", + "Pronouns Field" : "Camp de pronoms", + "User profile Pronouns will be set from the specified attribute" : "Els pronoms al Perfil d’usuari s’establiran a partir de l'atribut especificat", "Internal Username" : "Nom d'usuari intern", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Per defecte el nom d'usuari intern es crearà a partir de l'atribut UUID. Això assegura que el nom d'usuari sigui únic i que no calgui conversió de caràcters. El nom d'usuari intern té com a restricció que només es permeten aquests caràcters: [ a-zA-Z0-9_.@- ]. Altres caràcters són reemplaçats amb la seva correspondència ASCII o bé s'ometen. Si hi coincidència amb un altre usuari existent llavors s'afegeix o incrementa un número al final. El nom d'usuari intern s'usa per a identificar a un usuari internament. Alhora que és el nom predeterminat per la carpeta de l'usuari. També forma part de URLs per a ús remot, per exemple pels serveis *DAV (webDAV, etc...). Amb aquest atribut, es pot sobreescriure el comportament predeterminat. Deixeu-lo buit per assumir el comportament predeterminat. Els canvis només tindran efecte quan s'afegeixin/assignin nous usuaris LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Per defecte, el nom d'usuari intern es crearà a partir de l'atribut UUID. S'assegura que el nom d'usuari és únic i que els caràcters no s'han de convertir. El nom d'usuari intern té la restricció que només es permeten aquests caràcters: [a-zA-Z0-9_.@-]. Altres caràcters es substitueixen per la seva correspondència ASCII o simplement s'ometen. En les col·lisions, s'afegirà/augmentarà un nombre. El nom d'usuari intern s'utilitza per identificar un usuari internament. També és el nom per defecte de la carpeta d'inici de l'usuari. També forma part dels URL remots, per exemple, per a tots els serveis DAV. Amb aquest paràmetre, es pot anul·lar el comportament per defecte. Els canvis només tindran efecte en els usuaris LDAP (afegits) recentment assignats. Deixeu-lo buit per al comportament per defecte.", "Internal Username Attribute:" : "Atribut nom d'usuari intern:", "Override UUID detection" : "Sobrescriu la detecció 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." : "Per defecte, owncloud autodetecta l'atribut UUID. L'atribut UUID s'utilitza per identificar usuaris i grups de forma indubtable. També el nom d'usuari intern es crearà en base a la UUIS, si no heu especificat res diferent a dalt. Podeu sobreescriure l'arranjament i passar l'atribut que desitgeu. Heu d'assegurar-vos que l'atribut que escolliu pot ser recollit tant pels usuaris com pels grups i que és únic. Deixeu-ho en blanc si preferiu el comportament per defecte. els canvis s'aplicaran als usuaris i grups LDAP mapats de nou (afegits).", + "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." : "Per defecte, owncloud autodetecta l'atribut UUID. L'atribut UUID s'utilitza per identificar usuaris i grups automàticament. També el nom d'usuari intern es crearà en base a la UUID, si no heu especificat res diferent a dalt. Podeu sobreescriure el paràmetre i passar l'atribut que desitgeu. Heu d'assegurar-vos que l'atribut que escolliu pot ser recollit tant pels usuaris com pels grups i que és únic. Deixeu-ho en blanc si preferiu el comportament per defecte. els canvis s'aplicaran als usuaris i grups LDAP mapats de nou (afegits).", "UUID Attribute for Users:" : "Atribut UUID per Usuaris:", "UUID Attribute for Groups:" : "Atribut UUID per Grups:", "Username-LDAP User Mapping" : "Mapatge d'usuari Nom d'usuari-LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Els noms d'usuari son emprats per emmagatzemar i assignar metadades. Per tal d'identificar i reconèixer amb precisió als usuaris, cada usuari LDAP té un nom d'usuari intern. Això requereix una assignació de noms d'usuari interns per a cada un dels usuaris LDAP. Al nom d'usuari creat s'assigna el UUID de l'usuari LDAP. A més el DN es guarda en memòria cau per a reduir la interacció amb LDAP, però no s'utilitza per a identificació. Si el DN canvia, es trobaran els canvis. El nom d'usuari intern s'utilitza arreu. Netejar el mapa d'assignacions deixaria restes per totes bandes. Netejar el mapa d'assignacions no és que sigui sensible a la configuració, sinó que afecta a totes les configuracions LDAP! Mai netegeu el mapa d'assignacions en un entorn de producció, només en escenaris de proves o experimentals.", "Clear Username-LDAP User Mapping" : "Elimina el mapatge d'usuari Nom d'usuari-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Suprimeix el mapatge de grup Nom de grup-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Suprimeix el mapatge de grup Nom de grup-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuració no vàlida. Feu un cop d'ull als registres per obtenir més informació." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/cs.js b/apps/user_ldap/l10n/cs.js index 9eb47cbe62d..57912e46adf 100644 --- a/apps/user_ldap/l10n/cs.js +++ b/apps/user_ldap/l10n/cs.js @@ -2,20 +2,21 @@ OC.L10N.register( "user_ldap", { "Failed to clear the mappings." : "Mapování se nepodařilo zrušit.", - "Failed to delete the server configuration" : "Nastavení serveru se nepodařilo smazat", + "Failed to delete the server configuration" : "Nastavení pro server se nepodařilo smazat", "Invalid configuration: Anonymous binding is not allowed." : "Neplatné nastavení: Anonymní navázání není umožněno.", "Valid configuration, connection established!" : "Nastavení je v pořádku a spojení bylo navázáno.", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Nastavení je v pořádku, ale spojení se nezdařilo. Zkontrolujte nastavení serveru a přihlašovací údaje.", - "Invalid configuration. Please have a look at the logs for further details." : "Neplatné nastavení. Podrobnosti naleznete v záznamu událostí.", + "Invalid configuration: %s" : "Neplatné nastavení: %s", "No action specified" : "Neurčena žádná akce", "No configuration specified" : "Neurčeno žádné nastavení", "No data specified" : "Neurčena žádná data", - " Could not set configuration %s" : "Nelze nastavit konfiguraci %s", + "Invalid data specified" : "Zadána neplatná data", + "Could not set configuration %1$s to %2$s" : "Nepodařilo se nastavit konfiguraci %1$s na %2$s", "Action does not exist" : "Tato akce neexistuje", "Renewing …" : "Obnovování…", "Very weak password" : "Velmi snadno prolomitelné heslo", "Weak password" : "Snadno prolomitelné heslo", - "So-so password" : "Přijatelné heslo", + "So-so password" : "Ještě použitelné heslo", "Good password" : "Dobré heslo", "Strong password" : "Odolné heslo", "The Base DN appears to be wrong" : "Base DN se nezdá být pořádku", @@ -24,46 +25,63 @@ OC.L10N.register( "Configuration incomplete" : "Nastavení není dokončené", "Configuration OK" : "Nastavení v pořádku", "Select groups" : "Vyberte skupiny", - "Select object classes" : "Vyberte objektové třídy", + "Select object classes" : "Vyberte třídy objektů", "Please check the credentials, they seem to be wrong." : "Ověřte své přihlašovací údaje, zdají se být neplatné.", "Please specify the port, it could not be auto-detected." : "Zadejte port, nepodařilo se ho zjistit automaticky.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nelze automaticky detekovat, ověřte prosím přihlašovací údaje, host a port.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Základ DN se nepodařilo automaticky zjistit – ověřte zadání přihlašovacích údajů, hostitele a portu.", "Could not detect Base DN, please enter it manually." : "Nedaří se automaticky zjistit Base DN – zadejte ho ručně.", "{nthServer}. Server" : "{nthServer}. Server", - "No object found in the given Base DN. Please revise." : "V zadané Base DN nebyl objekt nalezen. Ověřte.", + "No object found in the given Base DN. Please revise." : "V zadaném základu DN nebyl objekt nalezen. Ověřte to.", "More than 1,000 directory entries available." : "Je dostupných více než 1000 položek adresáře kontaktů.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} položka k dispozici v rámci poskytnuté Base DN","{objectsFound} položky k dispozici v rámci poskytnuté Base DN","{objectsFound} položek k dispozici v rámci poskytnuté Base DN","{objectsFound} položky k dispozici v rámci poskytnuté Base DN"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověře prosím Base DN společně s nastavením připojení a přihlašovacími údaji.", - "Do you really want to delete the current Server Configuration?" : "Opravdu si přejete smazat stávající nastavení serveru?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověřte základ DN, stejně tak nastavení připojení a přihlašovací údaje.", + "Do you really want to delete the current Server Configuration?" : "Opravdu chcete stávající nastavení pro server smazat?", "Confirm Deletion" : "Potvrdit smazání", - "Mappings cleared successfully!" : "Mapování úspěšně vyčištěno!", + "Mappings cleared successfully!" : "Mapování úspěšně vyčištěna!", "Error while clearing the mappings." : "Chyba při čištění mapování.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymní bind není povolen. Zadejte User DN a Heslo.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operace. Anonymní bind nejspíše není povolen.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operace. Anonymní navázání (bind) nejspíše není povoleno.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukládání se nezdařilo. Ujistěte se, že databáze funguje. Načtěte znovu, než budete pokračovat.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Přepnutí režimu povolí automatické LDAP dotazy. V závislosti na velikosti vašeho LDAP může vyhledávání chvíli trvat. Opravdu si přejete přepnout mód?", "Mode switch" : "Přepnutí režimu", "Select attributes" : "Vyberte atributy", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a uživatelské jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>", - "User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.", + "User found and settings verified." : "Uživatel nalezen a nastavení ověřena.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Zvažte zúžení vyhledávání, protože to stávající zahrnuje mnoho uživatelů, ze kterých se bude schopen přihlásit pouze první.", "An unspecified error occurred. Please check log and settings." : "Došlo k nespecifikované chybě. Zkontrolujte nastavení a soubor se záznamem událostí.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Zástupný symbol „%uid“ chybí. Při dotatzu na LDAP / AD bude nahrazen přihlašovacím jménem.", - "Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.", - "Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání není platný, pravděpodobně z důvodu chybné syntaxe, jako třeba neuzavřené závorky. Ověřte to.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Došlo k chybě připojení k LDAP/AD, zkontrolujte prosím host, port a přihlašovací údaje.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Zástupný symbol „%uid“ chybí. Při dotatzu na LDAP/AD bude nahrazen přihlašovacím jménem.", + "Please provide a login name to test against" : "Zadejte přihlašovací jméno, vůči kterému vyzkoušet", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Skupinová kolonka bylo vypnuta, protože LDAP/AD server nepodporuje memberOf.", + "Password change rejected. Hint: %s" : "Změna hesla zamítnuta. Nápověda: %s", + "Mandatory field \"%s\" left empty" : "Nezbytná kolonka „%s“ nevyplněna", + "A password is given, but not an LDAP agent" : "Heslo je zadáno, ale nikoli LDAP agent", + "No password is given for the user agent" : "Pro uživatelského agenta nezadáno žádné heslo", + "No LDAP base DN was given" : "Nezadáno LDAP základ DN", + "User base DN is not a subnode of global base DN" : "Základ DN uživatele není dílčím uzlem globálního základu DN", + "Group base DN is not a subnode of global base DN" : "Základ DN skupiny není dílčím uzlem globálního základu DN", + "Login filter does not contain %s placeholder." : "Filtr přihlášení neobsahuje zástupné vyjádření %s.", "Please login with the new password" : "Přihlaste se pomocí nového hesla", - "LDAP User backend" : "Podpůrná vrstva pro LDAP uživatele", + "LDAP User backend" : "Podpůrná vrstva pro uživatele z LDAP", "Your password will expire tomorrow." : "Platnost hesla zítra skončí.", "Your password will expire today." : "Platnost hesla dnes končí.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Platnost hesla skončí za %n den.","Platnost hesla skončí za %n dny.","Platnost hesla skončí za %n dnů.","Platnost hesla skončí za %n dny."], - "LDAP / AD integration" : "LDAP / AD propojení", - "_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin","nalezeno %s skupin"], - "_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů","nalezeni %s uživatelé"], + "LDAP/AD integration" : "Napojení na LDAP/AD", + "LDAP Connection" : "LDAP spojení", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Navazování se pro toto nastavení LDAP nezdařilo: %s","Navazování se pro tato nastavení LDAP nezdařilo: %s","Navazování se pro tato nastavení LDAP nezdařilo: %s","Navazování se pro tato nastavení LDAP nezdařilo: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Hledání se pro toto nastavení LDAP nezdařilo: %s","Hledání se pro tato nastavení LDAP nezdařilo: %s","Hledání se pro tato nastavení LDAP nezdařilo: %s","Hledání se pro tato nastavení LDAP nezdařilo: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Je zde neaktivní nastavení pro LDAP: %s","Jsou zde neaktivní nastavení pro LDAP: %s","Je zde neaktivních nastavení pro LDAP: %s","Jsou zde neaktivní nastavení pro LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Navazování a vyhledávání funguje na nastaveném LDAP spojení (%s)","Navazování a vyhledávání funguje na všech %n nastavených LDAP spojeních (%s)","Navazování a vyhledávání funguje na všech %n nastavených LDAP spojeních (%s)","Navazování a vyhledávání funguje na všech %n nastavených LDAP spojeních (%s)"], + "Invalid LDAP UUIDs" : "Neplatné LDAP UUID identif.", + "None found" : "Žádné nenalezeno", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Nalezeny neplatné UUID identifikátory účtů nebo skupin. Zkontrolujte svá nastavení „Přebít zjišťování UUID identifikátorů“ v části pro odborníky nastavení pro LDAP a identifikátory pak zaktualizujte příkazem „ldap:update-uuid“.", + "_%n group found_::_%n groups found_" : ["nalezena %n skupina","nalezeny %n skupiny","nalezeno %n skupin","nalezeny %n skupiny"], + "> 1000 groups found" : "nalezeno více než 1 000 skupin", + "> 1000 users found" : "nalezeno více než 1 000 uživatelů", + "_%n user found_::_%n users found_" : ["nalezen %n uživatel","nalezeni %n uživatelé","nalezeno %n uživatelů","nalezeni %n uživatelé"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nedaří se zjistit atribut pro zobrazení jména uživatele. Upřesněte ho sami v rozšířeném nastavení LDAP.", - "Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost", + "Could not find the desired feature" : "Požadovanou vlastnost se nepodařilo nalézt", "Invalid Host" : "Neplatný hostitel", "LDAP user and group backend" : "Podpůrná vrstva pro uživatele a skupiny z LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Tato aplikace umožňuje správcům připojit Nextcloud na adresář uživatelů založený na LDAP.", @@ -80,14 +98,15 @@ OC.L10N.register( "LDAP Filter:" : "LDAP filtr:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", "Verify settings and count the groups" : "Ověřit nastavení a spočítat skupiny", - "When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, %s bude hledat uživatele na základě následujících atributů:", - "LDAP / AD Username:" : "LDAP / AD uživatelské jméno:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje přihlašování pomocí LDAP/AD uživatelského jména, což je buď „uid“ nebo „sAMAccountName“ a bude zjištěno.", - "LDAP / AD Email Address:" : "E-mailová adresa z LDAP/AD:", + "When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, bude %s hledat uživatele na základě následujících atributů:", + "LDAP/AD Username:" : "LDAP/AD uživatelské jméno:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje přihlašování pomocí LDAP/AD uživatelského jména, což je buď „uid“ nebo „sAMAccountName“ a bude zjištěno.", + "LDAP/AD Email Address:" : "E-mailová adresa z LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Umožňuje přihlašování pomocí atributu e-mail. Je možné použít „mail“ a „mailPrimaryAddress“.", "Other Attributes:" : "Další atributy:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definuje filtr který použít při pokusu o přihlášení. „%%uid“ je nahrazeno uživatelským jménem z přihlašovací akce. Příklad: „uid=%%uid“", - "Test Loginname" : "Testovací přihlašovací jméno", + "Test Loginname" : "Vyzkoušet přihlašovací jméno", + "Attempts to receive a DN for the given loginname and the current login filter" : "Pokusy získat rozlišené jméno (DN) pro dané přihlašovací jméno a stávající filtr přihlášení", "Verify settings" : "Ověřit nastavení", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Přidat nové nastavení", @@ -98,19 +117,19 @@ OC.L10N.register( "Port" : "Port", "Detect Port" : "Zjistit port", "User DN" : "Uživatelské 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 klientského uživatele, ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.", + "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 klientského uživatele, ke kterému má být vytvořena vazba, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.", "Password" : "Heslo", "For anonymous access, leave DN and Password empty." : "Pro anonymní přístup ponechte údaje DN and heslo prázdné.", "Save Credentials" : "Uložit přihlašovací údaje", "One Base DN per line" : "Každé základní DN na samostatném řádku", - "You can specify Base DN for users and groups in the Advanced tab" : "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny", + "You can specify Base DN for users and groups in the Advanced tab" : "Základ DN pro uživatele a skupiny je možné zadat v panelu Pokročilé", "Detect Base DN" : "Zjistitit Base DN", - "Test Base DN" : "Test Base DN", + "Test Base DN" : "Vyzkoušet základ DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro velká nasazení, ale vyžaduje znalosti o LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře kontaktů)", "Listing and searching for users is constrained by these criteria:" : "Získávání a vyhledávání uživatelů je omezeno následujícími kritérii:", "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." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na správce svého adresáře kontaktů.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", + "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé z LDAP mají mít přístup k instanci %s.", "Verify settings and count users" : "Ověřit nastavení a spočítat uživatele", "Saving" : "Ukládá se", "Back" : "Zpět", @@ -129,40 +148,42 @@ OC.L10N.register( "Groups" : "Skupiny", "Expert" : "Expertní", "Advanced" : "Pokročilé", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte prosím správce systému, aby jej nainstaloval.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte správce systému, aby ho nainstaloval.", "Connection Settings" : "Nastavení spojení", "Configuration Active" : "Nastavení aktivní", "When unchecked, this configuration will be skipped." : "Pokud není zaškrtnuto, bude toto nastavení přeskočeno.", - "Backup (Replica) Host" : "Hostitel záložní (repliky)", + "Backup (Replica) Host" : "Hostitel zálohy (repliky)", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Zadejte volitelného záložního hostitele. Je třeba, aby byla kopie hlavního LDAP/AD serveru.", "Backup (Replica) Port" : "Port na záloze (replika)", "Disable Main Server" : "Zakázat hlavní server", "Only connect to the replica server." : "Připojit jen k záložnímu serveru.", "Turn off SSL certificate validation." : "Vypnout ověřování SSL certifikátu.", - "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." : "Nedoporučuje se, určeno pouze k testovacímu použití. Pokud spojení funguje jen s touto volbou, importujte SSL certifikát vašeho LDAP serveru na server %s.", - "Cache Time-To-Live" : "TTL vyrovnávací paměti", + "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." : "Nedoporučuje se, určeno pouze k použití pro testy! Pokud spojení funguje pouze s touto volbou, naimportujte SSL certifikát vašeho LDAP serveru na %s server.", + "Cache Time-To-Live" : "Doba platnosti mezipaměti", "in seconds. A change empties the cache." : "v sekundách. Změna vyprázdní mezipaměť.", - "Directory Settings" : "Nastavení adresáře kontaktů", + "Directory Settings" : "Nastavení adresáře", "User Display Name Field" : "Kolonka zobrazovaného jména uživatele", "The LDAP attribute to use to generate the user's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména uživatele.", "2nd User Display Name Field" : "Druhá kolonka zobrazovaného jména uživatele", "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Volitelné. Přidání LDAP atributu v závorkách k zobrazovanému jménu. Vypadá např. jako „John Doe (john.doe@example.org)“", - "Base User Tree" : "Základní uživatelský strom", + "Base User Tree" : "Základ stromu uživatelů", "One User Base DN per line" : "Jedna uživatelská základní DN na řádku", "User Search Attributes" : "Atributy vyhledávání uživatelů", "Optional; one attribute per line" : "Volitelné, každý atribut na zvlášť řádek", + "Disable users missing from LDAP" : "Znepřístupnit uživatelské účty, které se nenachází v LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Pokud zapnuto, uživatelské účty naimportovaní z LDAP, kteří pak budou chybět, budou znepřístupněny.", "Group Display Name Field" : "Kolonka zobrazovaného názvu skupiny", - "The LDAP attribute to use to generate the groups's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména skupiny.", - "Base Group Tree" : "Základní skupinový strom", + "The LDAP attribute to use to generate the groups's display name." : "LDAP atribut, který použít k vytvoření zobrazovaného názvu skupiny.", + "Base Group Tree" : "Základ stromu skupin", "One Group Base DN per line" : "Jedna skupinová základní DN na řádku", "Group Search Attributes" : "Atributy vyhledávání skupin", - "Group-Member association" : "Asociace člena skupiny", + "Group-Member association" : "Přiřazení člena skupiny", "Dynamic Group Member URL" : "URL člena dynamické skupiny", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP atribut, který obsahuje pro skupinu objektů vyhledávací LDAP URL, která určuje které objekty patří do skupiny. (Prázdné nastavení vypne funkci člena dynamické skupiny.)", "Nested Groups" : "Vnořené skupiny", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které obsahují jiné skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN.)", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které samy obsahují další skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN názvy.)", "Paging chunksize" : "Velikost bloku stránkování", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, které může vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, která mohou vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)", "Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro jednotlivé uživatele", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super správcům a správcům skupin měnit hesla jejich LDAP uživatelům. Funguje pouze, pokud jsou na LDAP serveru příslušně nastaveny zásady řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čitelné podobě, je třeba pro pro transport použít šifrování a na LDAP serveru by mělo být nastaveno ukládání hesel v podobě jejich otisků (hash).", "(New password is sent as plain text to LDAP)" : "(Nové heslo je do LDAP zasláno jako čitelný text)", @@ -179,16 +200,40 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pokud chcete použít uživatelské jméno (výchozí), nevyplňujte. Jinak zadejte LDAP/AD atribut.", "\"$home\" Placeholder Field" : "Výplňová kolonka „$home“", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home bude v nastavení externího úložiště nahrazeno hodnotou zadaného atributu", + "User Profile Attributes" : "Atributy uživatelského profilu", + "Phone Field" : "Kolonka s telefonním číslem", + "User profile Phone will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Telefon u uživatelského profilu", + "Website Field" : "Kolonka webové stránky", + "User profile Website will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa Webových stránek u uživatelského profilu", + "Address Field" : "Kolonka adresa", + "User profile Address will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Adresa u uživatelského profilu", + "Twitter Field" : "Kolonka Twitter", + "User profile Twitter will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa na Twitteru u uživatelského profilu", + "Fediverse Field" : "Kolonka Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa v rámci Fediverse u uživatelského profilu", + "Organisation Field" : "Kolonka organizace", + "User profile Organisation will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Organizace u uživatelského profilu", + "Role Field" : "Kolonka role", + "User profile Role will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Role u uživatelského profilu", + "Headline Field" : "Kolonka nadpis", + "User profile Headline will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Nadpis u uživatelského profilu", + "Biography Field" : "Kolonka životopis", + "User profile Biography will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Životopis u uživatelského profilu", + "Birthdate Field" : "Kolonka Narozeniny", + "User profile Date of birth will be set from the specified attribute" : "Datum narození v profilu uživatele bude nastaveno ze zadaného atributu", + "Pronouns Field" : "Kolonka pro zájmena", + "User profile Pronouns will be set from the specified attribute" : "Zájmeno v profilu uživatele bude nastaveno ze zadaného atributu", "Internal Username" : "Interní uživatelské jméno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Ponechte ho prázdné, pokud chcete zachovat výchozí nastavení. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP. Ponechte ho prázdné, pokud chcete zachovat výchozí nastavení. ", "Internal Username Attribute:" : "Atribut interního uživatelského jména:", - "Override UUID detection" : "Nastavit ručně UUID atribut", + "Override UUID detection" : "Nastavit UUID atribut ručně", "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." : "Ve výchozím nastavení je UUID atribut nalezen automaticky. UUID atribut je používán pro nezpochybnitelnou identifikaci uživatelů a skupin z LDAP. Navíc je na základě UUID tvořeno také interní uživatelské jméno, pokud není nastaveno jinak. Můžete výchozí nastavení přepsat a použít atribut, který sami zvolíte. Musíte se ale ujistit, že atribut, který vyberete, bude uveden jak u uživatelů, tak i u skupin a je unikátní. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele a skupiny z LDAP.", "UUID Attribute for Users:" : "UUID atribut pro uživatele:", "UUID Attribute for Groups:" : "UUID atribut pro skupiny:", "Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Uživatelská jména slouží k ukládání a přiřazování metadat. Pro přesnou identifikaci a rozpoznávání uživatelů, každý LDAP uživatel má vnitřní uživatelské jméno. Toto vyžaduje mapování uživatelského jména na LDAP uživatele. Krom toho je uložen do mezipaměti rozlišený název aby se omezila interakce s LDAP, ale není používáno pro identifikaci. Pokud se DN změní, změny budou nalezeny. Vnitřní uživatelské jméno bude použito nade všechno. Čištění mapování bude mít pozůstatky všude. Čištění mapování není citlivé na nastavení, postihuje všechny LDAP nastavení. Nikdy nečistěte mapování v produkčním prostředí, pouze v testovací nebo experimentální fázi.", - "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu", - "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu" + "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen v LDAP", + "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin na LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Neplatné nastavení. Podrobnosti naleznete v záznamu událostí." }, "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); diff --git a/apps/user_ldap/l10n/cs.json b/apps/user_ldap/l10n/cs.json index 26309f0982b..60d09fdf3e5 100644 --- a/apps/user_ldap/l10n/cs.json +++ b/apps/user_ldap/l10n/cs.json @@ -1,19 +1,20 @@ { "translations": { "Failed to clear the mappings." : "Mapování se nepodařilo zrušit.", - "Failed to delete the server configuration" : "Nastavení serveru se nepodařilo smazat", + "Failed to delete the server configuration" : "Nastavení pro server se nepodařilo smazat", "Invalid configuration: Anonymous binding is not allowed." : "Neplatné nastavení: Anonymní navázání není umožněno.", "Valid configuration, connection established!" : "Nastavení je v pořádku a spojení bylo navázáno.", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Nastavení je v pořádku, ale spojení se nezdařilo. Zkontrolujte nastavení serveru a přihlašovací údaje.", - "Invalid configuration. Please have a look at the logs for further details." : "Neplatné nastavení. Podrobnosti naleznete v záznamu událostí.", + "Invalid configuration: %s" : "Neplatné nastavení: %s", "No action specified" : "Neurčena žádná akce", "No configuration specified" : "Neurčeno žádné nastavení", "No data specified" : "Neurčena žádná data", - " Could not set configuration %s" : "Nelze nastavit konfiguraci %s", + "Invalid data specified" : "Zadána neplatná data", + "Could not set configuration %1$s to %2$s" : "Nepodařilo se nastavit konfiguraci %1$s na %2$s", "Action does not exist" : "Tato akce neexistuje", "Renewing …" : "Obnovování…", "Very weak password" : "Velmi snadno prolomitelné heslo", "Weak password" : "Snadno prolomitelné heslo", - "So-so password" : "Přijatelné heslo", + "So-so password" : "Ještě použitelné heslo", "Good password" : "Dobré heslo", "Strong password" : "Odolné heslo", "The Base DN appears to be wrong" : "Base DN se nezdá být pořádku", @@ -22,46 +23,63 @@ "Configuration incomplete" : "Nastavení není dokončené", "Configuration OK" : "Nastavení v pořádku", "Select groups" : "Vyberte skupiny", - "Select object classes" : "Vyberte objektové třídy", + "Select object classes" : "Vyberte třídy objektů", "Please check the credentials, they seem to be wrong." : "Ověřte své přihlašovací údaje, zdají se být neplatné.", "Please specify the port, it could not be auto-detected." : "Zadejte port, nepodařilo se ho zjistit automaticky.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nelze automaticky detekovat, ověřte prosím přihlašovací údaje, host a port.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Základ DN se nepodařilo automaticky zjistit – ověřte zadání přihlašovacích údajů, hostitele a portu.", "Could not detect Base DN, please enter it manually." : "Nedaří se automaticky zjistit Base DN – zadejte ho ručně.", "{nthServer}. Server" : "{nthServer}. Server", - "No object found in the given Base DN. Please revise." : "V zadané Base DN nebyl objekt nalezen. Ověřte.", + "No object found in the given Base DN. Please revise." : "V zadaném základu DN nebyl objekt nalezen. Ověřte to.", "More than 1,000 directory entries available." : "Je dostupných více než 1000 položek adresáře kontaktů.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} položka k dispozici v rámci poskytnuté Base DN","{objectsFound} položky k dispozici v rámci poskytnuté Base DN","{objectsFound} položek k dispozici v rámci poskytnuté Base DN","{objectsFound} položky k dispozici v rámci poskytnuté Base DN"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověře prosím Base DN společně s nastavením připojení a přihlašovacími údaji.", - "Do you really want to delete the current Server Configuration?" : "Opravdu si přejete smazat stávající nastavení serveru?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověřte základ DN, stejně tak nastavení připojení a přihlašovací údaje.", + "Do you really want to delete the current Server Configuration?" : "Opravdu chcete stávající nastavení pro server smazat?", "Confirm Deletion" : "Potvrdit smazání", - "Mappings cleared successfully!" : "Mapování úspěšně vyčištěno!", + "Mappings cleared successfully!" : "Mapování úspěšně vyčištěna!", "Error while clearing the mappings." : "Chyba při čištění mapování.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymní bind není povolen. Zadejte User DN a Heslo.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operace. Anonymní bind nejspíše není povolen.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operace. Anonymní navázání (bind) nejspíše není povoleno.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukládání se nezdařilo. Ujistěte se, že databáze funguje. Načtěte znovu, než budete pokračovat.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Přepnutí režimu povolí automatické LDAP dotazy. V závislosti na velikosti vašeho LDAP může vyhledávání chvíli trvat. Opravdu si přejete přepnout mód?", "Mode switch" : "Přepnutí režimu", "Select attributes" : "Vyberte atributy", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a uživatelské jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>", - "User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.", + "User found and settings verified." : "Uživatel nalezen a nastavení ověřena.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Zvažte zúžení vyhledávání, protože to stávající zahrnuje mnoho uživatelů, ze kterých se bude schopen přihlásit pouze první.", "An unspecified error occurred. Please check log and settings." : "Došlo k nespecifikované chybě. Zkontrolujte nastavení a soubor se záznamem událostí.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Zástupný symbol „%uid“ chybí. Při dotatzu na LDAP / AD bude nahrazen přihlašovacím jménem.", - "Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.", - "Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání není platný, pravděpodobně z důvodu chybné syntaxe, jako třeba neuzavřené závorky. Ověřte to.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Došlo k chybě připojení k LDAP/AD, zkontrolujte prosím host, port a přihlašovací údaje.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Zástupný symbol „%uid“ chybí. Při dotatzu na LDAP/AD bude nahrazen přihlašovacím jménem.", + "Please provide a login name to test against" : "Zadejte přihlašovací jméno, vůči kterému vyzkoušet", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Skupinová kolonka bylo vypnuta, protože LDAP/AD server nepodporuje memberOf.", + "Password change rejected. Hint: %s" : "Změna hesla zamítnuta. Nápověda: %s", + "Mandatory field \"%s\" left empty" : "Nezbytná kolonka „%s“ nevyplněna", + "A password is given, but not an LDAP agent" : "Heslo je zadáno, ale nikoli LDAP agent", + "No password is given for the user agent" : "Pro uživatelského agenta nezadáno žádné heslo", + "No LDAP base DN was given" : "Nezadáno LDAP základ DN", + "User base DN is not a subnode of global base DN" : "Základ DN uživatele není dílčím uzlem globálního základu DN", + "Group base DN is not a subnode of global base DN" : "Základ DN skupiny není dílčím uzlem globálního základu DN", + "Login filter does not contain %s placeholder." : "Filtr přihlášení neobsahuje zástupné vyjádření %s.", "Please login with the new password" : "Přihlaste se pomocí nového hesla", - "LDAP User backend" : "Podpůrná vrstva pro LDAP uživatele", + "LDAP User backend" : "Podpůrná vrstva pro uživatele z LDAP", "Your password will expire tomorrow." : "Platnost hesla zítra skončí.", "Your password will expire today." : "Platnost hesla dnes končí.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Platnost hesla skončí za %n den.","Platnost hesla skončí za %n dny.","Platnost hesla skončí za %n dnů.","Platnost hesla skončí za %n dny."], - "LDAP / AD integration" : "LDAP / AD propojení", - "_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin","nalezeno %s skupin"], - "_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů","nalezeni %s uživatelé"], + "LDAP/AD integration" : "Napojení na LDAP/AD", + "LDAP Connection" : "LDAP spojení", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Navazování se pro toto nastavení LDAP nezdařilo: %s","Navazování se pro tato nastavení LDAP nezdařilo: %s","Navazování se pro tato nastavení LDAP nezdařilo: %s","Navazování se pro tato nastavení LDAP nezdařilo: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Hledání se pro toto nastavení LDAP nezdařilo: %s","Hledání se pro tato nastavení LDAP nezdařilo: %s","Hledání se pro tato nastavení LDAP nezdařilo: %s","Hledání se pro tato nastavení LDAP nezdařilo: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Je zde neaktivní nastavení pro LDAP: %s","Jsou zde neaktivní nastavení pro LDAP: %s","Je zde neaktivních nastavení pro LDAP: %s","Jsou zde neaktivní nastavení pro LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Navazování a vyhledávání funguje na nastaveném LDAP spojení (%s)","Navazování a vyhledávání funguje na všech %n nastavených LDAP spojeních (%s)","Navazování a vyhledávání funguje na všech %n nastavených LDAP spojeních (%s)","Navazování a vyhledávání funguje na všech %n nastavených LDAP spojeních (%s)"], + "Invalid LDAP UUIDs" : "Neplatné LDAP UUID identif.", + "None found" : "Žádné nenalezeno", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Nalezeny neplatné UUID identifikátory účtů nebo skupin. Zkontrolujte svá nastavení „Přebít zjišťování UUID identifikátorů“ v části pro odborníky nastavení pro LDAP a identifikátory pak zaktualizujte příkazem „ldap:update-uuid“.", + "_%n group found_::_%n groups found_" : ["nalezena %n skupina","nalezeny %n skupiny","nalezeno %n skupin","nalezeny %n skupiny"], + "> 1000 groups found" : "nalezeno více než 1 000 skupin", + "> 1000 users found" : "nalezeno více než 1 000 uživatelů", + "_%n user found_::_%n users found_" : ["nalezen %n uživatel","nalezeni %n uživatelé","nalezeno %n uživatelů","nalezeni %n uživatelé"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nedaří se zjistit atribut pro zobrazení jména uživatele. Upřesněte ho sami v rozšířeném nastavení LDAP.", - "Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost", + "Could not find the desired feature" : "Požadovanou vlastnost se nepodařilo nalézt", "Invalid Host" : "Neplatný hostitel", "LDAP user and group backend" : "Podpůrná vrstva pro uživatele a skupiny z LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Tato aplikace umožňuje správcům připojit Nextcloud na adresář uživatelů založený na LDAP.", @@ -78,14 +96,15 @@ "LDAP Filter:" : "LDAP filtr:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", "Verify settings and count the groups" : "Ověřit nastavení a spočítat skupiny", - "When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, %s bude hledat uživatele na základě následujících atributů:", - "LDAP / AD Username:" : "LDAP / AD uživatelské jméno:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje přihlašování pomocí LDAP/AD uživatelského jména, což je buď „uid“ nebo „sAMAccountName“ a bude zjištěno.", - "LDAP / AD Email Address:" : "E-mailová adresa z LDAP/AD:", + "When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, bude %s hledat uživatele na základě následujících atributů:", + "LDAP/AD Username:" : "LDAP/AD uživatelské jméno:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje přihlašování pomocí LDAP/AD uživatelského jména, což je buď „uid“ nebo „sAMAccountName“ a bude zjištěno.", + "LDAP/AD Email Address:" : "E-mailová adresa z LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Umožňuje přihlašování pomocí atributu e-mail. Je možné použít „mail“ a „mailPrimaryAddress“.", "Other Attributes:" : "Další atributy:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definuje filtr který použít při pokusu o přihlášení. „%%uid“ je nahrazeno uživatelským jménem z přihlašovací akce. Příklad: „uid=%%uid“", - "Test Loginname" : "Testovací přihlašovací jméno", + "Test Loginname" : "Vyzkoušet přihlašovací jméno", + "Attempts to receive a DN for the given loginname and the current login filter" : "Pokusy získat rozlišené jméno (DN) pro dané přihlašovací jméno a stávající filtr přihlášení", "Verify settings" : "Ověřit nastavení", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Přidat nové nastavení", @@ -96,19 +115,19 @@ "Port" : "Port", "Detect Port" : "Zjistit port", "User DN" : "Uživatelské 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 klientského uživatele, ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.", + "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 klientského uživatele, ke kterému má být vytvořena vazba, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.", "Password" : "Heslo", "For anonymous access, leave DN and Password empty." : "Pro anonymní přístup ponechte údaje DN and heslo prázdné.", "Save Credentials" : "Uložit přihlašovací údaje", "One Base DN per line" : "Každé základní DN na samostatném řádku", - "You can specify Base DN for users and groups in the Advanced tab" : "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny", + "You can specify Base DN for users and groups in the Advanced tab" : "Základ DN pro uživatele a skupiny je možné zadat v panelu Pokročilé", "Detect Base DN" : "Zjistitit Base DN", - "Test Base DN" : "Test Base DN", + "Test Base DN" : "Vyzkoušet základ DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro velká nasazení, ale vyžaduje znalosti o LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře kontaktů)", "Listing and searching for users is constrained by these criteria:" : "Získávání a vyhledávání uživatelů je omezeno následujícími kritérii:", "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." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na správce svého adresáře kontaktů.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", + "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé z LDAP mají mít přístup k instanci %s.", "Verify settings and count users" : "Ověřit nastavení a spočítat uživatele", "Saving" : "Ukládá se", "Back" : "Zpět", @@ -127,40 +146,42 @@ "Groups" : "Skupiny", "Expert" : "Expertní", "Advanced" : "Pokročilé", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte prosím správce systému, aby jej nainstaloval.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte správce systému, aby ho nainstaloval.", "Connection Settings" : "Nastavení spojení", "Configuration Active" : "Nastavení aktivní", "When unchecked, this configuration will be skipped." : "Pokud není zaškrtnuto, bude toto nastavení přeskočeno.", - "Backup (Replica) Host" : "Hostitel záložní (repliky)", + "Backup (Replica) Host" : "Hostitel zálohy (repliky)", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Zadejte volitelného záložního hostitele. Je třeba, aby byla kopie hlavního LDAP/AD serveru.", "Backup (Replica) Port" : "Port na záloze (replika)", "Disable Main Server" : "Zakázat hlavní server", "Only connect to the replica server." : "Připojit jen k záložnímu serveru.", "Turn off SSL certificate validation." : "Vypnout ověřování SSL certifikátu.", - "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." : "Nedoporučuje se, určeno pouze k testovacímu použití. Pokud spojení funguje jen s touto volbou, importujte SSL certifikát vašeho LDAP serveru na server %s.", - "Cache Time-To-Live" : "TTL vyrovnávací paměti", + "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." : "Nedoporučuje se, určeno pouze k použití pro testy! Pokud spojení funguje pouze s touto volbou, naimportujte SSL certifikát vašeho LDAP serveru na %s server.", + "Cache Time-To-Live" : "Doba platnosti mezipaměti", "in seconds. A change empties the cache." : "v sekundách. Změna vyprázdní mezipaměť.", - "Directory Settings" : "Nastavení adresáře kontaktů", + "Directory Settings" : "Nastavení adresáře", "User Display Name Field" : "Kolonka zobrazovaného jména uživatele", "The LDAP attribute to use to generate the user's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména uživatele.", "2nd User Display Name Field" : "Druhá kolonka zobrazovaného jména uživatele", "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Volitelné. Přidání LDAP atributu v závorkách k zobrazovanému jménu. Vypadá např. jako „John Doe (john.doe@example.org)“", - "Base User Tree" : "Základní uživatelský strom", + "Base User Tree" : "Základ stromu uživatelů", "One User Base DN per line" : "Jedna uživatelská základní DN na řádku", "User Search Attributes" : "Atributy vyhledávání uživatelů", "Optional; one attribute per line" : "Volitelné, každý atribut na zvlášť řádek", + "Disable users missing from LDAP" : "Znepřístupnit uživatelské účty, které se nenachází v LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Pokud zapnuto, uživatelské účty naimportovaní z LDAP, kteří pak budou chybět, budou znepřístupněny.", "Group Display Name Field" : "Kolonka zobrazovaného názvu skupiny", - "The LDAP attribute to use to generate the groups's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména skupiny.", - "Base Group Tree" : "Základní skupinový strom", + "The LDAP attribute to use to generate the groups's display name." : "LDAP atribut, který použít k vytvoření zobrazovaného názvu skupiny.", + "Base Group Tree" : "Základ stromu skupin", "One Group Base DN per line" : "Jedna skupinová základní DN na řádku", "Group Search Attributes" : "Atributy vyhledávání skupin", - "Group-Member association" : "Asociace člena skupiny", + "Group-Member association" : "Přiřazení člena skupiny", "Dynamic Group Member URL" : "URL člena dynamické skupiny", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP atribut, který obsahuje pro skupinu objektů vyhledávací LDAP URL, která určuje které objekty patří do skupiny. (Prázdné nastavení vypne funkci člena dynamické skupiny.)", "Nested Groups" : "Vnořené skupiny", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které obsahují jiné skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN.)", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které samy obsahují další skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN názvy.)", "Paging chunksize" : "Velikost bloku stránkování", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, které může vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, která mohou vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)", "Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro jednotlivé uživatele", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super správcům a správcům skupin měnit hesla jejich LDAP uživatelům. Funguje pouze, pokud jsou na LDAP serveru příslušně nastaveny zásady řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čitelné podobě, je třeba pro pro transport použít šifrování a na LDAP serveru by mělo být nastaveno ukládání hesel v podobě jejich otisků (hash).", "(New password is sent as plain text to LDAP)" : "(Nové heslo je do LDAP zasláno jako čitelný text)", @@ -177,16 +198,40 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pokud chcete použít uživatelské jméno (výchozí), nevyplňujte. Jinak zadejte LDAP/AD atribut.", "\"$home\" Placeholder Field" : "Výplňová kolonka „$home“", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home bude v nastavení externího úložiště nahrazeno hodnotou zadaného atributu", + "User Profile Attributes" : "Atributy uživatelského profilu", + "Phone Field" : "Kolonka s telefonním číslem", + "User profile Phone will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Telefon u uživatelského profilu", + "Website Field" : "Kolonka webové stránky", + "User profile Website will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa Webových stránek u uživatelského profilu", + "Address Field" : "Kolonka adresa", + "User profile Address will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Adresa u uživatelského profilu", + "Twitter Field" : "Kolonka Twitter", + "User profile Twitter will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa na Twitteru u uživatelského profilu", + "Fediverse Field" : "Kolonka Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa v rámci Fediverse u uživatelského profilu", + "Organisation Field" : "Kolonka organizace", + "User profile Organisation will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Organizace u uživatelského profilu", + "Role Field" : "Kolonka role", + "User profile Role will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Role u uživatelského profilu", + "Headline Field" : "Kolonka nadpis", + "User profile Headline will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Nadpis u uživatelského profilu", + "Biography Field" : "Kolonka životopis", + "User profile Biography will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Životopis u uživatelského profilu", + "Birthdate Field" : "Kolonka Narozeniny", + "User profile Date of birth will be set from the specified attribute" : "Datum narození v profilu uživatele bude nastaveno ze zadaného atributu", + "Pronouns Field" : "Kolonka pro zájmena", + "User profile Pronouns will be set from the specified attribute" : "Zájmeno v profilu uživatele bude nastaveno ze zadaného atributu", "Internal Username" : "Interní uživatelské jméno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Ponechte ho prázdné, pokud chcete zachovat výchozí nastavení. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP. Ponechte ho prázdné, pokud chcete zachovat výchozí nastavení. ", "Internal Username Attribute:" : "Atribut interního uživatelského jména:", - "Override UUID detection" : "Nastavit ručně UUID atribut", + "Override UUID detection" : "Nastavit UUID atribut ručně", "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." : "Ve výchozím nastavení je UUID atribut nalezen automaticky. UUID atribut je používán pro nezpochybnitelnou identifikaci uživatelů a skupin z LDAP. Navíc je na základě UUID tvořeno také interní uživatelské jméno, pokud není nastaveno jinak. Můžete výchozí nastavení přepsat a použít atribut, který sami zvolíte. Musíte se ale ujistit, že atribut, který vyberete, bude uveden jak u uživatelů, tak i u skupin a je unikátní. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele a skupiny z LDAP.", "UUID Attribute for Users:" : "UUID atribut pro uživatele:", "UUID Attribute for Groups:" : "UUID atribut pro skupiny:", "Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Uživatelská jména slouží k ukládání a přiřazování metadat. Pro přesnou identifikaci a rozpoznávání uživatelů, každý LDAP uživatel má vnitřní uživatelské jméno. Toto vyžaduje mapování uživatelského jména na LDAP uživatele. Krom toho je uložen do mezipaměti rozlišený název aby se omezila interakce s LDAP, ale není používáno pro identifikaci. Pokud se DN změní, změny budou nalezeny. Vnitřní uživatelské jméno bude použito nade všechno. Čištění mapování bude mít pozůstatky všude. Čištění mapování není citlivé na nastavení, postihuje všechny LDAP nastavení. Nikdy nečistěte mapování v produkčním prostředí, pouze v testovací nebo experimentální fázi.", - "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu", - "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu" + "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen v LDAP", + "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin na LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Neplatné nastavení. Podrobnosti naleznete v záznamu událostí." },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js deleted file mode 100644 index 3e24f373e0b..00000000000 --- a/apps/user_ldap/l10n/cs_CZ.js +++ /dev/null @@ -1,169 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Selhalo zrušení mapování.", - "Failed to delete the server configuration" : "Selhalo smazání nastavení serveru", - "The configuration is invalid: anonymous bind is not allowed." : "Tato konfigurace není platná: anonymní bind není povolen.", - "The configuration is valid and the connection could be established!" : "Nastavení je v pořádku a spojení bylo navázáno.", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Konfigurace je v pořádku, ale spojení selhalo. Zkontrolujte prosím nastavení serveru a přihlašovací údaje.", - "The configuration is invalid. Please have a look at the logs for further details." : "Konfigurace je neplatná. Pro bližší informace se podívejte do logu.", - "No action specified" : "Neurčena žádná akce", - "No configuration specified" : "Neurčena žádná konfigurace", - "No data specified" : "Neurčena žádná data", - " Could not set configuration %s" : "Nelze nastavit konfiguraci %s", - "Action does not exist" : "Tato akce neexistuje", - "The Base DN appears to be wrong" : "Base DN nevypadá být v pořádku", - "Testing configuration…" : "Testování konfigurace...", - "Configuration incorrect" : "Nesprávná konfigurace", - "Configuration incomplete" : "Nekompletní konfigurace", - "Configuration OK" : "Konfigurace v pořádku", - "Select groups" : "Vyberte skupiny", - "Select object classes" : "Vyberte objektové třídy", - "Please check the credentials, they seem to be wrong." : "Ověřte své přihlašovací údaje, zdají se být neplatné.", - "Please specify the port, it could not be auto-detected." : "Uveďte prosím port, nelze ho automaticky detekovat.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nelze automaticky detekovat, ověřte prosím přihlašovací údaje, host a port.", - "Could not detect Base DN, please enter it manually." : "Nelze automaticky detekovat Base DN, zadejte prosím ručně.", - "{nthServer}. Server" : "{nthServer}. Server", - "No object found in the given Base DN. Please revise." : "V zadané Base DN nebyl objekt nalezen. Ověřte.", - "More than 1,000 directory entries available." : "Je dostupných více než 1000 adresářů.", - " entries available within the provided Base DN" : "záznamů dostupných v zadané Base DN", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověře prosím Base DN společně s nastavením připojení a přihlašovacími údaji.", - "Do you really want to delete the current Server Configuration?" : "Opravdu si přejete smazat současné nastavení serveru?", - "Confirm Deletion" : "Potvrdit smazání", - "Mappings cleared successfully!" : "Mapování úspěšně vyčištěno!", - "Error while clearing the mappings." : "Chyba při čištění mapování.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymní bind není povolen. Zadejte prosím User DN a Heslo.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operace. Anonymní bind nejspíše není povolen.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukládání selhalo. Ujistěte se, že databáze funguje. Načtěte znovu, než budete pokračovat.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Přepnutí módu povolí automatické LDAP dotazy. V závislosti na velikosti vašeho LDAP může vyhledávání chvíli trvat. Opravdu si přejete přepnout mód?", - "Mode switch" : "Přepnutí módu", - "Select attributes" : "Vyberte atributy", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>", - "User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.", - "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, ale byl nalezen víc než jeden uživatel. Jen ten první se bude moci přihlásit. Zvažte užší filtr.", - "An unspecified error occurred. Please check the settings and the log." : "Došlo k nespecifikované chybě. Zkontrolujte prosím nastavení a soubor logu.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chybí zástupný znak %uid. Bude nahrazen přihlašovacím jménem při dotazování LDAP / AD.", - "Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.", - "Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ", - "LDAP / AD integration" : "LDAP / AD propojení", - "_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"], - "_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.", - "Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost", - "Invalid Host" : "Neplatný hostitel", - "Test Configuration" : "Vyzkoušet nastavení", - "Help" : "Nápověda", - "Groups meeting these criteria are available in %s:" : "Skupiny splňující tyto podmínky jsou k dispozici v %s:", - "Only these object classes:" : "Pouze tyto třídy objektů:", - "Only from these groups:" : "Pouze z těchto skupin:", - "Search groups" : "Prohledat skupiny", - "Available groups" : "Dostupné skupiny", - "Selected groups" : "Vybrané skupiny", - "Edit LDAP Query" : "Upravit LDAP požadavek", - "LDAP Filter:" : "LDAP filtr:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", - "Verify settings and count groups" : "Ověřit nastavení a spočítat skupiny", - "When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, %s bude hledat uživatele na základě následujících atributů:", - "LDAP / AD Username:" : "LDAP / AD uživatelské jméno:", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Umožňuje přihlášení s LDAP / AD uživatelským jménem, které má rozpoznatelnou hodnotu pro uid nebo samaccountname.", - "LDAP / AD Email Address:" : "LDAP / AD emailová adresa:", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Umožňuje přihlášení s atributem emailu. Jsou povoleny Mail a mailPrimaryAddress.", - "Other Attributes:" : "Další atributy:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Určuje použitý filtr při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení. Příklad: \"uid=%%uid\"", - "Test Loginname" : "Testovací přihlašovací jméno", - "Verify settings" : "Ověřit nastavení", - "1. Server" : "1. Server", - "%s. Server:" : "%s. Server:", - "Add a new and blank configuration" : "Přidat novou a prázdnou konfiguraci", - "Copy current configuration into new directory binding" : "Zkopírovat současnou konfiguraci do nového adresářového propojení", - "Delete the current configuration" : "Smazat současnou konfiguraci", - "Host" : "Počítač", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Můžete vynechat protokol, vyjma pokud požadujete SSL. Tehdy začněte s ldaps://", - "Port" : "Port", - "Detect Port" : "Detekovat port", - "User DN" : "Uživatelské 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 klientského uživatele, ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.", - "Password" : "Heslo", - "For anonymous access, leave DN and Password empty." : "Pro anonymní přístup ponechte údaje DN and heslo prázdné.", - "One Base DN per line" : "Jedna základní DN na řádku", - "You can specify Base DN for users and groups in the Advanced tab" : "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny", - "Detect Base DN" : "Detekovat Base DN", - "Test Base DN" : "Test Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře)", - "Listing and searching for users is constrained by these criteria:" : "Získávání a vyhledávání uživatelů je omezeno následujícími kritérii:", - "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." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na svého adresářového správce.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", - "Verify settings and count users" : "Ověřit nastavení a spočítat uživatele", - "Saving" : "Ukládá se", - "Back" : "Zpět", - "Continue" : "Pokračovat", - "LDAP" : "LDAP", - "Server" : "Server", - "Users" : "Uživatelé", - "Login Attributes" : "Přihlašovací atributy", - "Groups" : "Skupiny", - "Expert" : "Expertní", - "Advanced" : "Pokročilé", - "<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>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím svého správce systému o zakázání jedné z nich.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte prosím správce systému, aby jej nainstaloval.", - "Connection Settings" : "Nastavení spojení", - "Configuration Active" : "Nastavení aktivní", - "When unchecked, this configuration will be skipped." : "Pokud není zaškrtnuto, bude toto nastavení přeskočeno.", - "Backup (Replica) Host" : "Záložní (kopie) hostitel", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Zadejte volitelného záložního hostitele. Musí to být kopie hlavního serveru LDAP/AD.", - "Backup (Replica) Port" : "Záložní (kopie) port", - "Disable Main Server" : "Zakázat hlavní server", - "Only connect to the replica server." : "Připojit jen k záložnímu serveru.", - "Turn off SSL certificate validation." : "Vypnout ověřování SSL certifikátu.", - "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." : "Nedoporučuje se, určeno pouze k testovacímu použití. Pokud spojení funguje jen s touto volbou, importujte SSL certifikát vašeho LDAP serveru na server %s.", - "Cache Time-To-Live" : "TTL vyrovnávací paměti", - "in seconds. A change empties the cache." : "v sekundách. Změna vyprázdní vyrovnávací paměť.", - "Directory Settings" : "Nastavení adresáře", - "User Display Name Field" : "Pole zobrazovaného jména uživatele", - "The LDAP attribute to use to generate the user's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména uživatele.", - "2nd User Display Name Field" : "Druhé pole zobrazovaného jména uživatele", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Volitelné. Přidání LDAP atributu v závorkách k zobrazovanému jménu. Vypadá např. jako »John Doe (john.doe@example.org)«.", - "Base User Tree" : "Základní uživatelský strom", - "One User Base DN per line" : "Jedna uživatelská základní DN na řádku", - "User Search Attributes" : "Atributy vyhledávání uživatelů", - "Optional; one attribute per line" : "Volitelné, jeden atribut na řádku", - "Group Display Name Field" : "Pole zobrazovaného jména skupiny", - "The LDAP attribute to use to generate the groups's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména skupiny.", - "Base Group Tree" : "Základní skupinový strom", - "One Group Base DN per line" : "Jedna skupinová základní DN na řádku", - "Group Search Attributes" : "Atributy vyhledávání skupin", - "Group-Member association" : "Asociace člena skupiny", - "Dynamic Group Member URL" : "URL člena dynamické skupiny", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP atribut, který obsahuje pro skupinu objektů vyhledávací LDAP URL, která určuje které objekty patří do skupiny. (Prázdné nastavení vypne funkci člena dynamické skupiny.)", - "Nested Groups" : "Vnořené skupiny", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které obsahují jiné skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN.)", - "Paging chunksize" : "Velikost bloku stránkování", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, které může vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)", - "Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro každého uživatele", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super Administrátorům a skupinovým Administrátorům změnu hesel jejich LDAP uživatelů. Funguje pouze, pokud jsou na LDAP serveru příslušně nakonfigurovány seznamy řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čisté podobě, musí být použito šifrování při transportu a na LDAP serveru by mělo být nakonfigurováno hashování hesel.", - "(New password is sent as plain text to LDAP)" : "(Nové heslo je LDAPu zasláno jako prostý text)", - "Special Attributes" : "Speciální atributy", - "Quota Field" : "Pole pro kvótu", - "Quota Default" : "Výchozí kvóta", - "in bytes" : "v bajtech", - "Email Field" : "Pole emailu", - "User Home Folder Naming Rule" : "Pravidlo pojmenování domovského adresáře uživatele", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Ponechte prázdné pro uživatelské jméno (výchozí). Jinak uveďte LDAP/AD parametr.", - "Internal Username" : "Interní uživatelské jméno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Ponechte jej prázdné, chcete-li zachovat výchozí nastavení. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP.", - "Internal Username Attribute:" : "Atribut interního uživatelského jména:", - "Override UUID detection" : "Nastavit ručně UUID atribut", - "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." : "Ve výchozím nastavení je UUID atribut nalezen automaticky. UUID atribut je používán pro nezpochybnitelnou identifikaci uživatelů a skupin z LDAP. Navíc je na základě UUID tvořeno také interní uživatelské jméno, pokud není nastaveno jinak. Můžete výchozí nastavení přepsat a použít atribut, který sami zvolíte. Musíte se ale ujistit, že atribut, který vyberete, bude uveden jak u uživatelů, tak i u skupin a je unikátní. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele a skupiny z LDAP.", - "UUID Attribute for Users:" : "UUID atribut pro uživatele:", - "UUID Attribute for Groups:" : "UUID atribut pro skupiny:", - "Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAPu", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Uživatelská jména jsou používána pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý LDAP uživatel interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. DN informace je navíc udržována v paměti pro snížení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické pro každou konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, ale pouze v testovací nebo experimentální fázi.", - "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu", - "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, nalezen jeden uživatel. Pouze první se bude moci přihlásit. Zvažte nasazení užšího filtru." -}, -"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json deleted file mode 100644 index fa7a9e932ad..00000000000 --- a/apps/user_ldap/l10n/cs_CZ.json +++ /dev/null @@ -1,167 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Selhalo zrušení mapování.", - "Failed to delete the server configuration" : "Selhalo smazání nastavení serveru", - "The configuration is invalid: anonymous bind is not allowed." : "Tato konfigurace není platná: anonymní bind není povolen.", - "The configuration is valid and the connection could be established!" : "Nastavení je v pořádku a spojení bylo navázáno.", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Konfigurace je v pořádku, ale spojení selhalo. Zkontrolujte prosím nastavení serveru a přihlašovací údaje.", - "The configuration is invalid. Please have a look at the logs for further details." : "Konfigurace je neplatná. Pro bližší informace se podívejte do logu.", - "No action specified" : "Neurčena žádná akce", - "No configuration specified" : "Neurčena žádná konfigurace", - "No data specified" : "Neurčena žádná data", - " Could not set configuration %s" : "Nelze nastavit konfiguraci %s", - "Action does not exist" : "Tato akce neexistuje", - "The Base DN appears to be wrong" : "Base DN nevypadá být v pořádku", - "Testing configuration…" : "Testování konfigurace...", - "Configuration incorrect" : "Nesprávná konfigurace", - "Configuration incomplete" : "Nekompletní konfigurace", - "Configuration OK" : "Konfigurace v pořádku", - "Select groups" : "Vyberte skupiny", - "Select object classes" : "Vyberte objektové třídy", - "Please check the credentials, they seem to be wrong." : "Ověřte své přihlašovací údaje, zdají se být neplatné.", - "Please specify the port, it could not be auto-detected." : "Uveďte prosím port, nelze ho automaticky detekovat.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nelze automaticky detekovat, ověřte prosím přihlašovací údaje, host a port.", - "Could not detect Base DN, please enter it manually." : "Nelze automaticky detekovat Base DN, zadejte prosím ručně.", - "{nthServer}. Server" : "{nthServer}. Server", - "No object found in the given Base DN. Please revise." : "V zadané Base DN nebyl objekt nalezen. Ověřte.", - "More than 1,000 directory entries available." : "Je dostupných více než 1000 adresářů.", - " entries available within the provided Base DN" : "záznamů dostupných v zadané Base DN", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověře prosím Base DN společně s nastavením připojení a přihlašovacími údaji.", - "Do you really want to delete the current Server Configuration?" : "Opravdu si přejete smazat současné nastavení serveru?", - "Confirm Deletion" : "Potvrdit smazání", - "Mappings cleared successfully!" : "Mapování úspěšně vyčištěno!", - "Error while clearing the mappings." : "Chyba při čištění mapování.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymní bind není povolen. Zadejte prosím User DN a Heslo.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operace. Anonymní bind nejspíše není povolen.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukládání selhalo. Ujistěte se, že databáze funguje. Načtěte znovu, než budete pokračovat.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Přepnutí módu povolí automatické LDAP dotazy. V závislosti na velikosti vašeho LDAP může vyhledávání chvíli trvat. Opravdu si přejete přepnout mód?", - "Mode switch" : "Přepnutí módu", - "Select attributes" : "Vyberte atributy", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>", - "User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.", - "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, ale byl nalezen víc než jeden uživatel. Jen ten první se bude moci přihlásit. Zvažte užší filtr.", - "An unspecified error occurred. Please check the settings and the log." : "Došlo k nespecifikované chybě. Zkontrolujte prosím nastavení a soubor logu.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chybí zástupný znak %uid. Bude nahrazen přihlašovacím jménem při dotazování LDAP / AD.", - "Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.", - "Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ", - "LDAP / AD integration" : "LDAP / AD propojení", - "_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"], - "_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.", - "Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost", - "Invalid Host" : "Neplatný hostitel", - "Test Configuration" : "Vyzkoušet nastavení", - "Help" : "Nápověda", - "Groups meeting these criteria are available in %s:" : "Skupiny splňující tyto podmínky jsou k dispozici v %s:", - "Only these object classes:" : "Pouze tyto třídy objektů:", - "Only from these groups:" : "Pouze z těchto skupin:", - "Search groups" : "Prohledat skupiny", - "Available groups" : "Dostupné skupiny", - "Selected groups" : "Vybrané skupiny", - "Edit LDAP Query" : "Upravit LDAP požadavek", - "LDAP Filter:" : "LDAP filtr:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", - "Verify settings and count groups" : "Ověřit nastavení a spočítat skupiny", - "When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, %s bude hledat uživatele na základě následujících atributů:", - "LDAP / AD Username:" : "LDAP / AD uživatelské jméno:", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Umožňuje přihlášení s LDAP / AD uživatelským jménem, které má rozpoznatelnou hodnotu pro uid nebo samaccountname.", - "LDAP / AD Email Address:" : "LDAP / AD emailová adresa:", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Umožňuje přihlášení s atributem emailu. Jsou povoleny Mail a mailPrimaryAddress.", - "Other Attributes:" : "Další atributy:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Určuje použitý filtr při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení. Příklad: \"uid=%%uid\"", - "Test Loginname" : "Testovací přihlašovací jméno", - "Verify settings" : "Ověřit nastavení", - "1. Server" : "1. Server", - "%s. Server:" : "%s. Server:", - "Add a new and blank configuration" : "Přidat novou a prázdnou konfiguraci", - "Copy current configuration into new directory binding" : "Zkopírovat současnou konfiguraci do nového adresářového propojení", - "Delete the current configuration" : "Smazat současnou konfiguraci", - "Host" : "Počítač", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Můžete vynechat protokol, vyjma pokud požadujete SSL. Tehdy začněte s ldaps://", - "Port" : "Port", - "Detect Port" : "Detekovat port", - "User DN" : "Uživatelské 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 klientského uživatele, ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.", - "Password" : "Heslo", - "For anonymous access, leave DN and Password empty." : "Pro anonymní přístup ponechte údaje DN and heslo prázdné.", - "One Base DN per line" : "Jedna základní DN na řádku", - "You can specify Base DN for users and groups in the Advanced tab" : "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny", - "Detect Base DN" : "Detekovat Base DN", - "Test Base DN" : "Test Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře)", - "Listing and searching for users is constrained by these criteria:" : "Získávání a vyhledávání uživatelů je omezeno následujícími kritérii:", - "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." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na svého adresářového správce.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", - "Verify settings and count users" : "Ověřit nastavení a spočítat uživatele", - "Saving" : "Ukládá se", - "Back" : "Zpět", - "Continue" : "Pokračovat", - "LDAP" : "LDAP", - "Server" : "Server", - "Users" : "Uživatelé", - "Login Attributes" : "Přihlašovací atributy", - "Groups" : "Skupiny", - "Expert" : "Expertní", - "Advanced" : "Pokročilé", - "<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>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím svého správce systému o zakázání jedné z nich.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte prosím správce systému, aby jej nainstaloval.", - "Connection Settings" : "Nastavení spojení", - "Configuration Active" : "Nastavení aktivní", - "When unchecked, this configuration will be skipped." : "Pokud není zaškrtnuto, bude toto nastavení přeskočeno.", - "Backup (Replica) Host" : "Záložní (kopie) hostitel", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Zadejte volitelného záložního hostitele. Musí to být kopie hlavního serveru LDAP/AD.", - "Backup (Replica) Port" : "Záložní (kopie) port", - "Disable Main Server" : "Zakázat hlavní server", - "Only connect to the replica server." : "Připojit jen k záložnímu serveru.", - "Turn off SSL certificate validation." : "Vypnout ověřování SSL certifikátu.", - "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." : "Nedoporučuje se, určeno pouze k testovacímu použití. Pokud spojení funguje jen s touto volbou, importujte SSL certifikát vašeho LDAP serveru na server %s.", - "Cache Time-To-Live" : "TTL vyrovnávací paměti", - "in seconds. A change empties the cache." : "v sekundách. Změna vyprázdní vyrovnávací paměť.", - "Directory Settings" : "Nastavení adresáře", - "User Display Name Field" : "Pole zobrazovaného jména uživatele", - "The LDAP attribute to use to generate the user's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména uživatele.", - "2nd User Display Name Field" : "Druhé pole zobrazovaného jména uživatele", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Volitelné. Přidání LDAP atributu v závorkách k zobrazovanému jménu. Vypadá např. jako »John Doe (john.doe@example.org)«.", - "Base User Tree" : "Základní uživatelský strom", - "One User Base DN per line" : "Jedna uživatelská základní DN na řádku", - "User Search Attributes" : "Atributy vyhledávání uživatelů", - "Optional; one attribute per line" : "Volitelné, jeden atribut na řádku", - "Group Display Name Field" : "Pole zobrazovaného jména skupiny", - "The LDAP attribute to use to generate the groups's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména skupiny.", - "Base Group Tree" : "Základní skupinový strom", - "One Group Base DN per line" : "Jedna skupinová základní DN na řádku", - "Group Search Attributes" : "Atributy vyhledávání skupin", - "Group-Member association" : "Asociace člena skupiny", - "Dynamic Group Member URL" : "URL člena dynamické skupiny", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP atribut, který obsahuje pro skupinu objektů vyhledávací LDAP URL, která určuje které objekty patří do skupiny. (Prázdné nastavení vypne funkci člena dynamické skupiny.)", - "Nested Groups" : "Vnořené skupiny", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které obsahují jiné skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN.)", - "Paging chunksize" : "Velikost bloku stránkování", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, které může vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)", - "Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro každého uživatele", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super Administrátorům a skupinovým Administrátorům změnu hesel jejich LDAP uživatelů. Funguje pouze, pokud jsou na LDAP serveru příslušně nakonfigurovány seznamy řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čisté podobě, musí být použito šifrování při transportu a na LDAP serveru by mělo být nakonfigurováno hashování hesel.", - "(New password is sent as plain text to LDAP)" : "(Nové heslo je LDAPu zasláno jako prostý text)", - "Special Attributes" : "Speciální atributy", - "Quota Field" : "Pole pro kvótu", - "Quota Default" : "Výchozí kvóta", - "in bytes" : "v bajtech", - "Email Field" : "Pole emailu", - "User Home Folder Naming Rule" : "Pravidlo pojmenování domovského adresáře uživatele", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Ponechte prázdné pro uživatelské jméno (výchozí). Jinak uveďte LDAP/AD parametr.", - "Internal Username" : "Interní uživatelské jméno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Ponechte jej prázdné, chcete-li zachovat výchozí nastavení. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP.", - "Internal Username Attribute:" : "Atribut interního uživatelského jména:", - "Override UUID detection" : "Nastavit ručně UUID atribut", - "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." : "Ve výchozím nastavení je UUID atribut nalezen automaticky. UUID atribut je používán pro nezpochybnitelnou identifikaci uživatelů a skupin z LDAP. Navíc je na základě UUID tvořeno také interní uživatelské jméno, pokud není nastaveno jinak. Můžete výchozí nastavení přepsat a použít atribut, který sami zvolíte. Musíte se ale ujistit, že atribut, který vyberete, bude uveden jak u uživatelů, tak i u skupin a je unikátní. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele a skupiny z LDAP.", - "UUID Attribute for Users:" : "UUID atribut pro uživatele:", - "UUID Attribute for Groups:" : "UUID atribut pro skupiny:", - "Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAPu", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Uživatelská jména jsou používána pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý LDAP uživatel interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. DN informace je navíc udržována v paměti pro snížení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické pro každou konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, ale pouze v testovací nebo experimentální fázi.", - "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu", - "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, nalezen jeden uživatel. Pouze první se bude moci přihlásit. Zvažte nasazení užšího filtru." -},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/cy_GB.js b/apps/user_ldap/l10n/cy_GB.js deleted file mode 100644 index 3d47b3b4e66..00000000000 --- a/apps/user_ldap/l10n/cy_GB.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "Defnyddwyr", - "Groups" : "Grwpiau", - "Help" : "Cymorth", - "Password" : "Cyfrinair", - "Advanced" : "Uwch" -}, -"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); diff --git a/apps/user_ldap/l10n/cy_GB.json b/apps/user_ldap/l10n/cy_GB.json deleted file mode 100644 index 8140e36f49d..00000000000 --- a/apps/user_ldap/l10n/cy_GB.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "Users" : "Defnyddwyr", - "Groups" : "Grwpiau", - "Help" : "Cymorth", - "Password" : "Cyfrinair", - "Advanced" : "Uwch" -},"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/da.js b/apps/user_ldap/l10n/da.js index 56201a27c73..0c909bddbf0 100644 --- a/apps/user_ldap/l10n/da.js +++ b/apps/user_ldap/l10n/da.js @@ -1,192 +1,239 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "Mislykkedes med at rydde delingerne.", - "Failed to delete the server configuration" : "Kunne ikke slette server konfigurationen", + "Failed to clear the mappings." : "Det lykkedes ikke at rydde tilknytningen.", + "Failed to delete the server configuration" : "Kunne ikke slette serverkonfigurationen", "Invalid configuration: Anonymous binding is not allowed." : "Ugyldig konfiguration: Anonym binding er ikke tilladt.", "Valid configuration, connection established!" : "Gyldig konfiguration, forbindelse etableret!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Gyldig konfiguration, men forbindelsen mislykkedes. Tjek venligst serverens indstillinger og brugeroplysninger.", - "Invalid configuration. Please have a look at the logs for further details." : "Ikke gyldig konfiguration. Kig venligst på logfilerne for mere information.", - "No action specified" : "Der er ikke angivet en handling", - "No configuration specified" : "Der er ikke angivet en konfiguration", - "No data specified" : "Der er ikke angivet data", - " Could not set configuration %s" : "Kunne ikke indstille konfigurationen %s", - "Action does not exist" : "Handlingen findes ikke", - "Renewing …" : "Fornyer...", - "Very weak password" : "Meget svagt password", - "Weak password" : "Svagt password", - "So-so password" : "Jævnt password", - "Good password" : "Godt password", - "Strong password" : "Stærkt password", - "The Base DN appears to be wrong" : "Base DN'et ser ud til at være forkert", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Gyldig konfiguration, men binding mislykkedes. Tjek serverindstillingerne og legitimationerne.", + "Invalid configuration: %s" : "Ugyldig konfiguration: %s", + "No action specified" : "Ingen handling angivet", + "No configuration specified" : "Ingen konfiguration angivet", + "No data specified" : "Ingen data angivet", + "Invalid data specified" : "Ugyldige data angivet", + "Could not set configuration %1$s to %2$s" : "Kunne ikke indstille konfigurationen %1$s til %2$s", + "Action does not exist" : "Handling eksisterer ikke", + "Renewing …" : "Fornyer ...", + "Very weak password" : "Meget svag adgangskode", + "Weak password" : "Svækket adgangskode", + "So-so password" : "So-so adgangskode", + "Good password" : "God adgangskode", + "Strong password" : "Stærk adgangskode", + "The Base DN appears to be wrong" : "Base DN synes at være forkert", "Testing configuration…" : "Tester konfiguration...", - "Configuration incorrect" : "Konfigurationen er ikke korrekt", - "Configuration incomplete" : "Konfigurationen er ikke komplet", - "Configuration OK" : "Konfigurationen er OK", + "Configuration incorrect" : "Konfiguration forkert", + "Configuration incomplete" : "Konfiguration ufuldstændig", + "Configuration OK" : "Konfiguration OK", "Select groups" : "Vælg grupper", "Select object classes" : "Vælg objektklasser", - "Please check the credentials, they seem to be wrong." : "Tjek venligst brugeroplysningerne - de ser ud til at være forkerte.", - "Please specify the port, it could not be auto-detected." : "Angiv venligst porten - den kunne ikke registreres automatisk.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN kunne ikke registreres automatisk - gennemse venligst brugeroplysningerne, vært og port.", - "Could not detect Base DN, please enter it manually." : "Kunne ikke registrere Base DN - angiv den venligst manuelt.", - "{nthServer}. Server" : "{nthServer}. server", - "No object found in the given Base DN. Please revise." : "Intet objekt fundet i den givne Base DN. Gennemse venligst.", - "More than 1,000 directory entries available." : "Mere end 1.000 mappeposter tilgængelige", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} objekter tilgængelige indenfor den angivne Base DN","{objectsFound} objekter tilgængelige indenfor den angivne Base DN"], - "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?", + "Please check the credentials, they seem to be wrong." : "Tjek venligst legitimationerne.", + "Please specify the port, it could not be auto-detected." : "Angiv porten, den kunne ikke detekteres automatisk.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN kunne ikke detekteres automatisk, skal du revidere legitimation, vært og port.", + "Could not detect Base DN, please enter it manually." : "Kunne ikke detektere Base DN, skal du indtaste det manuelt.", + "{nthServer}. Server" : "{nthServer}. Server", + "No object found in the given Base DN. Please revise." : "Intet objekt fundet i den givne base DN. Vær venlig at revidere.", + "More than 1,000 directory entries available." : "Mere end 1.000 mappeindgange til rådighed.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} indgang tilgængelig i den givne Base DN","{objectsFound} poster tilgængelige inden for den givne Base DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Der opstod en fejl. Tjek venligst Base DN samt tilslutningsindstillinger og legitimationsoplysninger.", + "Do you really want to delete the current Server Configuration?" : "Vil du virkelig slette den aktuelle server konfiguration?", "Confirm Deletion" : "Bekræft sletning", - "Mappings cleared successfully!" : "Tilknytningerne blev ryddet af vejen!", + "Mappings cleared successfully!" : "Mappings ryddet med succes!", "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.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Skift af tilstanden vil betyde aktivering af automatiske LDAP-forespørgsler. Afhængig af størrelsen på din LDAP, vil det kunne tage noget tid. Ønsker du stadig at ændre tilstanden?", - "Mode switch" : "Skift af tilstand", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym binding er ikke tilladt. Giv venligst en bruger DN og adgangskode.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP Operationsfejl. Anonym binding er måske ikke tilladt.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Gemning mislykkedes. Sørg for, at databasen er i drift. Genindlæs før du fortsætter.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Skifter tilstand vil aktivere automatisk LDAP forespørgsler. Afhængig af din LDAP størrelse kan de tage et stykke tid. Vil du stadig skifte tilstand?", + "Mode switch" : "Tilstandsafbryder", "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.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Overvej at lave en mere præcis søgning pga. den rammer mange brugere og kun den første er i stand til at logge ind.", - "An unspecified error occurred. Please check log and settings." : "Der skete en uspecificeret fejl . Tjek log og indstillinger.", - "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.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Pladsholderen for %uid mangler. Den vil blive erstattes med loginnavnet, når LDAP/AD forespørges.", - "Please provide a login name to test against" : "Angiv venligst et loginnavn for at teste mod", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen var slået fra, fordi LDAP/AD-serveren ikke understøtter memberOf.", - "Password change rejected. Hint: " : "Kodeord ændring afvist. Hint:", - "Please login with the new password" : "Log venligst ind med dit nye password", - "LDAP User backend" : "LDAP Bruger-backend", - "Your password will expire tomorrow." : "Dit password udløber i morgen.", - "Your password will expire today." : "Dit password udløber i dag.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Dit password udløber om en dag.","Dit password udløber om %n dage."], - "LDAP / AD integration" : "LDAP / AD integration", - "_%s group found_::_%s groups found_" : ["Der blev fundet %s gruppe","Der blev fundet %s grupper"], - "_%s user found_::_%s users found_" : ["Der blev fundet %s bruger","Der blev fundet %s brugere"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kunne ikke registrere navneattributten for visning af bruger. Angiv den venligst selv i de avancerede LDAP-indstillinger.", - "Could not find the desired feature" : "Fandt ikke den ønskede funktion", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Brugeren ikke fundet. Tjek venligst dine login attributter og brugernavn. Effektiv filter (til copy- and - paste til kommandolinjevalidering): < br / >", + "User found and settings verified." : "Bruger fundet og indstillinger verificeret.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Overvej at indsnævre din søgning, som det omfattede mange brugere, kun den første af dem vil være i stand til at logge ind.", + "An unspecified error occurred. Please check log and settings." : "En uspecificeret fejl opstod. Tjek log og indstillinger.", + "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 syntaksspørgsmål som ulige antal åbne og lukkede parenteser. Vær venlig at revidere.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "En forbindelsesfejl til LDAP / AD opstod. Tjek vært, havn og legitimation.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Placeholderen \"%u ID\" mangler. Det vil blive erstattet med login navn, når du forespørger LDAP / AD.", + "Please provide a login name to test against" : "Angiv et login navn at teste mod", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Gruppefeltet var deaktiveret, fordi LDAP / AD-serveren ikke understøtter memberOf.", + "Password change rejected. Hint: %s" : "Adgangskodeændring afvist. Hint: %s", + "Mandatory field \"%s\" left empty" : "Obligatorisk felt \"%s\" efterladt tom", + "A password is given, but not an LDAP agent" : "En adgangskode er givet, men ikke en LDAP agent", + "No password is given for the user agent" : "Ingen adgangskode er givet for brugeren agent", + "No LDAP base DN was given" : "Ingen LDAP base DN blev givet", + "User base DN is not a subnode of global base DN" : "Brugerbase DN er ikke en subnode af global base DN", + "Group base DN is not a subnode of global base DN" : "Group base DN er ikke en subnode af global base DN", + "Login filter does not contain %s placeholder." : "Login filter indeholder ikke %s pladsholder.", + "Please login with the new password" : "Log ind med den nye adgangskode", + "LDAP User backend" : "LDAP Brugermotor", + "Your password will expire tomorrow." : "Din adgangskode udløber i morgen.", + "Your password will expire today." : "Din adgangskode udløber i dag.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Din adgangskode udløber inden for %n dag.","Din adgangskode udløber inden for %n dage."], + "LDAP/AD integration" : "LDAP / AD integration", + "LDAP Connection" : "LDAP forbindelse", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Binding mislykkedes for denne LDAP- konfiguration:% s","Binding mislykkedes for %n LDAP- konfigurationer: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Søgning mislykkedes for denne LDAP- konfiguration:% s","Søgning mislykkedes for %n LDAP- konfigurationer: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Der er en inaktiv LDAP- konfiguration:% s","Der er %n inaktive LDAP- konfigurationer: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Binding og søgning virker på den konfigurerede LDAP- forbindelse (% s)","Binding og søgning virker på alle %n konfigurerede LDAP- forbindelser (%s)"], + "Invalid LDAP UUIDs" : "Ugyldige LDAP UUID 'er", + "None found" : "Ingen fundet", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Ugyldige UUID 'er for LDAP-konti eller -grupper er fundet. Du bedes gennemgå dine \"Override UUID Detection\" indstillinger i Expert del af LDAP konfiguration og bruge \"occ ldap: update- uuid\" til at opdatere dem.", + "_%n group found_::_%n groups found_" : [" %n gruppe fundet"," %n grupper fundet"], + "> 1000 groups found" : "> 1000 grupper fundet", + "> 1000 users found" : "> 1000 brugere fundet", + "_%n user found_::_%n users found_" : [" %n bruger fundet"," %n brugere fundet"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kunne ikke detektere brugernavn attribut. Angiv det selv i avancerede LDAP-indstillinger.", + "Could not find the desired feature" : "Kunne ikke finde den ønskede funktion", "Invalid Host" : "Ugyldig vært", - "LDAP user and group backend" : "LDAP bruger og gruppe backend", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Denne applikation tillader administrator at forbinde Nextcloud til et LDAP bruger kartotek", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Denne applikation tillader administrator at forbinde Nextcloud til et LDAP bruger kartotek som foretager godkendelse og overførsel af brugere, grupper og bruger egenskaber. Adminstrator kan via LDAP bruger græsnsefladen konfigurere denne applikation til at forbinde til et eller flere LDAP kartoteker eller Active Directories. Egenskaber så som bruger kvota, email, avatar billeder, gruppe tilhørsforhold og andet kan blive overført til nextcloud fra et bibliotek med med de korrekte forspørgsler og filtre. \n\nEn bruger logger ind i Nextcloud med deres LDAP eller AD legitimation og får adgang baseret på en legitimationsforspørgsel håndteret til den tilsluttede LDAP eller AD server. Nextcloud gemmer ikke LDAP eller AD password, men bruger disse til at legitimere en bruger og opsætter en bruger ID for brugerens ophold. Mere information er tilgængelig i LDAP bruger og Group Backend dokumentationen.", - "Test Configuration" : "Test konfigurationen", + "LDAP user and group backend" : "LDAP- bruger og gruppe-motor", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Dette program gør det muligt for administratorer at forbinde Nextcloud til en LDAP- baseret brugermappe.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Dette program gør det muligt for administratorer at forbinde Nextcloud til en LDAP- baseret brugermappe for autentificering og levering brugere, grupper og brugerattributter. Administrerer kan indstille dette program til at oprette forbindelse til en eller flere LDAP- mapper eller aktive mapper via en LDAP- grænseflade. Attributter såsom brugerkvote, e-mail, avatar billeder, gruppe medlemskaber og mere kan trækkes ind Nextcloud fra en mappe med de relevante forespørgsler og filtre.\n\nEn bruger logger ind på Nextcloud med deres LDAP- eller AD-legitimationsoplysninger og får adgang baseret på en autentificeringsanmodning, der håndteres af LDAP- eller AD-serveren. Nextcloud ikke gemme LDAP- eller AD-adgangskoder, snarere disse legitimationsoplysninger bruges til at autentificere en bruger og derefter Nextcloud bruger en session for brugeren ID. Mere information er tilgængelig i LDAP User and Group Backend dokumentation.", + "Test Configuration" : "Prøvningsindstilling", "Help" : "Hjælp", - "Groups meeting these criteria are available in %s:" : "Grupper som opfylder disse kriterier er tilgængelige i %s:", + "Groups meeting these criteria are available in %s:" : "Grupper, der opfylder disse kriterier, er tilgængelige i %s:", "Only these object classes:" : "Kun disse objektklasser:", "Only from these groups:" : "Kun fra disse grupper:", - "Search groups" : "Søg grupper", + "Search groups" : "Søgegrupper", "Available groups" : "Tilgængelige grupper", - "Selected groups" : "Valgte grupper", - "Edit LDAP Query" : "Redigér LDAP-forespørgsel", - "LDAP Filter:" : "LDAP-filter:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret angiver hvilke LDAP-grupper, der skal have adgang til instansen %s.", - "Verify settings and count the groups" : "Verificér indstillinger og optællingsgrupper", - "When logging in, %s will find the user based on the following attributes:" : "Når der logges ind, så vil %s finde brugeren baseret på følgende attributter:", - "LDAP / AD Username:" : "LDAP/AD-brugernavn:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillader login mod LDAP/AD-brugernavnet, hvilket enten er et uid eller »samaccountname«, og vil blive detekteret.", - "LDAP / AD Email Address:" : "E-mailadresser for LDAP/AD:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Tillader login mod en e-mailattribut. Mail og \"mailPrimaryAddress\" vil være tilladt.", + "Selected groups" : "Udvalgte grupper", + "Edit LDAP Query" : "Redigér LDAP Forespørgsel", + "LDAP Filter:" : "LDAP- filter:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret angiver, hvilke LDAP- grupper der skal have adgang til %s eksemplet.", + "Verify settings and count the groups" : "Verificer indstillinger og tæl grupperne", + "When logging in, %s will find the user based on the following attributes:" : "Når du logger ind, vil %s finde brugeren baseret på følgende egenskaber:", + "LDAP/AD Username:" : "LDAP / AD Brugernavn:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillader login mod LDAP / AD brugernavn, som er enten \"uid\" eller \"SAMAccountName\" og vil blive opdaget.", + "LDAP/AD Email Address:" : "LDAP / AD E-mail adresse:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Tillader login mod en e- mail- attribut. \"mail\" og \"mailPrimaryAddress\" tilladt.", "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 filtret der anvendes, når der er forsøg på at logge ind. \"%%uid\" erstattter brugernavnet i login-handlingen. Eksempel: \"uid=%%uid\"", - "Test Loginname" : "Test loginnavn", - "Verify settings" : "Kontrollér indstillinger", - "%s. Server:" : "%s. server:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer det filter der skal anvendes, når login er forsøgt. \"%% uid\" erstatter brugernavnet i login-handlingen. Eksempel: \"uid =%% uid\"", + "Test Loginname" : "Test af loginnavn", + "Attempts to receive a DN for the given loginname and the current login filter" : "Forsøg på at modtage en DN for det givne lognavn og det aktuelle login-filter", + "Verify settings" : "Verificér indstillinger", + "%s. Server:" : "%s. Server:", "Add a new configuration" : "Tilføj en ny konfiguration", - "Copy current configuration into new directory binding" : "Kopiér nuværende konfiguration ind i en ny mappetilknytning", + "Copy current configuration into new directory binding" : "Kopiér nuværende konfiguration til ny mappebinding", "Delete the current configuration" : "Slet den aktuelle konfiguration", "Host" : "Vært", - "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Du kan udelade protokollen, medmindre du skal bruge SSL. Start i så fald med ldaps://", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Du kan udelade protokollen, medmindre du har brug for SSL. Hvis ja, begynd med ldaps: / /", "Port" : "Port", - "Detect Port" : "Registrér port", + "Detect Port" : "Detektér port", "User DN" : "Bruger 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'et for klientbrugeren, for hvilken forbindelsen skal foretages, eks. uid=agent,dc=eksempel,dc=com. For anonym adgang lades DN og Password stå tomme.", - "Password" : "Kodeord", - "For anonymous access, leave DN and Password empty." : "For anonym adgang, skal du lade DN og Adgangskode tomme.", - "Save Credentials" : "Gem brugeroplysninger", - "One Base DN per line" : "Ét Base DN per linje", - "You can specify Base DN for users and groups in the Advanced tab" : "Du kan specificere base DN for brugere og grupper i fanen Advanceret", - "Detect Base DN" : "Registrér Base 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 for klientbrugeren, som bindingen skal udføres med, f.eks. uid = agent, DC = eksempel, DC = com. For anonym adgang, lad DN og Password tom.", + "Password" : "Adgangskode", + "For anonymous access, leave DN and Password empty." : "For anonym adgang, lad DN og Password tom.", + "Save Credentials" : "Gem afstemning", + "One Base DN per line" : "One Base DN pr. linje", + "You can specify Base DN for users and groups in the Advanced tab" : "Du kan angive Base DN for brugere og grupper i fanebladet Avanceret", + "Detect Base DN" : "Detektér base DN", "Test Base DN" : "Test Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undgår automatiske LDAP-forespørgsler. Bedre på større opsætninger, men kræver en del LDAP-kendskab.", - "Manually enter LDAP filters (recommended for large directories)" : "Angiv LDAP-filtre manuelt (anbefales til større kataloger)", - "Listing and searching for users is constrained by these criteria:" : "Listning og søgning af brugere er begrænset af følgende 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" : "Kontrollér indstillinger og optalte brugere", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undgår automatisk LDAP anmodninger. Bedre for større opsætninger, men kræver noget LDAP viden.", + "Manually enter LDAP filters (recommended for large directories)" : "Indtast LDAP- filtre manuelt (anbefales til store mapper)", + "Listing and searching for users is constrained by these criteria:" : "Lister og søgning efter brugere er begrænset af 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 mest almindelige objektklasser for brugere er organisationalPerson, person, bruger og inetOrgPerson. Hvis du ikke er sikker på hvilken objektklasse du skal vælge, bedes du konsultere din mappe- admin.", + "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 tæller brugere", "Saving" : "Gemmer", "Back" : "Tilbage", - "Continue" : "Videre", - "Please renew your password." : "Nulstil venligst dit password.", + "Continue" : "Fortsæt", + "Please renew your password." : "Venligst forny din adgangskode.", "An internal error occurred." : "Der opstod en intern fejl.", - "Please try again or contact your administrator." : "Prøv venligst igen eller kontakt din administrator.", - "Current password" : "Nuværende password", - "New password" : "Nyt password", - "Renew password" : "Forny venligst password", - "Wrong password." : "Forkert password.", + "Please try again or contact your administrator." : "Prøv igen eller kontakt din administrator.", + "Current password" : "Nuværende adgangskode", + "New password" : "Ny adgangskode", + "Renew password" : "Forny adgangskode", + "Wrong password." : "Forkert adgangskode.", "Cancel" : "Annullér", "Server" : "Server", "Users" : "Brugere", - "Login Attributes" : "Login-attributter", + "Login Attributes" : "Login attributter", "Groups" : "Grupper", "Expert" : "Ekspert", "Advanced" : "Avanceret", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP-modulet LDAP er ikke installeret - backend'en vil ikke fungere. Anmod venligst din systemadministrator om at installere det.", - "Connection Settings" : "Forbindelsesindstillinger ", - "Configuration Active" : "Konfiguration er aktiv", - "When unchecked, this configuration will be skipped." : "Hvis der ikke er markeret, så springes denne konfiguration over.", - "Backup (Replica) Host" : "Vært for sikkerhedskopier (replika)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Angiv valgfrit en vært for sikkerhedskopiering. Dette skal være en replikering af den primære LDAP/AD-server.", - "Backup (Replica) Port" : "Port for sikkerhedskopi (replika)", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "< b > Advarsel: < / b > PHP LDAP modulet er ikke installeret, bagenden vil ikke virke. Bed din systemadministrator om at installere den.", + "Connection Settings" : "Forbindelsesindstillinger", + "Configuration Active" : "Indstillingsaktiv", + "When unchecked, this configuration will be skipped." : "Når denne indstilling ikke er markeret, vil den blive sprunget over.", + "Backup (Replica) Host" : "Backup (Replica) vært", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Giv en ekstra backup vært. Det skal være en kopi af hovedserveren LDAP / AD.", + "Backup (Replica) Port" : "Backup (Replica) Port", "Disable Main Server" : "Deaktivér hovedserver", - "Only connect to the replica server." : "Forbind kun til replika serveren.", - "Turn off SSL certificate validation." : "Deaktivér validering af SSL-certifikat.", - "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." : "Anbefales ikke - bruges kun til testformål! Hvis forbindelse udelukkende fungerer med dette tilvalg, så importér LDAP-serverens SSL-certifikat i din %s-server.", - "Cache Time-To-Live" : "Cache levetid", - "in seconds. A change empties the cache." : "i sekunder. En ændring vil tømme cachen.", + "Only connect to the replica server." : "Kun forbindelse til replikaserveren.", + "Turn off SSL certificate validation." : "Sluk validering af SSL-certifikater.", + "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." : "Ikke anbefalet, brug det kun til test! Hvis forbindelsen kun virker med denne indstilling, importeres LDAP- serverens SSL-certifikat i din %s server.", + "Cache Time-To-Live" : "Cache Time-To-Live", + "in seconds. A change empties the cache." : "om få sekunder. En forandring tømmer cachen.", "Directory Settings" : "Mappeindstillinger", - "User Display Name Field" : "Vist brugernavn felt", - "The LDAP attribute to use to generate the user's display name." : "LDAP-attributten som skal bruges til at oprette brugerens viste navn.", - "2nd User Display Name Field" : "Felt for af 2. brugers viste navn", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Valgfri. En LDAP-attribut som tilføjes til vist navn inde i kantede anførselstegn. Giver eks. »John Doe (john.doe@example.org)«.", - "Base User Tree" : "Base Bruger Træ", - "One User Base DN per line" : "Én bruger-Base DN per linje", - "User Search Attributes" : "Attributter for brugersøgning", - "Optional; one attribute per line" : "Valgfrit; én attribut per linje", - "Group Display Name Field" : "Navnefelt for gruppevisning", - "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributten som skal bruges til at oprette gruppens viste navn.", - "Base Group Tree" : "Base Group Tree", - "One Group Base DN per line" : "Ét gruppe-Base DN per linje", - "Group Search Attributes" : "Attributter for gruppesøgning", - "Group-Member association" : "Guppemedlem forening", - "Dynamic Group Member URL" : "URL for dynamisk gruppemedlem", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Den LDAP-attribut, som på gruppeobjekter indeholder en URL for LDAP-søgning, der afgør hvilke objekter som tilhører gruppen. (En værdiløs indstilling deaktiverer funktionalitet for dynamisk gruppemedlemskab.)", - "Nested Groups" : "Indlejrede grupper", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Når slået til, så vil grupper som rummer grupper blive understøttet. (Dette fungerer kun, hvis attributten for gruppemedlem indeholder DN'er.)", - "Paging chunksize" : "Fragmentstørrelse for sideinddeling", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Fragmentstørrelse som bruges til sideinddelte LDAP-søgninger, der kan returnere omfattende resultater såsom bruger eller gruppe-optælling. (Angivelse til 0 vil slå sideinddelte LDAP-søgninger fra for disse situationer.)", - "Enable LDAP password changes per user" : "Aktivér ændringer i LDAP-adgangskoder per bruger", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Tillader at LDAP-brugere kan ændre deres adgangskode og tillader Superadministratorer og Gruppeadministratorer, at ændre adgangskoden for deres LDAP-brugere. Dette virker kun, hvis rettigheder for adgangskontrol er konfigureret tilsvarende på LDAP-serveren. Da adgangskoder sendes som klartekst til LDAP-serveren, så skal der anvendes en transportkryptering, samtidig som der bør være konfigureret således, at der sker en hashing af adgangskoder på LDAP-serveren.", - "(New password is sent as plain text to LDAP)" : "(Ny adgangskode sendes som klartekst til LDAP)", - "Default password policy DN" : "Standard password politik DN", - "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN for en standard password politik vil blive brugt til at håndtere udløb af password. Virker kun når LDAP password ændringer pr. bruger er aktiveret og understøtter kun OpenLDAP. Efterlad tom for at deaktivere håndtering password udløb.", - "Special Attributes" : "Specielle attributter", - "Quota Field" : "Kvote Felt", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Lad stå tom for brugerens standardkvota. Alternativt angives en LDAP/AD-attribut.", - "Quota Default" : "Standard for kvota", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Tilsidesætter standardkvota for LDAP-brugere, der ikke har fået angivet en kvota i feltet Kvota.", - "Email Field" : "Felt for e-mail", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Angiver brugerens e-mail fra deres LDAP-attribut. Lad stå tom for standardadfærd.", - "User Home Folder Naming Rule" : "Navneregel for brugerens hjemmemappe", - "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home i en ekstern lager konfiguration vil blive ombyttet med indholdet af den specificerede attribut", - "Internal Username" : "Internt Brugernavn", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som udgangspunkt bliver det interne brugernavn oprettet ud fra UUID-attributten. Dette sikrer at brugernavnet er unikt og at ikke nødvendigt at konvertere tegn. Det interne brugernavn har den begrænsning, at alene følgende tegn tillades: [ a-zA-Z0-9_.@- ]. Andre tegn bliver erstattet med deres ASCI-korrespondent eller simpelthen udeladt. I tilfælde af kollisioner tilføjes/forøges et tal. Det interne brugernavn bruges til at identificere en bruger internt. Dette er også standardnavnet for en brugers hjemmemappe. Det er også en del af fjern-URL'er, eks. for alle *DAV-tjenester. Med denne indstilling kan standardadfærden tilsidesættes. Lad den stå tom for standardadfærden. Ændringer vil alene påvirke nyligt kortlagte (tilføjede) LDAP-brugere.", - "Internal Username Attribute:" : "Internt attribut for brugernavn:", - "Override UUID detection" : "Tilsidesæt UUID-detektering", - "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." : "Som udgangspunkt registreres UUID-attributten automatisk. UUID-attributten bruges til entydig identificering af LDAP-brugere og -grupper. I tillæg vil det interne brugernavn blive oprettes på basis af UUID'et, hvis andet ikke angives ovenfor. Du kan tilsidesætte indstillingen og angive en attribut efter eget valg. Du skal sørge for at dén attribut du selv vælger, kan hentes for både brugere og grupper, samt at den er unik. Lad stå tom for standardadfærd. Ændringer vil kun påvirke nyilgt kortlagte (tilføjede) LDAP-brugere og -grupper.", - "UUID Attribute for Users:" : "UUID-attribut for brugere:", - "UUID Attribute for Groups:" : "UUID-attribut for grupper:", - "Username-LDAP User Mapping" : "Kortlægning mellem brugernavn og LDAP-bruger", - "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Brugernavne bruges til at lagre og tildele metadata. For at kunne identificere og genkende brugere præcist, vil hver LDAP-bruger få oprettet et internt brugernavn. Det oprettede brugernavn svarer til UUID'et for LDAP-brugeren. I tillæg mellemlagres DN'et for at mindske LDAP-interaktioner, men det mellemlagrede benyttes ikke til identifikation. Hvis DN'et ændres, vil ændringerne blive registreret. Det interne brugernavn anvendes overalt. Hvis kortlægningerne ryddes, så vil der være rester overalt. Rydning af kortlægningerne er ikke konfigurationssensitivt - det påvirker alle LDAP-konfigurationer! Ryd aldrig kortlægningerne i et produktionsmiljø, kun i et teststadie eller eksperimentelt stadie.", - "Clear Username-LDAP User Mapping" : "Ryd kortlægning mellem brugernavn og LDAP-bruger", - "Clear Groupname-LDAP Group Mapping" : "Ryd kortlægning mellem gruppenavn og LDAP-gruppe" + "User Display Name Field" : "Brugervisningsnavnefelt", + "The LDAP attribute to use to generate the user's display name." : "LDAP attributten der skal bruges til at generere brugerens visningsnavn.", + "2nd User Display Name Field" : "2. brugervisningsnavnefelt", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Valgfrit. En LDAP-attribut, der skal tilføjes til visningsnavnet i parentes. Resultater i f.eks. \"John Doe (john.doe @ example.org)\".", + "Base User Tree" : "Base brugertræ", + "One User Base DN per line" : "One User Base DN per linje", + "User Search Attributes" : "Brugersøgningsattributter", + "Optional; one attribute per line" : "Valgfrit; én attribut pr. linje", + "Disable users missing from LDAP" : "Deaktiver brugere mangler fra LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Når der tændes, vil brugere importeret fra LDAP, som så mangler, blive deaktiveret", + "Group Display Name Field" : "Gruppevisning Navnefelt", + "The LDAP attribute to use to generate the groups's display name." : "LDAP attributten der skal bruges til at generere gruppernes visningsnavn.", + "Base Group Tree" : "Base gruppe træ", + "One Group Base DN per line" : "One Group Base DN pr. linje", + "Group Search Attributes" : "Gruppesøgeattributter", + "Group-Member association" : "Sammenslutning af medlemmer", + "Dynamic Group Member URL" : "Name", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Den LDAP attribut, der på gruppe objekter indeholder en LDAP søgning URL, der bestemmer, hvad objekter tilhører gruppen. (En tom indstilling deaktiverer dynamisk gruppemedlemskab funktionalitet.)", + "Nested Groups" : "Indfødte grupper", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Når de er tændt, understøttes grupper som indeholder grupper. (Virker kun, hvis attributten for gruppemedlemmer indeholder DNs.)", + "Paging chunksize" : "Sidestørrelse", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize bruges til sidestillede LDAP søgninger, der kan returnere store resultater som bruger eller gruppe optælling. (Indstiller det 0 deaktiverer bilagte LDAP søgninger i disse situationer.)", + "Enable LDAP password changes per user" : "Aktivér ændringer af LDAP- adgangskode pr. bruger", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Tillad LDAP-brugere at ændre deres adgangskode og tillade Super Administratorer og Group Administratorer at ændre adgangskoden for deres LDAP-brugere. Fungerer kun når adgangskontrolpolitikker er konfigureret i overensstemmelse hermed på LDAP- serveren. Da adgangskoder sendes i klartekst til LDAP- serveren, skal der bruges transportkryptering og password hashing skal indstilles på LDAP- serveren.", + "(New password is sent as plain text to LDAP)" : "(Ny adgangskode sendes som almindelig tekst til LDAP)", + "Default password policy DN" : "Standard kodeordspolitik DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN for en standard kodeord politik, der vil blive brugt til kodeord udløbshåndtering. Fungerer kun når LDAP- kodeord ændres per bruger er aktiveret og understøttes kun af OpenLDAP. Lad tom for at deaktivere password udløbshåndtering.", + "Special Attributes" : "Særlige attributter", + "Quota Field" : "Kontingentfelt", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Efterlad tom for brugerens standardkvote. Ellers angives en LDAP- / AD-attribut.", + "Quota Default" : "Kvotestandard", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Overskrid standardkvote for LDAP-brugere, der ikke har en kvote fastsat i kvotefeltet.", + "Email Field" : "E-mail felt", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Sæt brugerens e-mail fra deres LDAP attribut. Lad den stå tom for standardadfærd.", + "User Home Folder Naming Rule" : "User Home Folder Naming Rule", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Efterlad tomt for brugernavn (standard). Ellers angives en LDAP- / AD-attribut.", + "\"$home\" Placeholder Field" : "\"$home\" Placeholder Field", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home i en ekstern lagerkonfiguration vil blive erstattet med værdien af den angivne attribut", + "User Profile Attributes" : "Brugerprofilattributter", + "Phone Field" : "Telefon felt", + "User profile Phone will be set from the specified attribute" : "Brugerprofil Telefonen vil blive sat fra den angivne attribut", + "Website Field" : "Webstedsfelt", + "User profile Website will be set from the specified attribute" : "Brugerprofil Websted vil blive sat fra den angivne attribut", + "Address Field" : "Adresse felt", + "User profile Address will be set from the specified attribute" : "Brugerprofiladresse vil blive sat fra den angivne attribut", + "Twitter Field" : "Twitter felt", + "User profile Twitter will be set from the specified attribute" : "Brugerprofil Twitter vil blive sat fra den angivne attribut", + "Fediverse Field" : "Fediverse felt", + "User profile Fediverse will be set from the specified attribute" : "Brugerprofil Fediverse vil blive sat fra den angivne attribut", + "Organisation Field" : "Organisationsfelt", + "User profile Organisation will be set from the specified attribute" : "Brugerprofil Organisation vil blive sat fra den angivne attribut", + "Role Field" : "Rollefelt", + "User profile Role will be set from the specified attribute" : "Brugerprofil Rolle vil blive sat fra den angivne attribut", + "Headline Field" : "Overstreg felt", + "User profile Headline will be set from the specified attribute" : "Brugerprofil Overskrift vil blive sat fra den angivne attribut", + "Biography Field" : "Biografifelt", + "User profile Biography will be set from the specified attribute" : "Brugerprofil Biografi vil blive sat fra den angivne attribut", + "Birthdate Field" : "Fødselsdato felt", + "User profile Date of birth will be set from the specified attribute" : "Brugerprofil Fødselsdato vil blive sat fra den angivne attribut", + "Pronouns Field" : "Pronounsfelt", + "User profile Pronouns will be set from the specified attribute" : "Brugerprofil Pronouns vil blive sat fra den angivne attribut", + "Internal Username" : "Intern brugernavn", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Som standard vil det interne brugernavn blive oprettet fra UUID attributten. Det sikrer, at brugernavnet er unikt og tegn behøver ikke at blive konverteret. Det interne brugernavn har den begrænsning, at kun disse tegn er tilladt: [a- zA- Z0- 9 _. @ -]. Andre tegn erstattes med deres ASCII-korrespondance eller udelades simpelthen. Ved kollisioner vil et antal blive tilføjet / forøget. Det interne brugernavn bruges til at identificere en bruger internt. Det er også standardnavnet for brugerens hjemmemappe. Det er også en del af eksterne webadresser, for eksempel for alle DAV-tjenester. Med denne indstilling kan standardadfærden tilsidesættes. Ændringer vil kun have virkning på nykortlagte (tilføjede) LDAP-brugere. Lad det stå tomt for standardadfærd.", + "Internal Username Attribute:" : "Intern brugernavn Attribut:", + "Override UUID detection" : "Tilsidesæt UUID detektering", + "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." : "Som standard detekteres UUID- attributten automatisk. UUID attributten bruges til uden tvivl at identificere LDAP-brugere og grupper. Også, vil det interne brugernavn blive oprettet baseret på UUID, hvis ikke angivet ellers ovenfor. Du kan tilsidesætte indstillingen og videregive en attribut efter dit valg. Du skal sørge for, at attributten for dit valg kan hentes for både brugere og grupper, og det er unikt. Lad det stå tomt for standardadfærd. Ændringer vil kun have virkning på nykortlagte (tilføjede) LDAP-brugere og grupper.", + "UUID Attribute for Users:" : "UUID Attribut for brugere:", + "UUID Attribute for Groups:" : "UUID Attribut for grupper:", + "Username-LDAP User Mapping" : "Brugernavn - LDAP Brugerkortlægning", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Brugernavne bruges til at gemme og tildele metadata. For præcist at identificere og genkende brugere, vil hver LDAP-bruger have et internt brugernavn. Dette kræver en kortlægning fra brugernavn til LDAP-bruger. Det oprettede brugernavn er kortlagt til UUID for LDAP-brugeren. Derudover er DN cache så godt at reducere LDAP interaktion, men det bruges ikke til identifikation. Hvis DN ændres, vil ændringerne blive fundet. Det interne brugernavn bruges over det hele. Rydning af tilknytninger vil have rester overalt. Rydning af tilknytninger er ikke konfiguration følsom, det påvirker alle LDAP konfigurationer! Ryd aldrig maskerne i et produktionsmiljø, kun i et test- eller forsøgsstadium.", + "Clear Username-LDAP User Mapping" : "Ryd brugernavn-LDAP-brugertilknytning", + "Clear Groupname-LDAP Group Mapping" : "Ryd gruppenavn-LDAP-gruppetilknytning", + "Invalid configuration. Please have a look at the logs for further details." : "Ugyldig konfiguration. Se venligst logfilerne for yderligere oplysninger." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/da.json b/apps/user_ldap/l10n/da.json index 39727e3644d..99ad292499e 100644 --- a/apps/user_ldap/l10n/da.json +++ b/apps/user_ldap/l10n/da.json @@ -1,190 +1,237 @@ { "translations": { - "Failed to clear the mappings." : "Mislykkedes med at rydde delingerne.", - "Failed to delete the server configuration" : "Kunne ikke slette server konfigurationen", + "Failed to clear the mappings." : "Det lykkedes ikke at rydde tilknytningen.", + "Failed to delete the server configuration" : "Kunne ikke slette serverkonfigurationen", "Invalid configuration: Anonymous binding is not allowed." : "Ugyldig konfiguration: Anonym binding er ikke tilladt.", "Valid configuration, connection established!" : "Gyldig konfiguration, forbindelse etableret!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Gyldig konfiguration, men forbindelsen mislykkedes. Tjek venligst serverens indstillinger og brugeroplysninger.", - "Invalid configuration. Please have a look at the logs for further details." : "Ikke gyldig konfiguration. Kig venligst på logfilerne for mere information.", - "No action specified" : "Der er ikke angivet en handling", - "No configuration specified" : "Der er ikke angivet en konfiguration", - "No data specified" : "Der er ikke angivet data", - " Could not set configuration %s" : "Kunne ikke indstille konfigurationen %s", - "Action does not exist" : "Handlingen findes ikke", - "Renewing …" : "Fornyer...", - "Very weak password" : "Meget svagt password", - "Weak password" : "Svagt password", - "So-so password" : "Jævnt password", - "Good password" : "Godt password", - "Strong password" : "Stærkt password", - "The Base DN appears to be wrong" : "Base DN'et ser ud til at være forkert", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Gyldig konfiguration, men binding mislykkedes. Tjek serverindstillingerne og legitimationerne.", + "Invalid configuration: %s" : "Ugyldig konfiguration: %s", + "No action specified" : "Ingen handling angivet", + "No configuration specified" : "Ingen konfiguration angivet", + "No data specified" : "Ingen data angivet", + "Invalid data specified" : "Ugyldige data angivet", + "Could not set configuration %1$s to %2$s" : "Kunne ikke indstille konfigurationen %1$s til %2$s", + "Action does not exist" : "Handling eksisterer ikke", + "Renewing …" : "Fornyer ...", + "Very weak password" : "Meget svag adgangskode", + "Weak password" : "Svækket adgangskode", + "So-so password" : "So-so adgangskode", + "Good password" : "God adgangskode", + "Strong password" : "Stærk adgangskode", + "The Base DN appears to be wrong" : "Base DN synes at være forkert", "Testing configuration…" : "Tester konfiguration...", - "Configuration incorrect" : "Konfigurationen er ikke korrekt", - "Configuration incomplete" : "Konfigurationen er ikke komplet", - "Configuration OK" : "Konfigurationen er OK", + "Configuration incorrect" : "Konfiguration forkert", + "Configuration incomplete" : "Konfiguration ufuldstændig", + "Configuration OK" : "Konfiguration OK", "Select groups" : "Vælg grupper", "Select object classes" : "Vælg objektklasser", - "Please check the credentials, they seem to be wrong." : "Tjek venligst brugeroplysningerne - de ser ud til at være forkerte.", - "Please specify the port, it could not be auto-detected." : "Angiv venligst porten - den kunne ikke registreres automatisk.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN kunne ikke registreres automatisk - gennemse venligst brugeroplysningerne, vært og port.", - "Could not detect Base DN, please enter it manually." : "Kunne ikke registrere Base DN - angiv den venligst manuelt.", - "{nthServer}. Server" : "{nthServer}. server", - "No object found in the given Base DN. Please revise." : "Intet objekt fundet i den givne Base DN. Gennemse venligst.", - "More than 1,000 directory entries available." : "Mere end 1.000 mappeposter tilgængelige", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} objekter tilgængelige indenfor den angivne Base DN","{objectsFound} objekter tilgængelige indenfor den angivne Base DN"], - "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?", + "Please check the credentials, they seem to be wrong." : "Tjek venligst legitimationerne.", + "Please specify the port, it could not be auto-detected." : "Angiv porten, den kunne ikke detekteres automatisk.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN kunne ikke detekteres automatisk, skal du revidere legitimation, vært og port.", + "Could not detect Base DN, please enter it manually." : "Kunne ikke detektere Base DN, skal du indtaste det manuelt.", + "{nthServer}. Server" : "{nthServer}. Server", + "No object found in the given Base DN. Please revise." : "Intet objekt fundet i den givne base DN. Vær venlig at revidere.", + "More than 1,000 directory entries available." : "Mere end 1.000 mappeindgange til rådighed.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} indgang tilgængelig i den givne Base DN","{objectsFound} poster tilgængelige inden for den givne Base DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Der opstod en fejl. Tjek venligst Base DN samt tilslutningsindstillinger og legitimationsoplysninger.", + "Do you really want to delete the current Server Configuration?" : "Vil du virkelig slette den aktuelle server konfiguration?", "Confirm Deletion" : "Bekræft sletning", - "Mappings cleared successfully!" : "Tilknytningerne blev ryddet af vejen!", + "Mappings cleared successfully!" : "Mappings ryddet med succes!", "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.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Skift af tilstanden vil betyde aktivering af automatiske LDAP-forespørgsler. Afhængig af størrelsen på din LDAP, vil det kunne tage noget tid. Ønsker du stadig at ændre tilstanden?", - "Mode switch" : "Skift af tilstand", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym binding er ikke tilladt. Giv venligst en bruger DN og adgangskode.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP Operationsfejl. Anonym binding er måske ikke tilladt.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Gemning mislykkedes. Sørg for, at databasen er i drift. Genindlæs før du fortsætter.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Skifter tilstand vil aktivere automatisk LDAP forespørgsler. Afhængig af din LDAP størrelse kan de tage et stykke tid. Vil du stadig skifte tilstand?", + "Mode switch" : "Tilstandsafbryder", "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.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Overvej at lave en mere præcis søgning pga. den rammer mange brugere og kun den første er i stand til at logge ind.", - "An unspecified error occurred. Please check log and settings." : "Der skete en uspecificeret fejl . Tjek log og indstillinger.", - "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.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Pladsholderen for %uid mangler. Den vil blive erstattes med loginnavnet, når LDAP/AD forespørges.", - "Please provide a login name to test against" : "Angiv venligst et loginnavn for at teste mod", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen var slået fra, fordi LDAP/AD-serveren ikke understøtter memberOf.", - "Password change rejected. Hint: " : "Kodeord ændring afvist. Hint:", - "Please login with the new password" : "Log venligst ind med dit nye password", - "LDAP User backend" : "LDAP Bruger-backend", - "Your password will expire tomorrow." : "Dit password udløber i morgen.", - "Your password will expire today." : "Dit password udløber i dag.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Dit password udløber om en dag.","Dit password udløber om %n dage."], - "LDAP / AD integration" : "LDAP / AD integration", - "_%s group found_::_%s groups found_" : ["Der blev fundet %s gruppe","Der blev fundet %s grupper"], - "_%s user found_::_%s users found_" : ["Der blev fundet %s bruger","Der blev fundet %s brugere"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kunne ikke registrere navneattributten for visning af bruger. Angiv den venligst selv i de avancerede LDAP-indstillinger.", - "Could not find the desired feature" : "Fandt ikke den ønskede funktion", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Brugeren ikke fundet. Tjek venligst dine login attributter og brugernavn. Effektiv filter (til copy- and - paste til kommandolinjevalidering): < br / >", + "User found and settings verified." : "Bruger fundet og indstillinger verificeret.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Overvej at indsnævre din søgning, som det omfattede mange brugere, kun den første af dem vil være i stand til at logge ind.", + "An unspecified error occurred. Please check log and settings." : "En uspecificeret fejl opstod. Tjek log og indstillinger.", + "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 syntaksspørgsmål som ulige antal åbne og lukkede parenteser. Vær venlig at revidere.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "En forbindelsesfejl til LDAP / AD opstod. Tjek vært, havn og legitimation.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Placeholderen \"%u ID\" mangler. Det vil blive erstattet med login navn, når du forespørger LDAP / AD.", + "Please provide a login name to test against" : "Angiv et login navn at teste mod", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Gruppefeltet var deaktiveret, fordi LDAP / AD-serveren ikke understøtter memberOf.", + "Password change rejected. Hint: %s" : "Adgangskodeændring afvist. Hint: %s", + "Mandatory field \"%s\" left empty" : "Obligatorisk felt \"%s\" efterladt tom", + "A password is given, but not an LDAP agent" : "En adgangskode er givet, men ikke en LDAP agent", + "No password is given for the user agent" : "Ingen adgangskode er givet for brugeren agent", + "No LDAP base DN was given" : "Ingen LDAP base DN blev givet", + "User base DN is not a subnode of global base DN" : "Brugerbase DN er ikke en subnode af global base DN", + "Group base DN is not a subnode of global base DN" : "Group base DN er ikke en subnode af global base DN", + "Login filter does not contain %s placeholder." : "Login filter indeholder ikke %s pladsholder.", + "Please login with the new password" : "Log ind med den nye adgangskode", + "LDAP User backend" : "LDAP Brugermotor", + "Your password will expire tomorrow." : "Din adgangskode udløber i morgen.", + "Your password will expire today." : "Din adgangskode udløber i dag.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Din adgangskode udløber inden for %n dag.","Din adgangskode udløber inden for %n dage."], + "LDAP/AD integration" : "LDAP / AD integration", + "LDAP Connection" : "LDAP forbindelse", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Binding mislykkedes for denne LDAP- konfiguration:% s","Binding mislykkedes for %n LDAP- konfigurationer: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Søgning mislykkedes for denne LDAP- konfiguration:% s","Søgning mislykkedes for %n LDAP- konfigurationer: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Der er en inaktiv LDAP- konfiguration:% s","Der er %n inaktive LDAP- konfigurationer: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Binding og søgning virker på den konfigurerede LDAP- forbindelse (% s)","Binding og søgning virker på alle %n konfigurerede LDAP- forbindelser (%s)"], + "Invalid LDAP UUIDs" : "Ugyldige LDAP UUID 'er", + "None found" : "Ingen fundet", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Ugyldige UUID 'er for LDAP-konti eller -grupper er fundet. Du bedes gennemgå dine \"Override UUID Detection\" indstillinger i Expert del af LDAP konfiguration og bruge \"occ ldap: update- uuid\" til at opdatere dem.", + "_%n group found_::_%n groups found_" : [" %n gruppe fundet"," %n grupper fundet"], + "> 1000 groups found" : "> 1000 grupper fundet", + "> 1000 users found" : "> 1000 brugere fundet", + "_%n user found_::_%n users found_" : [" %n bruger fundet"," %n brugere fundet"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kunne ikke detektere brugernavn attribut. Angiv det selv i avancerede LDAP-indstillinger.", + "Could not find the desired feature" : "Kunne ikke finde den ønskede funktion", "Invalid Host" : "Ugyldig vært", - "LDAP user and group backend" : "LDAP bruger og gruppe backend", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Denne applikation tillader administrator at forbinde Nextcloud til et LDAP bruger kartotek", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Denne applikation tillader administrator at forbinde Nextcloud til et LDAP bruger kartotek som foretager godkendelse og overførsel af brugere, grupper og bruger egenskaber. Adminstrator kan via LDAP bruger græsnsefladen konfigurere denne applikation til at forbinde til et eller flere LDAP kartoteker eller Active Directories. Egenskaber så som bruger kvota, email, avatar billeder, gruppe tilhørsforhold og andet kan blive overført til nextcloud fra et bibliotek med med de korrekte forspørgsler og filtre. \n\nEn bruger logger ind i Nextcloud med deres LDAP eller AD legitimation og får adgang baseret på en legitimationsforspørgsel håndteret til den tilsluttede LDAP eller AD server. Nextcloud gemmer ikke LDAP eller AD password, men bruger disse til at legitimere en bruger og opsætter en bruger ID for brugerens ophold. Mere information er tilgængelig i LDAP bruger og Group Backend dokumentationen.", - "Test Configuration" : "Test konfigurationen", + "LDAP user and group backend" : "LDAP- bruger og gruppe-motor", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Dette program gør det muligt for administratorer at forbinde Nextcloud til en LDAP- baseret brugermappe.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Dette program gør det muligt for administratorer at forbinde Nextcloud til en LDAP- baseret brugermappe for autentificering og levering brugere, grupper og brugerattributter. Administrerer kan indstille dette program til at oprette forbindelse til en eller flere LDAP- mapper eller aktive mapper via en LDAP- grænseflade. Attributter såsom brugerkvote, e-mail, avatar billeder, gruppe medlemskaber og mere kan trækkes ind Nextcloud fra en mappe med de relevante forespørgsler og filtre.\n\nEn bruger logger ind på Nextcloud med deres LDAP- eller AD-legitimationsoplysninger og får adgang baseret på en autentificeringsanmodning, der håndteres af LDAP- eller AD-serveren. Nextcloud ikke gemme LDAP- eller AD-adgangskoder, snarere disse legitimationsoplysninger bruges til at autentificere en bruger og derefter Nextcloud bruger en session for brugeren ID. Mere information er tilgængelig i LDAP User and Group Backend dokumentation.", + "Test Configuration" : "Prøvningsindstilling", "Help" : "Hjælp", - "Groups meeting these criteria are available in %s:" : "Grupper som opfylder disse kriterier er tilgængelige i %s:", + "Groups meeting these criteria are available in %s:" : "Grupper, der opfylder disse kriterier, er tilgængelige i %s:", "Only these object classes:" : "Kun disse objektklasser:", "Only from these groups:" : "Kun fra disse grupper:", - "Search groups" : "Søg grupper", + "Search groups" : "Søgegrupper", "Available groups" : "Tilgængelige grupper", - "Selected groups" : "Valgte grupper", - "Edit LDAP Query" : "Redigér LDAP-forespørgsel", - "LDAP Filter:" : "LDAP-filter:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret angiver hvilke LDAP-grupper, der skal have adgang til instansen %s.", - "Verify settings and count the groups" : "Verificér indstillinger og optællingsgrupper", - "When logging in, %s will find the user based on the following attributes:" : "Når der logges ind, så vil %s finde brugeren baseret på følgende attributter:", - "LDAP / AD Username:" : "LDAP/AD-brugernavn:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillader login mod LDAP/AD-brugernavnet, hvilket enten er et uid eller »samaccountname«, og vil blive detekteret.", - "LDAP / AD Email Address:" : "E-mailadresser for LDAP/AD:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Tillader login mod en e-mailattribut. Mail og \"mailPrimaryAddress\" vil være tilladt.", + "Selected groups" : "Udvalgte grupper", + "Edit LDAP Query" : "Redigér LDAP Forespørgsel", + "LDAP Filter:" : "LDAP- filter:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret angiver, hvilke LDAP- grupper der skal have adgang til %s eksemplet.", + "Verify settings and count the groups" : "Verificer indstillinger og tæl grupperne", + "When logging in, %s will find the user based on the following attributes:" : "Når du logger ind, vil %s finde brugeren baseret på følgende egenskaber:", + "LDAP/AD Username:" : "LDAP / AD Brugernavn:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillader login mod LDAP / AD brugernavn, som er enten \"uid\" eller \"SAMAccountName\" og vil blive opdaget.", + "LDAP/AD Email Address:" : "LDAP / AD E-mail adresse:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Tillader login mod en e- mail- attribut. \"mail\" og \"mailPrimaryAddress\" tilladt.", "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 filtret der anvendes, når der er forsøg på at logge ind. \"%%uid\" erstattter brugernavnet i login-handlingen. Eksempel: \"uid=%%uid\"", - "Test Loginname" : "Test loginnavn", - "Verify settings" : "Kontrollér indstillinger", - "%s. Server:" : "%s. server:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer det filter der skal anvendes, når login er forsøgt. \"%% uid\" erstatter brugernavnet i login-handlingen. Eksempel: \"uid =%% uid\"", + "Test Loginname" : "Test af loginnavn", + "Attempts to receive a DN for the given loginname and the current login filter" : "Forsøg på at modtage en DN for det givne lognavn og det aktuelle login-filter", + "Verify settings" : "Verificér indstillinger", + "%s. Server:" : "%s. Server:", "Add a new configuration" : "Tilføj en ny konfiguration", - "Copy current configuration into new directory binding" : "Kopiér nuværende konfiguration ind i en ny mappetilknytning", + "Copy current configuration into new directory binding" : "Kopiér nuværende konfiguration til ny mappebinding", "Delete the current configuration" : "Slet den aktuelle konfiguration", "Host" : "Vært", - "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Du kan udelade protokollen, medmindre du skal bruge SSL. Start i så fald med ldaps://", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Du kan udelade protokollen, medmindre du har brug for SSL. Hvis ja, begynd med ldaps: / /", "Port" : "Port", - "Detect Port" : "Registrér port", + "Detect Port" : "Detektér port", "User DN" : "Bruger 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'et for klientbrugeren, for hvilken forbindelsen skal foretages, eks. uid=agent,dc=eksempel,dc=com. For anonym adgang lades DN og Password stå tomme.", - "Password" : "Kodeord", - "For anonymous access, leave DN and Password empty." : "For anonym adgang, skal du lade DN og Adgangskode tomme.", - "Save Credentials" : "Gem brugeroplysninger", - "One Base DN per line" : "Ét Base DN per linje", - "You can specify Base DN for users and groups in the Advanced tab" : "Du kan specificere base DN for brugere og grupper i fanen Advanceret", - "Detect Base DN" : "Registrér Base 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 for klientbrugeren, som bindingen skal udføres med, f.eks. uid = agent, DC = eksempel, DC = com. For anonym adgang, lad DN og Password tom.", + "Password" : "Adgangskode", + "For anonymous access, leave DN and Password empty." : "For anonym adgang, lad DN og Password tom.", + "Save Credentials" : "Gem afstemning", + "One Base DN per line" : "One Base DN pr. linje", + "You can specify Base DN for users and groups in the Advanced tab" : "Du kan angive Base DN for brugere og grupper i fanebladet Avanceret", + "Detect Base DN" : "Detektér base DN", "Test Base DN" : "Test Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undgår automatiske LDAP-forespørgsler. Bedre på større opsætninger, men kræver en del LDAP-kendskab.", - "Manually enter LDAP filters (recommended for large directories)" : "Angiv LDAP-filtre manuelt (anbefales til større kataloger)", - "Listing and searching for users is constrained by these criteria:" : "Listning og søgning af brugere er begrænset af følgende 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" : "Kontrollér indstillinger og optalte brugere", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undgår automatisk LDAP anmodninger. Bedre for større opsætninger, men kræver noget LDAP viden.", + "Manually enter LDAP filters (recommended for large directories)" : "Indtast LDAP- filtre manuelt (anbefales til store mapper)", + "Listing and searching for users is constrained by these criteria:" : "Lister og søgning efter brugere er begrænset af 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 mest almindelige objektklasser for brugere er organisationalPerson, person, bruger og inetOrgPerson. Hvis du ikke er sikker på hvilken objektklasse du skal vælge, bedes du konsultere din mappe- admin.", + "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 tæller brugere", "Saving" : "Gemmer", "Back" : "Tilbage", - "Continue" : "Videre", - "Please renew your password." : "Nulstil venligst dit password.", + "Continue" : "Fortsæt", + "Please renew your password." : "Venligst forny din adgangskode.", "An internal error occurred." : "Der opstod en intern fejl.", - "Please try again or contact your administrator." : "Prøv venligst igen eller kontakt din administrator.", - "Current password" : "Nuværende password", - "New password" : "Nyt password", - "Renew password" : "Forny venligst password", - "Wrong password." : "Forkert password.", + "Please try again or contact your administrator." : "Prøv igen eller kontakt din administrator.", + "Current password" : "Nuværende adgangskode", + "New password" : "Ny adgangskode", + "Renew password" : "Forny adgangskode", + "Wrong password." : "Forkert adgangskode.", "Cancel" : "Annullér", "Server" : "Server", "Users" : "Brugere", - "Login Attributes" : "Login-attributter", + "Login Attributes" : "Login attributter", "Groups" : "Grupper", "Expert" : "Ekspert", "Advanced" : "Avanceret", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP-modulet LDAP er ikke installeret - backend'en vil ikke fungere. Anmod venligst din systemadministrator om at installere det.", - "Connection Settings" : "Forbindelsesindstillinger ", - "Configuration Active" : "Konfiguration er aktiv", - "When unchecked, this configuration will be skipped." : "Hvis der ikke er markeret, så springes denne konfiguration over.", - "Backup (Replica) Host" : "Vært for sikkerhedskopier (replika)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Angiv valgfrit en vært for sikkerhedskopiering. Dette skal være en replikering af den primære LDAP/AD-server.", - "Backup (Replica) Port" : "Port for sikkerhedskopi (replika)", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "< b > Advarsel: < / b > PHP LDAP modulet er ikke installeret, bagenden vil ikke virke. Bed din systemadministrator om at installere den.", + "Connection Settings" : "Forbindelsesindstillinger", + "Configuration Active" : "Indstillingsaktiv", + "When unchecked, this configuration will be skipped." : "Når denne indstilling ikke er markeret, vil den blive sprunget over.", + "Backup (Replica) Host" : "Backup (Replica) vært", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Giv en ekstra backup vært. Det skal være en kopi af hovedserveren LDAP / AD.", + "Backup (Replica) Port" : "Backup (Replica) Port", "Disable Main Server" : "Deaktivér hovedserver", - "Only connect to the replica server." : "Forbind kun til replika serveren.", - "Turn off SSL certificate validation." : "Deaktivér validering af SSL-certifikat.", - "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." : "Anbefales ikke - bruges kun til testformål! Hvis forbindelse udelukkende fungerer med dette tilvalg, så importér LDAP-serverens SSL-certifikat i din %s-server.", - "Cache Time-To-Live" : "Cache levetid", - "in seconds. A change empties the cache." : "i sekunder. En ændring vil tømme cachen.", + "Only connect to the replica server." : "Kun forbindelse til replikaserveren.", + "Turn off SSL certificate validation." : "Sluk validering af SSL-certifikater.", + "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." : "Ikke anbefalet, brug det kun til test! Hvis forbindelsen kun virker med denne indstilling, importeres LDAP- serverens SSL-certifikat i din %s server.", + "Cache Time-To-Live" : "Cache Time-To-Live", + "in seconds. A change empties the cache." : "om få sekunder. En forandring tømmer cachen.", "Directory Settings" : "Mappeindstillinger", - "User Display Name Field" : "Vist brugernavn felt", - "The LDAP attribute to use to generate the user's display name." : "LDAP-attributten som skal bruges til at oprette brugerens viste navn.", - "2nd User Display Name Field" : "Felt for af 2. brugers viste navn", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Valgfri. En LDAP-attribut som tilføjes til vist navn inde i kantede anførselstegn. Giver eks. »John Doe (john.doe@example.org)«.", - "Base User Tree" : "Base Bruger Træ", - "One User Base DN per line" : "Én bruger-Base DN per linje", - "User Search Attributes" : "Attributter for brugersøgning", - "Optional; one attribute per line" : "Valgfrit; én attribut per linje", - "Group Display Name Field" : "Navnefelt for gruppevisning", - "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributten som skal bruges til at oprette gruppens viste navn.", - "Base Group Tree" : "Base Group Tree", - "One Group Base DN per line" : "Ét gruppe-Base DN per linje", - "Group Search Attributes" : "Attributter for gruppesøgning", - "Group-Member association" : "Guppemedlem forening", - "Dynamic Group Member URL" : "URL for dynamisk gruppemedlem", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Den LDAP-attribut, som på gruppeobjekter indeholder en URL for LDAP-søgning, der afgør hvilke objekter som tilhører gruppen. (En værdiløs indstilling deaktiverer funktionalitet for dynamisk gruppemedlemskab.)", - "Nested Groups" : "Indlejrede grupper", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Når slået til, så vil grupper som rummer grupper blive understøttet. (Dette fungerer kun, hvis attributten for gruppemedlem indeholder DN'er.)", - "Paging chunksize" : "Fragmentstørrelse for sideinddeling", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Fragmentstørrelse som bruges til sideinddelte LDAP-søgninger, der kan returnere omfattende resultater såsom bruger eller gruppe-optælling. (Angivelse til 0 vil slå sideinddelte LDAP-søgninger fra for disse situationer.)", - "Enable LDAP password changes per user" : "Aktivér ændringer i LDAP-adgangskoder per bruger", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Tillader at LDAP-brugere kan ændre deres adgangskode og tillader Superadministratorer og Gruppeadministratorer, at ændre adgangskoden for deres LDAP-brugere. Dette virker kun, hvis rettigheder for adgangskontrol er konfigureret tilsvarende på LDAP-serveren. Da adgangskoder sendes som klartekst til LDAP-serveren, så skal der anvendes en transportkryptering, samtidig som der bør være konfigureret således, at der sker en hashing af adgangskoder på LDAP-serveren.", - "(New password is sent as plain text to LDAP)" : "(Ny adgangskode sendes som klartekst til LDAP)", - "Default password policy DN" : "Standard password politik DN", - "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN for en standard password politik vil blive brugt til at håndtere udløb af password. Virker kun når LDAP password ændringer pr. bruger er aktiveret og understøtter kun OpenLDAP. Efterlad tom for at deaktivere håndtering password udløb.", - "Special Attributes" : "Specielle attributter", - "Quota Field" : "Kvote Felt", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Lad stå tom for brugerens standardkvota. Alternativt angives en LDAP/AD-attribut.", - "Quota Default" : "Standard for kvota", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Tilsidesætter standardkvota for LDAP-brugere, der ikke har fået angivet en kvota i feltet Kvota.", - "Email Field" : "Felt for e-mail", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Angiver brugerens e-mail fra deres LDAP-attribut. Lad stå tom for standardadfærd.", - "User Home Folder Naming Rule" : "Navneregel for brugerens hjemmemappe", - "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home i en ekstern lager konfiguration vil blive ombyttet med indholdet af den specificerede attribut", - "Internal Username" : "Internt Brugernavn", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som udgangspunkt bliver det interne brugernavn oprettet ud fra UUID-attributten. Dette sikrer at brugernavnet er unikt og at ikke nødvendigt at konvertere tegn. Det interne brugernavn har den begrænsning, at alene følgende tegn tillades: [ a-zA-Z0-9_.@- ]. Andre tegn bliver erstattet med deres ASCI-korrespondent eller simpelthen udeladt. I tilfælde af kollisioner tilføjes/forøges et tal. Det interne brugernavn bruges til at identificere en bruger internt. Dette er også standardnavnet for en brugers hjemmemappe. Det er også en del af fjern-URL'er, eks. for alle *DAV-tjenester. Med denne indstilling kan standardadfærden tilsidesættes. Lad den stå tom for standardadfærden. Ændringer vil alene påvirke nyligt kortlagte (tilføjede) LDAP-brugere.", - "Internal Username Attribute:" : "Internt attribut for brugernavn:", - "Override UUID detection" : "Tilsidesæt UUID-detektering", - "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." : "Som udgangspunkt registreres UUID-attributten automatisk. UUID-attributten bruges til entydig identificering af LDAP-brugere og -grupper. I tillæg vil det interne brugernavn blive oprettes på basis af UUID'et, hvis andet ikke angives ovenfor. Du kan tilsidesætte indstillingen og angive en attribut efter eget valg. Du skal sørge for at dén attribut du selv vælger, kan hentes for både brugere og grupper, samt at den er unik. Lad stå tom for standardadfærd. Ændringer vil kun påvirke nyilgt kortlagte (tilføjede) LDAP-brugere og -grupper.", - "UUID Attribute for Users:" : "UUID-attribut for brugere:", - "UUID Attribute for Groups:" : "UUID-attribut for grupper:", - "Username-LDAP User Mapping" : "Kortlægning mellem brugernavn og LDAP-bruger", - "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Brugernavne bruges til at lagre og tildele metadata. For at kunne identificere og genkende brugere præcist, vil hver LDAP-bruger få oprettet et internt brugernavn. Det oprettede brugernavn svarer til UUID'et for LDAP-brugeren. I tillæg mellemlagres DN'et for at mindske LDAP-interaktioner, men det mellemlagrede benyttes ikke til identifikation. Hvis DN'et ændres, vil ændringerne blive registreret. Det interne brugernavn anvendes overalt. Hvis kortlægningerne ryddes, så vil der være rester overalt. Rydning af kortlægningerne er ikke konfigurationssensitivt - det påvirker alle LDAP-konfigurationer! Ryd aldrig kortlægningerne i et produktionsmiljø, kun i et teststadie eller eksperimentelt stadie.", - "Clear Username-LDAP User Mapping" : "Ryd kortlægning mellem brugernavn og LDAP-bruger", - "Clear Groupname-LDAP Group Mapping" : "Ryd kortlægning mellem gruppenavn og LDAP-gruppe" + "User Display Name Field" : "Brugervisningsnavnefelt", + "The LDAP attribute to use to generate the user's display name." : "LDAP attributten der skal bruges til at generere brugerens visningsnavn.", + "2nd User Display Name Field" : "2. brugervisningsnavnefelt", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Valgfrit. En LDAP-attribut, der skal tilføjes til visningsnavnet i parentes. Resultater i f.eks. \"John Doe (john.doe @ example.org)\".", + "Base User Tree" : "Base brugertræ", + "One User Base DN per line" : "One User Base DN per linje", + "User Search Attributes" : "Brugersøgningsattributter", + "Optional; one attribute per line" : "Valgfrit; én attribut pr. linje", + "Disable users missing from LDAP" : "Deaktiver brugere mangler fra LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Når der tændes, vil brugere importeret fra LDAP, som så mangler, blive deaktiveret", + "Group Display Name Field" : "Gruppevisning Navnefelt", + "The LDAP attribute to use to generate the groups's display name." : "LDAP attributten der skal bruges til at generere gruppernes visningsnavn.", + "Base Group Tree" : "Base gruppe træ", + "One Group Base DN per line" : "One Group Base DN pr. linje", + "Group Search Attributes" : "Gruppesøgeattributter", + "Group-Member association" : "Sammenslutning af medlemmer", + "Dynamic Group Member URL" : "Name", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Den LDAP attribut, der på gruppe objekter indeholder en LDAP søgning URL, der bestemmer, hvad objekter tilhører gruppen. (En tom indstilling deaktiverer dynamisk gruppemedlemskab funktionalitet.)", + "Nested Groups" : "Indfødte grupper", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Når de er tændt, understøttes grupper som indeholder grupper. (Virker kun, hvis attributten for gruppemedlemmer indeholder DNs.)", + "Paging chunksize" : "Sidestørrelse", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize bruges til sidestillede LDAP søgninger, der kan returnere store resultater som bruger eller gruppe optælling. (Indstiller det 0 deaktiverer bilagte LDAP søgninger i disse situationer.)", + "Enable LDAP password changes per user" : "Aktivér ændringer af LDAP- adgangskode pr. bruger", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Tillad LDAP-brugere at ændre deres adgangskode og tillade Super Administratorer og Group Administratorer at ændre adgangskoden for deres LDAP-brugere. Fungerer kun når adgangskontrolpolitikker er konfigureret i overensstemmelse hermed på LDAP- serveren. Da adgangskoder sendes i klartekst til LDAP- serveren, skal der bruges transportkryptering og password hashing skal indstilles på LDAP- serveren.", + "(New password is sent as plain text to LDAP)" : "(Ny adgangskode sendes som almindelig tekst til LDAP)", + "Default password policy DN" : "Standard kodeordspolitik DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN for en standard kodeord politik, der vil blive brugt til kodeord udløbshåndtering. Fungerer kun når LDAP- kodeord ændres per bruger er aktiveret og understøttes kun af OpenLDAP. Lad tom for at deaktivere password udløbshåndtering.", + "Special Attributes" : "Særlige attributter", + "Quota Field" : "Kontingentfelt", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Efterlad tom for brugerens standardkvote. Ellers angives en LDAP- / AD-attribut.", + "Quota Default" : "Kvotestandard", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Overskrid standardkvote for LDAP-brugere, der ikke har en kvote fastsat i kvotefeltet.", + "Email Field" : "E-mail felt", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Sæt brugerens e-mail fra deres LDAP attribut. Lad den stå tom for standardadfærd.", + "User Home Folder Naming Rule" : "User Home Folder Naming Rule", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Efterlad tomt for brugernavn (standard). Ellers angives en LDAP- / AD-attribut.", + "\"$home\" Placeholder Field" : "\"$home\" Placeholder Field", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home i en ekstern lagerkonfiguration vil blive erstattet med værdien af den angivne attribut", + "User Profile Attributes" : "Brugerprofilattributter", + "Phone Field" : "Telefon felt", + "User profile Phone will be set from the specified attribute" : "Brugerprofil Telefonen vil blive sat fra den angivne attribut", + "Website Field" : "Webstedsfelt", + "User profile Website will be set from the specified attribute" : "Brugerprofil Websted vil blive sat fra den angivne attribut", + "Address Field" : "Adresse felt", + "User profile Address will be set from the specified attribute" : "Brugerprofiladresse vil blive sat fra den angivne attribut", + "Twitter Field" : "Twitter felt", + "User profile Twitter will be set from the specified attribute" : "Brugerprofil Twitter vil blive sat fra den angivne attribut", + "Fediverse Field" : "Fediverse felt", + "User profile Fediverse will be set from the specified attribute" : "Brugerprofil Fediverse vil blive sat fra den angivne attribut", + "Organisation Field" : "Organisationsfelt", + "User profile Organisation will be set from the specified attribute" : "Brugerprofil Organisation vil blive sat fra den angivne attribut", + "Role Field" : "Rollefelt", + "User profile Role will be set from the specified attribute" : "Brugerprofil Rolle vil blive sat fra den angivne attribut", + "Headline Field" : "Overstreg felt", + "User profile Headline will be set from the specified attribute" : "Brugerprofil Overskrift vil blive sat fra den angivne attribut", + "Biography Field" : "Biografifelt", + "User profile Biography will be set from the specified attribute" : "Brugerprofil Biografi vil blive sat fra den angivne attribut", + "Birthdate Field" : "Fødselsdato felt", + "User profile Date of birth will be set from the specified attribute" : "Brugerprofil Fødselsdato vil blive sat fra den angivne attribut", + "Pronouns Field" : "Pronounsfelt", + "User profile Pronouns will be set from the specified attribute" : "Brugerprofil Pronouns vil blive sat fra den angivne attribut", + "Internal Username" : "Intern brugernavn", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Som standard vil det interne brugernavn blive oprettet fra UUID attributten. Det sikrer, at brugernavnet er unikt og tegn behøver ikke at blive konverteret. Det interne brugernavn har den begrænsning, at kun disse tegn er tilladt: [a- zA- Z0- 9 _. @ -]. Andre tegn erstattes med deres ASCII-korrespondance eller udelades simpelthen. Ved kollisioner vil et antal blive tilføjet / forøget. Det interne brugernavn bruges til at identificere en bruger internt. Det er også standardnavnet for brugerens hjemmemappe. Det er også en del af eksterne webadresser, for eksempel for alle DAV-tjenester. Med denne indstilling kan standardadfærden tilsidesættes. Ændringer vil kun have virkning på nykortlagte (tilføjede) LDAP-brugere. Lad det stå tomt for standardadfærd.", + "Internal Username Attribute:" : "Intern brugernavn Attribut:", + "Override UUID detection" : "Tilsidesæt UUID detektering", + "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." : "Som standard detekteres UUID- attributten automatisk. UUID attributten bruges til uden tvivl at identificere LDAP-brugere og grupper. Også, vil det interne brugernavn blive oprettet baseret på UUID, hvis ikke angivet ellers ovenfor. Du kan tilsidesætte indstillingen og videregive en attribut efter dit valg. Du skal sørge for, at attributten for dit valg kan hentes for både brugere og grupper, og det er unikt. Lad det stå tomt for standardadfærd. Ændringer vil kun have virkning på nykortlagte (tilføjede) LDAP-brugere og grupper.", + "UUID Attribute for Users:" : "UUID Attribut for brugere:", + "UUID Attribute for Groups:" : "UUID Attribut for grupper:", + "Username-LDAP User Mapping" : "Brugernavn - LDAP Brugerkortlægning", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Brugernavne bruges til at gemme og tildele metadata. For præcist at identificere og genkende brugere, vil hver LDAP-bruger have et internt brugernavn. Dette kræver en kortlægning fra brugernavn til LDAP-bruger. Det oprettede brugernavn er kortlagt til UUID for LDAP-brugeren. Derudover er DN cache så godt at reducere LDAP interaktion, men det bruges ikke til identifikation. Hvis DN ændres, vil ændringerne blive fundet. Det interne brugernavn bruges over det hele. Rydning af tilknytninger vil have rester overalt. Rydning af tilknytninger er ikke konfiguration følsom, det påvirker alle LDAP konfigurationer! Ryd aldrig maskerne i et produktionsmiljø, kun i et test- eller forsøgsstadium.", + "Clear Username-LDAP User Mapping" : "Ryd brugernavn-LDAP-brugertilknytning", + "Clear Groupname-LDAP Group Mapping" : "Ryd gruppenavn-LDAP-gruppetilknytning", + "Invalid configuration. Please have a look at the logs for further details." : "Ugyldig konfiguration. Se venligst logfilerne for yderligere oplysninger." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js index a0e96b8db42..37546227625 100644 --- a/apps/user_ldap/l10n/de.js +++ b/apps/user_ldap/l10n/de.js @@ -6,20 +6,21 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Die Konfiguration ist ungültig: anonymes Binden ist nicht erlaubt. ", "Valid configuration, connection established!" : "Gültige Konfiguration, Verbindung hergestellt!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfe die Servereinstellungen und Anmeldeinformationen. ", - "Invalid configuration. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Einzelheiten findest Du in den Logdateien.", + "Invalid configuration: %s" : "Ungültige Konfiguration: %s", "No action specified" : "Keine Aktion angegeben", "No configuration specified" : "Keine Konfiguration angegeben", "No data specified" : "Keine Daten angegeben", - " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", + "Invalid data specified" : "Ungültige Daten angegeben", + "Could not set configuration %1$s to %2$s" : "Die Konfiguration %1$s konnte nicht auf %2$s gesetzt werden", "Action does not exist" : "Aktion existiert nicht", - "Renewing …" : "Erneuere…", + "Renewing …" : "Erneuere …", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", "So-so password" : "Passables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", "The Base DN appears to be wrong" : "Die Base-DN scheint falsch zu sein", - "Testing configuration…" : "Teste Konfiguration…", + "Testing configuration…" : "Teste Konfiguration …", "Configuration incorrect" : "Konfiguration falsch", "Configuration incomplete" : "Konfiguration unvollständig", "Configuration OK" : "Konfiguration OK", @@ -33,40 +34,57 @@ OC.L10N.register( "No object found in the given Base DN. Please revise." : "Keine Objekte in der Base-DN gefunden, bitte überprüfen.", "More than 1,000 directory entries available." : "Mehr als 1.000 Einträge stehen zur Verfügung.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} Eintrag in der angegebenen Base DN verfügbar","{objectsFound} Einträge in der angegebenen Base DN verfügbar"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ein Fehler ist aufgetreten. Bitte die Base DN sowie die Verbindungs- und Anmeldeeinstellungen überprüfen.", - "Do you really want to delete the current Server Configuration?" : "Möchtest Du die aktuelle Serverkonfiguration wirklich löschen?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Es ist ein Fehler aufgetreten. Bitte überprüfe die Base DN sowie die Verbindungs- und Anmeldeeinstellungen.", + "Do you really want to delete the current Server Configuration?" : "Soll die aktuelle Serverkonfiguration wirklich gelöscht werden?", "Confirm Deletion" : "Löschen bestätigen", - "Mappings cleared successfully!" : "Zuordnungen erfolgreich gelöscht!", + "Mappings cleared successfully!" : "Zuordnungen gelöscht!", "Error while clearing the mappings." : "Fehler beim Löschen der Zuordnungen.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous Bind ist nicht erlaubt. Bitte eine Benutzer-DN und ein Passwort angeben.", "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymes binden ist scheinbar nicht erlaubt.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Speichern fehlgeschlagen. Bitte stelle sicher, dass die Datenbank in Betrieb ist. Bitte lade vor dem Fortfahren neu.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Das Umschalten des Modus ermöglicht automatische LDAP-Abfragen. Abhängig von Deiner LDAP-Größe können diese einige Zeit in Anspruch nehmen. Soll wirklich derModus gewechselt werden?", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Das Umschalten des Modus ermöglicht automatische LDAP-Abfragen. Abhängig von deiner LDAP-Größe können diese einige Zeit in Anspruch nehmen. Soll wirklich der Modus gewechselt werden?", "Mode switch" : "Modus wechseln", "Select attributes" : "Attribute auswählen", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfe Deine Anmelde-Attribute und Deinen Benutzernamen. Gültige Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Benutzer nicht gefunden. Bitte die Anmelde-Attribute und den Benutzernamen überprüfen. Gültige Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>", "User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Erwäge es, Deine Suche einzugrenzen, da sie viele Benutzer umfaßte. Nur der erste wird sich anmelden können.", - "An unspecified error occurred. Please check log and settings." : "Ein nicht näher spezifizierter Fehler ist aufgetreten. Bitte prüfe die Logdatei und Einstellungen.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte Host, Port und Anmeldeinformationen überprüfen.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Der %uid - Platzhalter fehlt. Dieser wird mit dem Anmeldenamen beim Abfragen von LDAP / AD ersetzt.", - "Please provide a login name to test against" : "Bitte gib einen Benutzernamen an, um gegen diesen zu testen", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.", - "Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Bitte in Erwägung ziehen, die Suche einzugrenzen, da sie viele Benutzer umfaßt. Nur der erste wird sich anmelden können.", + "An unspecified error occurred. Please check log and settings." : "Es ist ein nicht näher spezifizierter Fehler aufgetreten. Bitte die Logdatei und die Einstellungen überprüfen.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z. B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten. Bitte Host, Port und Anmeldeinformationen überprüfen.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Der \"%u id\" Platzhalter fehlt. Er wird durch den Anmeldenamen ersetzt, wenn LDAP/AD abgefragt wird.", + "Please provide a login name to test against" : "Bitte einen Benutzernamen eingeben, um gegen diesen zu testen", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP/AD-Server memberOf nicht unterstützt.", + "Password change rejected. Hint: %s" : "Passwortänderung verweigert. Hinweis: %s", + "Mandatory field \"%s\" left empty" : "Pflichtfeld \"%s\" leer gelassen", + "A password is given, but not an LDAP agent" : "Es wurde ein Passwort, aber kein LDAP-Agent eingegeben", + "No password is given for the user agent" : "Für den User-Agenten wurde kein Passwort angegeben", + "No LDAP base DN was given" : "Es wurde keine LDAP-Basis-DN eingegeben", + "User base DN is not a subnode of global base DN" : "Der Benutzer-Basis-DN ist kein Unterknoten des globalen Basis-DN", + "Group base DN is not a subnode of global base DN" : "Der Gruppen-Basis-DN ist kein Unterknoten des globalen Basis-DN", + "Login filter does not contain %s placeholder." : "Der Anmeldefilter enthält keinen %s-Platzhalter", "Please login with the new password" : "Bitte mit dem neuen Passwort anmelden", "LDAP User backend" : "LDAP Benutzer-Backend", "Your password will expire tomorrow." : "Dein Passwort läuft morgen ab", "Your password will expire today." : "Dein Passwort läuft heute ab", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Dein Passwort läuft in %n Tag ab","Dein Passwort läuft in %n Tagen ab"], - "LDAP / AD integration" : "LDAP / AD Integration", - "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], - "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], + "LDAP/AD integration" : "LDAP/AD-Integration", + "LDAP Connection" : "LDAP-Verbindung", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Bindung für diese LDAP-Konfiguration fehlgeschlagen: %s","Bindung für %n LDAP-Konfigurationen fehlgeschlagen: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Die Suche für diese LDAP-Konfigurationen ist fehlgeschlagen: %s","Die Suche für %n LDAP-Konfigurationen ist fehlgeschlagen: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Es gibt eine inaktive LDAP-Konfiguration: %s","Es gibt %n inaktive LDAP-Konfigurationen: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Bindung und Suche funktionieren mit der eingerichteten LDAP-Verbindung (%s)","Bindung und Suchen funktioniert auf allen der %nkonfigurierten LDAP-Verbindungen (%s)"], + "Invalid LDAP UUIDs" : "Ungültige LDAP-UUIDs", + "None found" : "Keine gefunden", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Es wurden ungültige UUIDs von LDAP-Konten oder -Gruppen gefunden. Bitte die \"UUID-Erkennung überschreiben\"-Einstellungen im Expertenteil der LDAP-Konfiguration überprüfen und \"occ ldap:update-uuid\" verwenden, um sie zu aktualisieren.", + "_%n group found_::_%n groups found_" : ["%n Gruppe gefunden","%n Gruppen gefunden"], + "> 1000 groups found" : "Mehr als 1000 Gruppen gefunden", + "> 1000 users found" : "Mehr als 1000 Benutzer gefunden", + "_%n user found_::_%n users found_" : ["%n Benutzer gefunden","%n Benutzer gefunden"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte gib es selbst in den erweiterten LDAP-Einstellungen an.", "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", "LDAP user and group backend" : "LDAP Benutzer- und Gruppen-Backend", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Diese App ermöglicht es Administratoren Nextcloud mit einem LDAP-basiertem Nutzerverzeichnis zu verbinden.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Diese App ermöglicht es der Administration, Nextcloud mit einem LDAP-basiertem Nutzerverzeichnis zu verbinden.", "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Diese App ermöglicht es Administratoren Nextcloud mit einem auf LDAP basierenden Nutzerverzeichnis zu verbinden um so die Anmeldung, Nutzer, Gruppen und Berechtigungen zu konfigurieren. Administratoren können die App so einrichten, dass sie sich mit einem oder mehreren LDAP-Verzeichnissen oder Active-Directories über eine LDAP-Schnittstelle verbindet. Attribute wie Speicherkontigent, E-Mail, Avatare, Gruppenmitgliedschaft usw. können von einem Verzeichnis mit den dazugehörigen Anfragen und Filtern bezogen werden\n\nDer Nutzer meldet sich an der Nextclud mit seinen LDAP oder AD Anmeldedaten an. und erhält Zugriff durch eine Authentifizierungsanfrage am LDAP- oder AD-Server. Nextcloud speichert und verwendet nicht die LDAP- oder AD-Zugangsdaten sondern verwendet eine Sitzungs-ID für die jeweilige Nutzer-ID. Weitere Infos in der \"LDAP User and Group Backend\"-Dokumentation.", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", @@ -81,46 +99,47 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter bestimmt, welche LDAP-Gruppen Zugriff auf die %s-Instanz haben sollen.", "Verify settings and count the groups" : "Einstellungen überprüfen und die Gruppen zählen", "When logging in, %s will find the user based on the following attributes:" : "Beim Anmelden wird %s den Benutzer basierend auf folgenden Attributen finden:", - "LDAP / AD Username:" : "LDAP-/AD-Benutzername:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Erlaubt die Anmeldung gegen den LDAP/AD-Benutzernamen, der entweder \"uid\" oder \"sAMAccountName\" ist, und erkannt wird.", - "LDAP / AD Email Address:" : "LDAP-/AD-E-Mail-Adresse:", + "LDAP/AD Username:" : "LDAP-/AD-Benutzername:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Erlaubt die Anmeldung gegen den LDAP/AD-Benutzernamen, der entweder \"uid\" oder \"sAMAccountName\" ist, und erkannt wird.", + "LDAP/AD Email Address:" : "LDAP-/AD E-Mail-Adresse:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Erlaubt die Anmeldung gegen ein E-Mail-Attribut. \"mail\" und \"mailPrimaryAddress\" sind erlaubt.", "Other Attributes:" : "Andere Attribute:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. \"%%uid\" ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"", "Test Loginname" : "Anmeldenamen testen", + "Attempts to receive a DN for the given loginname and the current login filter" : "Es wird versucht, einen DN für den angegebenen Anmeldenamen und den aktuellen Anmeldefilter zu erhalten", "Verify settings" : "Einstellungen überprüfen", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Neue Konfiguration hinzufügen", "Copy current configuration into new directory binding" : "Aktuelle Konfiguration in eine neues Verzeichnis-Bind kopieren", "Delete the current configuration" : "Aktuelle Konfiguration löschen", "Host" : "Host", - "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Du kannst das Protokoll auslassen, es sei denn, Du benötigst SSL. In diesem Fall mit ldaps:// beginnen.", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Du kannst das Protokoll auslassen, es sei denn, du benötigst SSL. In diesem Fall mit ldaps:// beginnen.", "Port" : "Port", "Detect Port" : "Port ermitteln", "User DN" : "Benutzer-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." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z.B. uid=agent,dc=example,dc=com. Für anonymen Zugriff DN und Passwort leerlassen.", + "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." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z. B. uid=agent,dc=example,dc=com. Für anonymen Zugriff DN und Passwort leerlassen.", "Password" : "Passwort", "For anonymous access, leave DN and Password empty." : "Lasse die Felder DN und Passwort für anonymen Zugang leer.", "Save Credentials" : "Zugangsdaten speichern", "One Base DN per line" : "Einen Basis-DN pro Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : "Base DN für Benutzer und Gruppen kann im Reiter „Fortgeschritten“ angegeben werden", + "You can specify Base DN for users and groups in the Advanced tab" : "Die Basis-DN für Benutzer und Gruppen kann im Reiter \"Fortgeschritten\" eingegeben werden", "Detect Base DN" : "Base DN ermitteln", "Test Base DN" : "Base DN testen", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", "Listing and searching for users is constrained by these criteria:" : "Auflistung und Suche nach Nutzern ist eingeschränkt durch folgende Kriterien:", - "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." : "Die häufigsten Objektklassen für Benutzer sind organizationalPerson, person, user und inetOrgPerson. Wenn Du nicht sicher bist, welche Objektklasse Du wählen sollst, frage bitte Deinen Verzeichnis-Admin.", + "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." : "Die häufigsten Objektklassen für Benutzer sind organizationalPerson, person, user und inetOrgPerson. Wenn du nicht sicher bist, welche Objektklasse du wählen sollst, frage bitte deinen Verzeichnis-Administrator.", "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "Verify settings and count users" : "Einstellungen überprüfen und Benutzer zählen", "Saving" : "Speichern", "Back" : "Zurück", "Continue" : "Fortsetzen", - "Please renew your password." : "Bitte erneuere Dein Passwort", + "Please renew your password." : "Bitte dein Passwort erneuern", "An internal error occurred." : "Es ist ein interner Fehler aufgetreten.", - "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere den Administrator.", + "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere die Administration.", "Current password" : "Aktuelles Passwort", "New password" : "Neues Passwort", - "Renew password" : "Bitte erneuere Dein Passwort", + "Renew password" : "Passwort erneuern", "Wrong password." : "Falsches Passwort.", "Cancel" : "Abbrechen", "Server" : "Server", @@ -129,28 +148,30 @@ OC.L10N.register( "Groups" : "Gruppen", "Expert" : "Experte", "Advanced" : "Fortgeschritten", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktiere Deinen Systemadministrator und bitte ihn um die Installation des Moduls.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte die Systemadministration kontaktieren und diese um die Installation des Moduls bitten.", "Connection Settings" : "Verbindungseinstellungen", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Konfiguration wird übersprungen, wenn nicht angehakt.", "Backup (Replica) Host" : "Backup-Host (Kopie)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Gib einen optionalen Backup-Host an. Es muss sich um eine Kopie des Haupt-LDAP/AD-Servers handeln.", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Optionalen Backup-Host eingeben. Es muss sich um eine Kopie des Haupt-LDAP/AD-Servers handeln.", "Backup (Replica) Port" : "Port des Backup-Hosts (Kopie)", "Disable Main Server" : "Hauptserver deaktivieren", "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.", "Turn off SSL certificate validation." : "Schalte die SSL-Zertifikatsprüfung aus.", - "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." : "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, das SSL-Zertifikat des LDAP-Servers in Deinen %s Server importieren.", - "Cache Time-To-Live" : "Speichere Time-To-Live zwischen", + "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." : "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, das SSL-Zertifikat des LDAP-Servers in deinen %s Server importieren.", + "Cache Time-To-Live" : "Time-To-Live zwischenspeichern", "in seconds. A change empties the cache." : "in Sekunden. Eine Änderung leert den Cache.", "Directory Settings" : "Ordnereinstellungen", "User Display Name Field" : "Feld für den Anzeigenamen des Benutzers", "The LDAP attribute to use to generate the user's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens des Benutzers.", "2nd User Display Name Field" : "2. Benutzeranzeigename Feld", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. Ein hinzuzufügendes LDAP-Attribut um den Namen in Klammern anzuzeigen. Beispiel: »John Doe (john.doe@example.org)«.", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. Ein hinzuzufügendes LDAP-Attribut, um den Namen in Klammern anzuzeigen. Beispiel: »Erika Mustermann (erika.mustermann@beispiel.de)«.", "Base User Tree" : "Basis-Benutzerbaum", "One User Base DN per line" : "Ein Benutzer Basis-DN pro Zeile", "User Search Attributes" : "Benutzersucheigenschaften", "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", + "Disable users missing from LDAP" : "Benutzer deaktivieren, die in LDAP fehlen", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Wenn aktiviert, werden aus LDAP importierte und dann hier fehlende Benutzer deaktiviert", "Group Display Name Field" : "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens der Gruppen.", "Base Group Tree" : "Basis-Gruppenbaum", @@ -161,11 +182,11 @@ OC.L10N.register( "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Ein LDAP-Attribut von Gruppenobjekten, das eine LDAP Such-URL enthält die festlegt welche Objekte zu der Gruppe gehören. (Ein leeres Feld deaktiviert die Funktion \"Dynamisch Gruppenzugehörigkeit\")", "Nested Groups" : "Verschachtelte Gruppen", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Wenn aktiviert, werden Gruppen, die Gruppen enthalten, unterstützt. (Funktioniert nur, wenn das Merkmal des Gruppenmitgliedes den Domain-Namen enthält.)", - "Paging chunksize" : "Seitenstücke (Paging chunksize)", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Abschnittslänge von seitenweise angezeigten LDAP-Suchen, die bei Suchen wie etwa Benutzer- und Gruppen-Auflistungen ausufernd viele Ergebnisse liefern können (die Einstellung „0“ deaktiviert seitenweise angezeigte LDAP-Suchen in diesen Situationen).", + "Paging chunksize" : "Paging Chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Die Blockgröße für seitenweise LDAP-Suchen, die umfangreiche Ergebnisse wie Benutzer- oder Gruppenaufzählungen zurückgeben können. (Wenn Sie den Wert auf 0 setzen, werden seitenweise LDAP-Suchen in diesen Situationen deaktiviert.)", "Enable LDAP password changes per user" : "LDAP-Passwortänderungen pro Benutzer aktivieren", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP-Nutzern die Änderung ihrer Passwörter erlauben und Super-Administratoren sowie Gruppen-Administratoren die Passwortänderung ihrer LDAP-Nutzer erlauben. Dies funktioniert nur, wenn die Zugriffsrichtlinien auf dem LDAP-Server entsprechend konfiguriert sind. Da Passwörter im Klartext an den LDAP-Server gesendet werden, muss die Transportverschlüsselung verwendet werden und das Passwort-Hashing auf dem LDAP-Server sollte konfiguriert werden.", - "(New password is sent as plain text to LDAP)" : "(Das neue Passwort wurde als einfacher Text an LDAP gesendet)", + "(New password is sent as plain text to LDAP)" : "(Das neue Passwort wird als Klartext an LDAP gesendet)", "Default password policy DN" : "Standard Passwort-Regeln DN", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Die DN einer Standard-Passwort-Policy, welche für den Umgang mit ablaufenden Passwörtern verwendet wird. Dies funktioniert nur wenn Passwort-Änderungen pro Benutzer via LDAP und OpenLDAP aktiviert sind. Leer lassen, um die Passwortablaufbehandlung zu deaktivieren.", "Special Attributes" : "Spezielle Eigenschaften", @@ -174,13 +195,36 @@ OC.L10N.register( "Quota Default" : "Standardkontingent", "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standardkontingent ignorieren für Benutzer von LDAP, die kein Kontingent festgelegt haben.", "Email Field" : "E-Mail-Feld", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "E-Mail-Adresse des Benutzers aus seinem LDAP-Attribut generieren. Für Standard-Verhalten leer lassen.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : " E-Mail-Adresse des Benutzers über sein LDAP-Attribut festlegen. Für das Standardverhalten, Feld leer lassen.", "User Home Folder Naming Rule" : "Benennungsregel für das Home-Verzeichnis des Benutzers", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls trage ein LDAP/AD-Attribut ein.", "\"$home\" Placeholder Field" : "\"$home\" Platzhalter-Feld", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in der Konfiguration eines extern angeschlossenen Speichers wird mit dem Wert des angegebenen Attributs ersetzt", + "User Profile Attributes" : "Benutzerprofilattribute", + "Phone Field" : "Telefonfeld", + "User profile Phone will be set from the specified attribute" : "Benutzerprofil Telefon wird aus dem angegebenen Attribut festgelegt", + "Website Field" : "Webseiten-Feld", + "User profile Website will be set from the specified attribute" : "Benutzerprofil Webseite wird aus dem angegebenen Attribut festgelegt", + "Address Field" : "Adressfeld", + "User profile Address will be set from the specified attribute" : "Benutzerprofil-Adresse wird aus dem angegebenen Attribut festgelegt", + "Twitter Field" : "X-Feld", + "User profile Twitter will be set from the specified attribute" : "Benutzerprofil X wird aus dem angegebenen Attribut festgelegt", + "Fediverse Field" : "Fediverse-Feld", + "User profile Fediverse will be set from the specified attribute" : "Benutzerprofil Fediverse wird aus dem angegebenen Attribut festgelegt", + "Organisation Field" : "Organisationsfeld", + "User profile Organisation will be set from the specified attribute" : "Benutzerprofil Organisation wird aus dem angegebenen Attribut festgelegt", + "Role Field" : "Rollenfeld", + "User profile Role will be set from the specified attribute" : "Benutzerprofil Rolle wird anhand des angegebenen Attributs festgelegt\n ", + "Headline Field" : "Überschriftenfeld", + "User profile Headline will be set from the specified attribute" : "Benutzerprofil Überschrift wird aus dem angegebenen Attribut festgelegt", + "Biography Field" : "Biografisches Feld", + "User profile Biography will be set from the specified attribute" : "Benutzerprofil Biografie wird aus dem angegebenen Attribut festgelegt", + "Birthdate Field" : "Geburtstagsfeld", + "User profile Date of birth will be set from the specified attribute" : "Das Geburtsdatum des Profils wird aus dem angegebenen Attribut ermittelt", + "Pronouns Field" : "Pronomenfeld", + "User profile Pronouns will be set from the specified attribute" : "Profil-Pronomen werden aus dem angegebenen Attribut festgelegt", "Internal Username" : "Interner Benutzername", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lasse das Eingabefeld leer. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Standardmäßig wird der interne Benutzername aus dem UUID-Attribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [a-zA-Z0-9_.@-]. Andere Zeichen werden durch ihre ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist außerdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Beispiel für alle DAV-Dienste. Mit dieser Einstellung kann das Standardverhalten geändert werden. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. Für die Standardeinstellung lasse das Eingabefeld leer.", "Internal Username Attribute:" : "Attribut für interne Benutzernamen:", "Override UUID detection" : "UUID-Erkennung überschreiben", "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." : "Standardmäßig wird die UUID-Eigenschaft automatisch erkannt. Die UUID-Eigenschaft wird genutzt, um einen LDAP-Benutzer und Gruppen einwandfrei zu identifizieren. Außerdem wird der interne Benutzername erzeugt, der auf Eigenschaften der UUID basiert, wenn es oben nicht anders angegeben wurde. Es muss allerdings sichergestellt werden, dass die gewählten Eigenschaften zur Identifikation der Benutzer und Gruppen eindeutig sind und zugeordnet werden können. Freilassen, um es beim Standardverhalten zu belassen. Änderungen wirken sich nur auf neu »gemappte« (hinzugefügte) LDAP-Benutzer und -Gruppen aus.", @@ -189,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Die Benutzernamen werden genutzt, um Metadaten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Lösche niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung löschen", - "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen" + "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen", + "Invalid configuration. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Einzelheiten findest du in den Logdateien." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json index 83526cbd5fb..801f94a3907 100644 --- a/apps/user_ldap/l10n/de.json +++ b/apps/user_ldap/l10n/de.json @@ -4,20 +4,21 @@ "Invalid configuration: Anonymous binding is not allowed." : "Die Konfiguration ist ungültig: anonymes Binden ist nicht erlaubt. ", "Valid configuration, connection established!" : "Gültige Konfiguration, Verbindung hergestellt!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfe die Servereinstellungen und Anmeldeinformationen. ", - "Invalid configuration. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Einzelheiten findest Du in den Logdateien.", + "Invalid configuration: %s" : "Ungültige Konfiguration: %s", "No action specified" : "Keine Aktion angegeben", "No configuration specified" : "Keine Konfiguration angegeben", "No data specified" : "Keine Daten angegeben", - " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", + "Invalid data specified" : "Ungültige Daten angegeben", + "Could not set configuration %1$s to %2$s" : "Die Konfiguration %1$s konnte nicht auf %2$s gesetzt werden", "Action does not exist" : "Aktion existiert nicht", - "Renewing …" : "Erneuere…", + "Renewing …" : "Erneuere …", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", "So-so password" : "Passables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", "The Base DN appears to be wrong" : "Die Base-DN scheint falsch zu sein", - "Testing configuration…" : "Teste Konfiguration…", + "Testing configuration…" : "Teste Konfiguration …", "Configuration incorrect" : "Konfiguration falsch", "Configuration incomplete" : "Konfiguration unvollständig", "Configuration OK" : "Konfiguration OK", @@ -31,40 +32,57 @@ "No object found in the given Base DN. Please revise." : "Keine Objekte in der Base-DN gefunden, bitte überprüfen.", "More than 1,000 directory entries available." : "Mehr als 1.000 Einträge stehen zur Verfügung.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} Eintrag in der angegebenen Base DN verfügbar","{objectsFound} Einträge in der angegebenen Base DN verfügbar"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ein Fehler ist aufgetreten. Bitte die Base DN sowie die Verbindungs- und Anmeldeeinstellungen überprüfen.", - "Do you really want to delete the current Server Configuration?" : "Möchtest Du die aktuelle Serverkonfiguration wirklich löschen?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Es ist ein Fehler aufgetreten. Bitte überprüfe die Base DN sowie die Verbindungs- und Anmeldeeinstellungen.", + "Do you really want to delete the current Server Configuration?" : "Soll die aktuelle Serverkonfiguration wirklich gelöscht werden?", "Confirm Deletion" : "Löschen bestätigen", - "Mappings cleared successfully!" : "Zuordnungen erfolgreich gelöscht!", + "Mappings cleared successfully!" : "Zuordnungen gelöscht!", "Error while clearing the mappings." : "Fehler beim Löschen der Zuordnungen.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous Bind ist nicht erlaubt. Bitte eine Benutzer-DN und ein Passwort angeben.", "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymes binden ist scheinbar nicht erlaubt.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Speichern fehlgeschlagen. Bitte stelle sicher, dass die Datenbank in Betrieb ist. Bitte lade vor dem Fortfahren neu.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Das Umschalten des Modus ermöglicht automatische LDAP-Abfragen. Abhängig von Deiner LDAP-Größe können diese einige Zeit in Anspruch nehmen. Soll wirklich derModus gewechselt werden?", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Das Umschalten des Modus ermöglicht automatische LDAP-Abfragen. Abhängig von deiner LDAP-Größe können diese einige Zeit in Anspruch nehmen. Soll wirklich der Modus gewechselt werden?", "Mode switch" : "Modus wechseln", "Select attributes" : "Attribute auswählen", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfe Deine Anmelde-Attribute und Deinen Benutzernamen. Gültige Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Benutzer nicht gefunden. Bitte die Anmelde-Attribute und den Benutzernamen überprüfen. Gültige Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>", "User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Erwäge es, Deine Suche einzugrenzen, da sie viele Benutzer umfaßte. Nur der erste wird sich anmelden können.", - "An unspecified error occurred. Please check log and settings." : "Ein nicht näher spezifizierter Fehler ist aufgetreten. Bitte prüfe die Logdatei und Einstellungen.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte Host, Port und Anmeldeinformationen überprüfen.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Der %uid - Platzhalter fehlt. Dieser wird mit dem Anmeldenamen beim Abfragen von LDAP / AD ersetzt.", - "Please provide a login name to test against" : "Bitte gib einen Benutzernamen an, um gegen diesen zu testen", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.", - "Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Bitte in Erwägung ziehen, die Suche einzugrenzen, da sie viele Benutzer umfaßt. Nur der erste wird sich anmelden können.", + "An unspecified error occurred. Please check log and settings." : "Es ist ein nicht näher spezifizierter Fehler aufgetreten. Bitte die Logdatei und die Einstellungen überprüfen.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z. B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten. Bitte Host, Port und Anmeldeinformationen überprüfen.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Der \"%u id\" Platzhalter fehlt. Er wird durch den Anmeldenamen ersetzt, wenn LDAP/AD abgefragt wird.", + "Please provide a login name to test against" : "Bitte einen Benutzernamen eingeben, um gegen diesen zu testen", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP/AD-Server memberOf nicht unterstützt.", + "Password change rejected. Hint: %s" : "Passwortänderung verweigert. Hinweis: %s", + "Mandatory field \"%s\" left empty" : "Pflichtfeld \"%s\" leer gelassen", + "A password is given, but not an LDAP agent" : "Es wurde ein Passwort, aber kein LDAP-Agent eingegeben", + "No password is given for the user agent" : "Für den User-Agenten wurde kein Passwort angegeben", + "No LDAP base DN was given" : "Es wurde keine LDAP-Basis-DN eingegeben", + "User base DN is not a subnode of global base DN" : "Der Benutzer-Basis-DN ist kein Unterknoten des globalen Basis-DN", + "Group base DN is not a subnode of global base DN" : "Der Gruppen-Basis-DN ist kein Unterknoten des globalen Basis-DN", + "Login filter does not contain %s placeholder." : "Der Anmeldefilter enthält keinen %s-Platzhalter", "Please login with the new password" : "Bitte mit dem neuen Passwort anmelden", "LDAP User backend" : "LDAP Benutzer-Backend", "Your password will expire tomorrow." : "Dein Passwort läuft morgen ab", "Your password will expire today." : "Dein Passwort läuft heute ab", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Dein Passwort läuft in %n Tag ab","Dein Passwort läuft in %n Tagen ab"], - "LDAP / AD integration" : "LDAP / AD Integration", - "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], - "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], + "LDAP/AD integration" : "LDAP/AD-Integration", + "LDAP Connection" : "LDAP-Verbindung", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Bindung für diese LDAP-Konfiguration fehlgeschlagen: %s","Bindung für %n LDAP-Konfigurationen fehlgeschlagen: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Die Suche für diese LDAP-Konfigurationen ist fehlgeschlagen: %s","Die Suche für %n LDAP-Konfigurationen ist fehlgeschlagen: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Es gibt eine inaktive LDAP-Konfiguration: %s","Es gibt %n inaktive LDAP-Konfigurationen: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Bindung und Suche funktionieren mit der eingerichteten LDAP-Verbindung (%s)","Bindung und Suchen funktioniert auf allen der %nkonfigurierten LDAP-Verbindungen (%s)"], + "Invalid LDAP UUIDs" : "Ungültige LDAP-UUIDs", + "None found" : "Keine gefunden", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Es wurden ungültige UUIDs von LDAP-Konten oder -Gruppen gefunden. Bitte die \"UUID-Erkennung überschreiben\"-Einstellungen im Expertenteil der LDAP-Konfiguration überprüfen und \"occ ldap:update-uuid\" verwenden, um sie zu aktualisieren.", + "_%n group found_::_%n groups found_" : ["%n Gruppe gefunden","%n Gruppen gefunden"], + "> 1000 groups found" : "Mehr als 1000 Gruppen gefunden", + "> 1000 users found" : "Mehr als 1000 Benutzer gefunden", + "_%n user found_::_%n users found_" : ["%n Benutzer gefunden","%n Benutzer gefunden"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte gib es selbst in den erweiterten LDAP-Einstellungen an.", "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", "LDAP user and group backend" : "LDAP Benutzer- und Gruppen-Backend", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Diese App ermöglicht es Administratoren Nextcloud mit einem LDAP-basiertem Nutzerverzeichnis zu verbinden.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Diese App ermöglicht es der Administration, Nextcloud mit einem LDAP-basiertem Nutzerverzeichnis zu verbinden.", "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Diese App ermöglicht es Administratoren Nextcloud mit einem auf LDAP basierenden Nutzerverzeichnis zu verbinden um so die Anmeldung, Nutzer, Gruppen und Berechtigungen zu konfigurieren. Administratoren können die App so einrichten, dass sie sich mit einem oder mehreren LDAP-Verzeichnissen oder Active-Directories über eine LDAP-Schnittstelle verbindet. Attribute wie Speicherkontigent, E-Mail, Avatare, Gruppenmitgliedschaft usw. können von einem Verzeichnis mit den dazugehörigen Anfragen und Filtern bezogen werden\n\nDer Nutzer meldet sich an der Nextclud mit seinen LDAP oder AD Anmeldedaten an. und erhält Zugriff durch eine Authentifizierungsanfrage am LDAP- oder AD-Server. Nextcloud speichert und verwendet nicht die LDAP- oder AD-Zugangsdaten sondern verwendet eine Sitzungs-ID für die jeweilige Nutzer-ID. Weitere Infos in der \"LDAP User and Group Backend\"-Dokumentation.", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", @@ -79,46 +97,47 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter bestimmt, welche LDAP-Gruppen Zugriff auf die %s-Instanz haben sollen.", "Verify settings and count the groups" : "Einstellungen überprüfen und die Gruppen zählen", "When logging in, %s will find the user based on the following attributes:" : "Beim Anmelden wird %s den Benutzer basierend auf folgenden Attributen finden:", - "LDAP / AD Username:" : "LDAP-/AD-Benutzername:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Erlaubt die Anmeldung gegen den LDAP/AD-Benutzernamen, der entweder \"uid\" oder \"sAMAccountName\" ist, und erkannt wird.", - "LDAP / AD Email Address:" : "LDAP-/AD-E-Mail-Adresse:", + "LDAP/AD Username:" : "LDAP-/AD-Benutzername:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Erlaubt die Anmeldung gegen den LDAP/AD-Benutzernamen, der entweder \"uid\" oder \"sAMAccountName\" ist, und erkannt wird.", + "LDAP/AD Email Address:" : "LDAP-/AD E-Mail-Adresse:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Erlaubt die Anmeldung gegen ein E-Mail-Attribut. \"mail\" und \"mailPrimaryAddress\" sind erlaubt.", "Other Attributes:" : "Andere Attribute:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. \"%%uid\" ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"", "Test Loginname" : "Anmeldenamen testen", + "Attempts to receive a DN for the given loginname and the current login filter" : "Es wird versucht, einen DN für den angegebenen Anmeldenamen und den aktuellen Anmeldefilter zu erhalten", "Verify settings" : "Einstellungen überprüfen", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Neue Konfiguration hinzufügen", "Copy current configuration into new directory binding" : "Aktuelle Konfiguration in eine neues Verzeichnis-Bind kopieren", "Delete the current configuration" : "Aktuelle Konfiguration löschen", "Host" : "Host", - "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Du kannst das Protokoll auslassen, es sei denn, Du benötigst SSL. In diesem Fall mit ldaps:// beginnen.", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Du kannst das Protokoll auslassen, es sei denn, du benötigst SSL. In diesem Fall mit ldaps:// beginnen.", "Port" : "Port", "Detect Port" : "Port ermitteln", "User DN" : "Benutzer-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." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z.B. uid=agent,dc=example,dc=com. Für anonymen Zugriff DN und Passwort leerlassen.", + "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." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z. B. uid=agent,dc=example,dc=com. Für anonymen Zugriff DN und Passwort leerlassen.", "Password" : "Passwort", "For anonymous access, leave DN and Password empty." : "Lasse die Felder DN und Passwort für anonymen Zugang leer.", "Save Credentials" : "Zugangsdaten speichern", "One Base DN per line" : "Einen Basis-DN pro Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : "Base DN für Benutzer und Gruppen kann im Reiter „Fortgeschritten“ angegeben werden", + "You can specify Base DN for users and groups in the Advanced tab" : "Die Basis-DN für Benutzer und Gruppen kann im Reiter \"Fortgeschritten\" eingegeben werden", "Detect Base DN" : "Base DN ermitteln", "Test Base DN" : "Base DN testen", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", "Listing and searching for users is constrained by these criteria:" : "Auflistung und Suche nach Nutzern ist eingeschränkt durch folgende Kriterien:", - "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." : "Die häufigsten Objektklassen für Benutzer sind organizationalPerson, person, user und inetOrgPerson. Wenn Du nicht sicher bist, welche Objektklasse Du wählen sollst, frage bitte Deinen Verzeichnis-Admin.", + "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." : "Die häufigsten Objektklassen für Benutzer sind organizationalPerson, person, user und inetOrgPerson. Wenn du nicht sicher bist, welche Objektklasse du wählen sollst, frage bitte deinen Verzeichnis-Administrator.", "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "Verify settings and count users" : "Einstellungen überprüfen und Benutzer zählen", "Saving" : "Speichern", "Back" : "Zurück", "Continue" : "Fortsetzen", - "Please renew your password." : "Bitte erneuere Dein Passwort", + "Please renew your password." : "Bitte dein Passwort erneuern", "An internal error occurred." : "Es ist ein interner Fehler aufgetreten.", - "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere den Administrator.", + "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere die Administration.", "Current password" : "Aktuelles Passwort", "New password" : "Neues Passwort", - "Renew password" : "Bitte erneuere Dein Passwort", + "Renew password" : "Passwort erneuern", "Wrong password." : "Falsches Passwort.", "Cancel" : "Abbrechen", "Server" : "Server", @@ -127,28 +146,30 @@ "Groups" : "Gruppen", "Expert" : "Experte", "Advanced" : "Fortgeschritten", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktiere Deinen Systemadministrator und bitte ihn um die Installation des Moduls.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte die Systemadministration kontaktieren und diese um die Installation des Moduls bitten.", "Connection Settings" : "Verbindungseinstellungen", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Konfiguration wird übersprungen, wenn nicht angehakt.", "Backup (Replica) Host" : "Backup-Host (Kopie)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Gib einen optionalen Backup-Host an. Es muss sich um eine Kopie des Haupt-LDAP/AD-Servers handeln.", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Optionalen Backup-Host eingeben. Es muss sich um eine Kopie des Haupt-LDAP/AD-Servers handeln.", "Backup (Replica) Port" : "Port des Backup-Hosts (Kopie)", "Disable Main Server" : "Hauptserver deaktivieren", "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.", "Turn off SSL certificate validation." : "Schalte die SSL-Zertifikatsprüfung aus.", - "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." : "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, das SSL-Zertifikat des LDAP-Servers in Deinen %s Server importieren.", - "Cache Time-To-Live" : "Speichere Time-To-Live zwischen", + "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." : "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, das SSL-Zertifikat des LDAP-Servers in deinen %s Server importieren.", + "Cache Time-To-Live" : "Time-To-Live zwischenspeichern", "in seconds. A change empties the cache." : "in Sekunden. Eine Änderung leert den Cache.", "Directory Settings" : "Ordnereinstellungen", "User Display Name Field" : "Feld für den Anzeigenamen des Benutzers", "The LDAP attribute to use to generate the user's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens des Benutzers.", "2nd User Display Name Field" : "2. Benutzeranzeigename Feld", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. Ein hinzuzufügendes LDAP-Attribut um den Namen in Klammern anzuzeigen. Beispiel: »John Doe (john.doe@example.org)«.", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. Ein hinzuzufügendes LDAP-Attribut, um den Namen in Klammern anzuzeigen. Beispiel: »Erika Mustermann (erika.mustermann@beispiel.de)«.", "Base User Tree" : "Basis-Benutzerbaum", "One User Base DN per line" : "Ein Benutzer Basis-DN pro Zeile", "User Search Attributes" : "Benutzersucheigenschaften", "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", + "Disable users missing from LDAP" : "Benutzer deaktivieren, die in LDAP fehlen", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Wenn aktiviert, werden aus LDAP importierte und dann hier fehlende Benutzer deaktiviert", "Group Display Name Field" : "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens der Gruppen.", "Base Group Tree" : "Basis-Gruppenbaum", @@ -159,11 +180,11 @@ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Ein LDAP-Attribut von Gruppenobjekten, das eine LDAP Such-URL enthält die festlegt welche Objekte zu der Gruppe gehören. (Ein leeres Feld deaktiviert die Funktion \"Dynamisch Gruppenzugehörigkeit\")", "Nested Groups" : "Verschachtelte Gruppen", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Wenn aktiviert, werden Gruppen, die Gruppen enthalten, unterstützt. (Funktioniert nur, wenn das Merkmal des Gruppenmitgliedes den Domain-Namen enthält.)", - "Paging chunksize" : "Seitenstücke (Paging chunksize)", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Abschnittslänge von seitenweise angezeigten LDAP-Suchen, die bei Suchen wie etwa Benutzer- und Gruppen-Auflistungen ausufernd viele Ergebnisse liefern können (die Einstellung „0“ deaktiviert seitenweise angezeigte LDAP-Suchen in diesen Situationen).", + "Paging chunksize" : "Paging Chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Die Blockgröße für seitenweise LDAP-Suchen, die umfangreiche Ergebnisse wie Benutzer- oder Gruppenaufzählungen zurückgeben können. (Wenn Sie den Wert auf 0 setzen, werden seitenweise LDAP-Suchen in diesen Situationen deaktiviert.)", "Enable LDAP password changes per user" : "LDAP-Passwortänderungen pro Benutzer aktivieren", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP-Nutzern die Änderung ihrer Passwörter erlauben und Super-Administratoren sowie Gruppen-Administratoren die Passwortänderung ihrer LDAP-Nutzer erlauben. Dies funktioniert nur, wenn die Zugriffsrichtlinien auf dem LDAP-Server entsprechend konfiguriert sind. Da Passwörter im Klartext an den LDAP-Server gesendet werden, muss die Transportverschlüsselung verwendet werden und das Passwort-Hashing auf dem LDAP-Server sollte konfiguriert werden.", - "(New password is sent as plain text to LDAP)" : "(Das neue Passwort wurde als einfacher Text an LDAP gesendet)", + "(New password is sent as plain text to LDAP)" : "(Das neue Passwort wird als Klartext an LDAP gesendet)", "Default password policy DN" : "Standard Passwort-Regeln DN", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Die DN einer Standard-Passwort-Policy, welche für den Umgang mit ablaufenden Passwörtern verwendet wird. Dies funktioniert nur wenn Passwort-Änderungen pro Benutzer via LDAP und OpenLDAP aktiviert sind. Leer lassen, um die Passwortablaufbehandlung zu deaktivieren.", "Special Attributes" : "Spezielle Eigenschaften", @@ -172,13 +193,36 @@ "Quota Default" : "Standardkontingent", "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standardkontingent ignorieren für Benutzer von LDAP, die kein Kontingent festgelegt haben.", "Email Field" : "E-Mail-Feld", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "E-Mail-Adresse des Benutzers aus seinem LDAP-Attribut generieren. Für Standard-Verhalten leer lassen.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : " E-Mail-Adresse des Benutzers über sein LDAP-Attribut festlegen. Für das Standardverhalten, Feld leer lassen.", "User Home Folder Naming Rule" : "Benennungsregel für das Home-Verzeichnis des Benutzers", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls trage ein LDAP/AD-Attribut ein.", "\"$home\" Placeholder Field" : "\"$home\" Platzhalter-Feld", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in der Konfiguration eines extern angeschlossenen Speichers wird mit dem Wert des angegebenen Attributs ersetzt", + "User Profile Attributes" : "Benutzerprofilattribute", + "Phone Field" : "Telefonfeld", + "User profile Phone will be set from the specified attribute" : "Benutzerprofil Telefon wird aus dem angegebenen Attribut festgelegt", + "Website Field" : "Webseiten-Feld", + "User profile Website will be set from the specified attribute" : "Benutzerprofil Webseite wird aus dem angegebenen Attribut festgelegt", + "Address Field" : "Adressfeld", + "User profile Address will be set from the specified attribute" : "Benutzerprofil-Adresse wird aus dem angegebenen Attribut festgelegt", + "Twitter Field" : "X-Feld", + "User profile Twitter will be set from the specified attribute" : "Benutzerprofil X wird aus dem angegebenen Attribut festgelegt", + "Fediverse Field" : "Fediverse-Feld", + "User profile Fediverse will be set from the specified attribute" : "Benutzerprofil Fediverse wird aus dem angegebenen Attribut festgelegt", + "Organisation Field" : "Organisationsfeld", + "User profile Organisation will be set from the specified attribute" : "Benutzerprofil Organisation wird aus dem angegebenen Attribut festgelegt", + "Role Field" : "Rollenfeld", + "User profile Role will be set from the specified attribute" : "Benutzerprofil Rolle wird anhand des angegebenen Attributs festgelegt\n ", + "Headline Field" : "Überschriftenfeld", + "User profile Headline will be set from the specified attribute" : "Benutzerprofil Überschrift wird aus dem angegebenen Attribut festgelegt", + "Biography Field" : "Biografisches Feld", + "User profile Biography will be set from the specified attribute" : "Benutzerprofil Biografie wird aus dem angegebenen Attribut festgelegt", + "Birthdate Field" : "Geburtstagsfeld", + "User profile Date of birth will be set from the specified attribute" : "Das Geburtsdatum des Profils wird aus dem angegebenen Attribut ermittelt", + "Pronouns Field" : "Pronomenfeld", + "User profile Pronouns will be set from the specified attribute" : "Profil-Pronomen werden aus dem angegebenen Attribut festgelegt", "Internal Username" : "Interner Benutzername", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lasse das Eingabefeld leer. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Standardmäßig wird der interne Benutzername aus dem UUID-Attribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [a-zA-Z0-9_.@-]. Andere Zeichen werden durch ihre ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist außerdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Beispiel für alle DAV-Dienste. Mit dieser Einstellung kann das Standardverhalten geändert werden. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. Für die Standardeinstellung lasse das Eingabefeld leer.", "Internal Username Attribute:" : "Attribut für interne Benutzernamen:", "Override UUID detection" : "UUID-Erkennung überschreiben", "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." : "Standardmäßig wird die UUID-Eigenschaft automatisch erkannt. Die UUID-Eigenschaft wird genutzt, um einen LDAP-Benutzer und Gruppen einwandfrei zu identifizieren. Außerdem wird der interne Benutzername erzeugt, der auf Eigenschaften der UUID basiert, wenn es oben nicht anders angegeben wurde. Es muss allerdings sichergestellt werden, dass die gewählten Eigenschaften zur Identifikation der Benutzer und Gruppen eindeutig sind und zugeordnet werden können. Freilassen, um es beim Standardverhalten zu belassen. Änderungen wirken sich nur auf neu »gemappte« (hinzugefügte) LDAP-Benutzer und -Gruppen aus.", @@ -187,6 +231,7 @@ "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Die Benutzernamen werden genutzt, um Metadaten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Lösche niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung löschen", - "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen" + "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen", + "Invalid configuration. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Einzelheiten findest du in den Logdateien." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/de_AT.js b/apps/user_ldap/l10n/de_AT.js deleted file mode 100644 index 47e19c3eda3..00000000000 --- a/apps/user_ldap/l10n/de_AT.js +++ /dev/null @@ -1,64 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Löschen der Verbindungen gescheitert.", - "Failed to delete the server configuration" : "Löschen der Server-Konfiguration gescheitert", - "The configuration is valid and the connection could be established!" : "Die Konfiguration ist gültig und eine Verbindung konnte hergestellt werden!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber die Bindung schlug fehl. Bitte überprüfe die Server-Einstellungen und Login-Daten.", - "The configuration is invalid. Please have a look at the logs for further details." : "DIe Konfiguration ist ungültig. Bitte wirf einen Blick auf die Logs für weitere Details.", - "No action specified" : "Keine Aktion angegeben", - "No configuration specified" : "Keine Konfiguration angegeben", - "No data specified" : "Keine Daten angegeben", - " Could not set configuration %s" : "Konfiguration %s konnte nicht gespeichert werden", - "Configuration incorrect" : "Konfiguration fehlerhaft", - "Configuration incomplete" : "Konfiguration unvollständig", - "Configuration OK" : "Konfiguration OK", - "Select groups" : "Gruppen wählen", - "Select object classes" : "Objekt-Klassen wählen", - "{nthServer}. Server" : "{nthServer}. Server", - "Do you really want to delete the current Server Configuration?" : "Soll die momentane Server-Konfiguration wirklich gelöscht werden?", - "Confirm Deletion" : "Löschen bestätigen", - "Select attributes" : "Attribute wählen", - "Could not find the desired feature" : "Funktion konnte nicht gefunden werden", - "Invalid Host" : "Ungültiger Host", - "Server" : "Server", - "Users" : "Benutzer", - "Test Configuration" : "Konfiguration testen", - "Help" : "Hilfe", - "Groups meeting these criteria are available in %s:" : "Gruppen die den Kriterien entsprechen sind verfügbar unter %s:", - "Other Attributes:" : "Andere Atribute:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Legt den beim Login verwendeten Filter fest. %%uid ersetzt den Benutzernamen beim Login. Beispiel: \"uid=%%uid\"", - "1. Server" : "1. Server", - "%s. Server:" : "%s. Server:", - "Host" : "Host", - "Port" : "Port", - "User DN" : "User DN", - "Password" : "Passwort", - "For anonymous access, leave DN and Password empty." : "Für anonymen Zugriff DN und Passwort frei lassen.", - "One Base DN per line" : "Ein Basis DN per Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : "Basis DN für User und Gruppen können im Fortgeschritten-Tab festgelegt werden", - "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter spezifiziert welche LDAP User Zugang zu %s haben.", - "Back" : "Zurück", - "Continue" : "Weiter", - "Expert" : "Experte", - "Advanced" : "Fortgeschritten", - "<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>Warnung:</b> Die Apps user_ldap und user_webdavauth sind Inkompatibel. Unerwartetes Verhalten kann auftreten. Bitte wende dich an den Systemadministrator um eine auszuschalten.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Das PHP LDAP Modul ist nicht installiert, das Backend wird nicht funktionieren. Bitte wende dich an den Systemadministrator um es zu installieren.", - "Connection Settings" : "Verbindungseinstellungen", - "Configuration Active" : "Verbindung aktiv", - "Disable Main Server" : "Hauptserver ausschalten", - "in seconds. A change empties the cache." : "in Sekunden. Änderungen erneuern den Cache.", - "Directory Settings" : "Verzeichniseinstellungen", - "User Display Name Field" : "User Display Name Feld", - "The LDAP attribute to use to generate the user's display name." : "Das LDAP Atribut das für den Anzeigenamen des Users verwendet wird.", - "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", - "The LDAP attribute to use to generate the groups's display name." : "Das LDAP Attribut das für den Anzeigenamen der Gruppe verwendet wird.", - "Nested Groups" : "Verschachtelte Gruppen", - "Special Attributes" : "Spezielle Attribute", - "in bytes" : "in Bytes", - "Email Field" : "Email-Feld", - "Internal Username" : "Interner Username", - "UUID Attribute for Users:" : "UUID Attribut für User:", - "UUID Attribute for Groups:" : "UUID Attribut für Gruppen:" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/de_AT.json b/apps/user_ldap/l10n/de_AT.json deleted file mode 100644 index 93c59ba9279..00000000000 --- a/apps/user_ldap/l10n/de_AT.json +++ /dev/null @@ -1,62 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Löschen der Verbindungen gescheitert.", - "Failed to delete the server configuration" : "Löschen der Server-Konfiguration gescheitert", - "The configuration is valid and the connection could be established!" : "Die Konfiguration ist gültig und eine Verbindung konnte hergestellt werden!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber die Bindung schlug fehl. Bitte überprüfe die Server-Einstellungen und Login-Daten.", - "The configuration is invalid. Please have a look at the logs for further details." : "DIe Konfiguration ist ungültig. Bitte wirf einen Blick auf die Logs für weitere Details.", - "No action specified" : "Keine Aktion angegeben", - "No configuration specified" : "Keine Konfiguration angegeben", - "No data specified" : "Keine Daten angegeben", - " Could not set configuration %s" : "Konfiguration %s konnte nicht gespeichert werden", - "Configuration incorrect" : "Konfiguration fehlerhaft", - "Configuration incomplete" : "Konfiguration unvollständig", - "Configuration OK" : "Konfiguration OK", - "Select groups" : "Gruppen wählen", - "Select object classes" : "Objekt-Klassen wählen", - "{nthServer}. Server" : "{nthServer}. Server", - "Do you really want to delete the current Server Configuration?" : "Soll die momentane Server-Konfiguration wirklich gelöscht werden?", - "Confirm Deletion" : "Löschen bestätigen", - "Select attributes" : "Attribute wählen", - "Could not find the desired feature" : "Funktion konnte nicht gefunden werden", - "Invalid Host" : "Ungültiger Host", - "Server" : "Server", - "Users" : "Benutzer", - "Test Configuration" : "Konfiguration testen", - "Help" : "Hilfe", - "Groups meeting these criteria are available in %s:" : "Gruppen die den Kriterien entsprechen sind verfügbar unter %s:", - "Other Attributes:" : "Andere Atribute:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Legt den beim Login verwendeten Filter fest. %%uid ersetzt den Benutzernamen beim Login. Beispiel: \"uid=%%uid\"", - "1. Server" : "1. Server", - "%s. Server:" : "%s. Server:", - "Host" : "Host", - "Port" : "Port", - "User DN" : "User DN", - "Password" : "Passwort", - "For anonymous access, leave DN and Password empty." : "Für anonymen Zugriff DN und Passwort frei lassen.", - "One Base DN per line" : "Ein Basis DN per Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : "Basis DN für User und Gruppen können im Fortgeschritten-Tab festgelegt werden", - "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter spezifiziert welche LDAP User Zugang zu %s haben.", - "Back" : "Zurück", - "Continue" : "Weiter", - "Expert" : "Experte", - "Advanced" : "Fortgeschritten", - "<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>Warnung:</b> Die Apps user_ldap und user_webdavauth sind Inkompatibel. Unerwartetes Verhalten kann auftreten. Bitte wende dich an den Systemadministrator um eine auszuschalten.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Das PHP LDAP Modul ist nicht installiert, das Backend wird nicht funktionieren. Bitte wende dich an den Systemadministrator um es zu installieren.", - "Connection Settings" : "Verbindungseinstellungen", - "Configuration Active" : "Verbindung aktiv", - "Disable Main Server" : "Hauptserver ausschalten", - "in seconds. A change empties the cache." : "in Sekunden. Änderungen erneuern den Cache.", - "Directory Settings" : "Verzeichniseinstellungen", - "User Display Name Field" : "User Display Name Feld", - "The LDAP attribute to use to generate the user's display name." : "Das LDAP Atribut das für den Anzeigenamen des Users verwendet wird.", - "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", - "The LDAP attribute to use to generate the groups's display name." : "Das LDAP Attribut das für den Anzeigenamen der Gruppe verwendet wird.", - "Nested Groups" : "Verschachtelte Gruppen", - "Special Attributes" : "Spezielle Attribute", - "in bytes" : "in Bytes", - "Email Field" : "Email-Feld", - "Internal Username" : "Interner Username", - "UUID Attribute for Users:" : "UUID Attribut für User:", - "UUID Attribute for Groups:" : "UUID Attribut für Gruppen:" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js index 5d979cd9c2b..142a82913d8 100644 --- a/apps/user_ldap/l10n/de_DE.js +++ b/apps/user_ldap/l10n/de_DE.js @@ -1,21 +1,22 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "Löschen der Zuordnungen fehlgeschlagen.", - "Failed to delete the server configuration" : "Löschen der Serverkonfiguration fehlgeschlagen", + "Failed to clear the mappings." : "Die Zuordnungen konnten nicht gelöscht werden.", + "Failed to delete the server configuration" : "Die Serverkonfiguration konnte nicht gelöscht werden", "Invalid configuration: Anonymous binding is not allowed." : "Die Konfiguration ist ungültig: anonymes Binden ist nicht erlaubt. ", "Valid configuration, connection established!" : "Gültige Konfiguration, Verbindung hergestellt!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfen Sie die Servereinstellungen und die Anmeldeinformationen. ", - "Invalid configuration. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details finden Sie in den Logdateien. ", + "Invalid configuration: %s" : "Ungültige Konfiguration: %s", "No action specified" : "Keine Aktion angegeben", "No configuration specified" : "Keine Konfiguration angegeben", "No data specified" : "Keine Daten angegeben", - " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", + "Invalid data specified" : "Ungültige Daten angegeben", + "Could not set configuration %1$s to %2$s" : "Die Konfiguration %1$s konnte nicht auf %2$s gesetzt werden", "Action does not exist" : "Aktion existiert nicht", "Renewing …" : "Erneuere …", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", - "So-so password" : "Passables Passwort", + "So-so password" : "Akzeptables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", "The Base DN appears to be wrong" : "Die Base-DN scheint falsch zu sein", @@ -36,7 +37,7 @@ OC.L10N.register( "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Es ist ein Fehler aufgetreten. Bitte überprüfen Sie die Base DN wie auch die Verbindungseinstellungen und Anmeldeinformationen.", "Do you really want to delete the current Server Configuration?" : "Möchten Sie die aktuelle Serverkonfiguration wirklich löschen?", "Confirm Deletion" : "Löschen bestätigen", - "Mappings cleared successfully!" : "Zuordnungen erfolgreich gelöscht!", + "Mappings cleared successfully!" : "Zuordnungen gelöscht!", "Error while clearing the mappings." : "Fehler beim Löschen der Zuordnungen.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous Bind ist nicht erlaubt. Bitte geben Sie eine Benutzer-DN und ein Passwort angeben.", "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymous Bind ist anscheinend nicht erlaubt.", @@ -47,27 +48,44 @@ OC.L10N.register( "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfen Sie Ihre Anmelde-Attribute und Benutzernamen. Wirksamer Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>", "User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Erwägen Sie, Ihre Suche einzugrenzen, da sie viele Benutzer umfaßte. Nur der erste wird sich anmelden können.", - "An unspecified error occurred. Please check log and settings." : "Ein nicht näher spezifizierter Fehler ist aufgetreten. Bitte prüfen Sie die Protokolldatei und die Einstellungen.", + "An unspecified error occurred. Please check log and settings." : "Es ist ein ein nicht näher spezifizierter Fehler aufgetreten. Bitte prüfen Sie die Protokolldatei und die Einstellungen.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte überprüfen Sie Host, Port und Anmeldeinformationen.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Der \"1 %u id\" Platzhalter fehlt. Er wird durch den Anmeldenamen ersetzt, wenn LDAP / AD abgefragt wird.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte überprüfen Sie Host, Port und Anmeldeinformationen.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Der \"%u id\" Platzhalter fehlt. Er wird durch den Anmeldenamen ersetzt, wenn LDAP/AD abgefragt wird.", "Please provide a login name to test against" : "Bitte geben Sie einen Benutzernamen an, um gegen diesen zu testen", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.", - "Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP/AD-Server memberOf nicht unterstützt.", + "Password change rejected. Hint: %s" : "Passwortänderung verweigert. Hinweis: %s", + "Mandatory field \"%s\" left empty" : "Pflichtfeld \"%s\" leer gelassen", + "A password is given, but not an LDAP agent" : "Es wurde ein Passwort, aber kein LDAP-Agent eingegeben", + "No password is given for the user agent" : "Für den User-Agenten wurde kein Passwort angegeben", + "No LDAP base DN was given" : "Es wurde keine LDAP-Basis-DN angegeben", + "User base DN is not a subnode of global base DN" : "Der Benutzer-Basis-DN ist kein Unterknoten des globalen Basis-DN", + "Group base DN is not a subnode of global base DN" : "Der Gruppen-Basis-DN ist kein Unterknoten des globalen Basis-DN", + "Login filter does not contain %s placeholder." : "Der Anmeldefilter enthält keinen %s-Platzhalter", "Please login with the new password" : "Bitte mit dem neuen Passwort anmelden", "LDAP User backend" : "LDAP Benutzer-Backend", - "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab", - "Your password will expire today." : "Ihr Passwort läuft heute ab", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tage ab","Ihr Passwort läuft in %n Tagen ab"], - "LDAP / AD integration" : "LDAP/AD-Integration", - "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], - "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], + "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab.", + "Your password will expire today." : "Ihr Passwort läuft heute ab.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tag ab.","Ihr Passwort läuft in %n Tagen ab."], + "LDAP/AD integration" : "LDAP/AD-Integration", + "LDAP Connection" : "LDAP-Verbindung", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Bindung für diese LDAP-Konfiguration fehlgeschlagen: %s","Bindung für %n LDAP-Konfigurationen fehlgeschlagen: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Die Suche für diese LDAP-Konfigurationen ist fehlgeschlagen: %s","Die Suche für %n LDAP-Konfigurationen ist fehlgeschlagen: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Es gibt eine inaktive LDAP-Konfiguration: %s","Es gibt %n inaktive LDAP-Konfigurationen: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Bindung und Suche funktionieren mit der eingerichteten LDAP-Verbindung (%s)","Bindung und Suchen funktioniert auf allen der %nkonfigurierten LDAP-Verbindungen (%s)"], + "Invalid LDAP UUIDs" : "Ungültige LDAP-UUIDs", + "None found" : "Keine gefunden", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Es wurden ungültige UUIDs von LDAP-Konten oder -Gruppen gefunden. Bitte überprüfen Sie Ihre \"UUID-Erkennung überschreiben\"-Einstellungen im Expertenteil der LDAP-Konfiguration und verwenden Sie \"occ ldap:update-uuid\", um sie zu aktualisieren.", + "_%n group found_::_%n groups found_" : ["%n Gruppe gefunden","%n Gruppen gefunden"], + "> 1000 groups found" : "Mehr als 1000 Gruppen gefunden", + "> 1000 users found" : "Mehr als 1000 Benutzer gefunden", + "_%n user found_::_%n users found_" : ["%n Benutzer gefunden","%n Benutzer gefunden"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte geben Sie es selbst in den erweiterten LDAP-Einstellungen an.", "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", "LDAP user and group backend" : "LDAP Benutzer- und Gruppen-Backend", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Diese App ermöglicht es Administratoren Nextcloud mit einem LDAP-basiertem Nutzerverzeichnis zu verbinden.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Diese App ermöglicht es Administratoren Nextcloud mit einem auf LDAP basierenden Nutzerverzeichnis zu verbinden um so die Anmeldung, Nutzer, Gruppen und Berechtigungen zu konfigurieren. Administratoren können die App so einrichten, dass sie sich mit einem oder mehreren LDAP-Verzeichnissen oder Active-Directories über eine LDAP-Schnittstelle verbindet. Attribute wie Speicherkontingent, E-Mail, Avatare, Gruppenmitgliedschaft usw. können von einem Verzeichnis mit den dazugehörigen Anfragen und Filtern bezogen werden\n\nDer Nutzer meldet sich an der Nextclud mit seinen LDAP oder AD Anmeldedaten an. und erhält Zugriff durch eine Authentifizierungsanfrage am LDAP- oder AD-Server. Nextcloud speichert und verwendet nicht die LDAP- oder AD-Zugangsdaten sondern verwendet eine Sitzungs-ID für die jeweilige Nutzer-ID. Weitere Infos in der \"LDAP User and Group Backend\"-Dokumentation.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Diese App ermöglicht es der Administration, Nextcloud mit einem LDAP-basiertem Nutzerverzeichnis zu verbinden.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Diese App ermöglicht es Administratoren Nextcloud mit einem auf LDAP basierenden Nutzerverzeichnis zu verbinden um so die Anmeldung, Nutzer, Gruppen und Berechtigungen zu konfigurieren. Administratoren können die App so einrichten, dass sie sich mit einem oder mehreren LDAP-Verzeichnissen oder Active-Directories über eine LDAP-Schnittstelle verbindet. Attribute wie Speicherkontingent, E-Mail, Avatare, Gruppenmitgliedschaft usw. können von einem Verzeichnis mit den dazugehörigen Anfragen und Filtern bezogen werden\n\nDer Nutzer meldet sich an der Nextclud mit seinen LDAP oder AD Anmeldedaten an. und erhält Zugriff durch eine Authentifizierungsanfrage am LDAP- oder AD-Server. Nextcloud speichert und verwendet nicht die LDAP- oder AD-Zugangsdaten sondern verwendet eine Sitzungs-ID für die jeweilige Nutzer-ID. Weitere Infos in der \"LDAP User und Group Backend\"-Dokumentation.", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", @@ -79,18 +97,19 @@ OC.L10N.register( "Edit LDAP Query" : "LDAP-Abfrage bearbeiten", "LDAP Filter:" : "LDAP-Filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter bestimmt, welche LDAP-Gruppen Zugriff auf die %s-Instanz haben sollen.", - "Verify settings and count the groups" : "Überprüfe die Einstellungen und zähle die Gruppen", + "Verify settings and count the groups" : "Überprüfen Sie die Einstellungen und zählen Sie die Gruppen", "When logging in, %s will find the user based on the following attributes:" : "Beim Anmelden wird %s den Benutzer basierend auf folgenden Attributen finden:", - "LDAP / AD Username:" : "LDAP-/AD-Benutzername:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Erlaubt die Anmeldung gegen den LDAP/AD-Benutzernamen, der entweder \"uid\" oder \"sAMAccountName\" ist, und erkannt wird.", - "LDAP / AD Email Address:" : "LDAP-/AD-E-Mail-Adresse:", + "LDAP/AD Username:" : "LDAP-/AD-Benutzername:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Erlaubt die Anmeldung gegen den LDAP/AD-Benutzernamen, der entweder \"uid\" oder \"sAMAccountName\" ist, und erkannt wird.", + "LDAP/AD Email Address:" : "LDAP-/AD E-Mail-Adresse:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Erlaubt die Anmeldung gegen ein E-Mail-Attribut. \"mail\" und \"mailPrimaryAddress\" sind erlaubt.", "Other Attributes:" : "Andere Attribute:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. \"%%uid\" ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"", "Test Loginname" : "Anmeldenamen testen", + "Attempts to receive a DN for the given loginname and the current login filter" : "Es wird versucht, einen DN für den angegebenen Anmeldenamen und den aktuellen Anmeldefilter zu erhalten", "Verify settings" : "Einstellungen überprüfen", "%s. Server:" : "%s. Server:", - "Add a new configuration" : "Füge eine neue Konfiguration hinzu.", + "Add a new configuration" : "Fügen Sie eine neue Konfiguration hinzu.", "Copy current configuration into new directory binding" : "Aktuelle Konfiguration in eine neues Verzeichnis-Bind kopieren ", "Delete the current configuration" : "Aktuelle Konfiguration löschen", "Host" : "Host", @@ -103,7 +122,7 @@ OC.L10N.register( "For anonymous access, leave DN and Password empty." : "Lassen Sie die Felder DN und Passwort für einen anonymen Zugang leer.", "Save Credentials" : "Zugangsdaten speichern", "One Base DN per line" : "Einen Basis-DN pro Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : " Sie können die Basis-DN für Benutzer und Gruppen im Reiter „Fortgeschritten“ angeben", + "You can specify Base DN for users and groups in the Advanced tab" : " Sie können die Basis-DN für Benutzer und Gruppen im Reiter \"Fortgeschritten\" angeben", "Detect Base DN" : "Base-DN ermitteln", "Test Base DN" : "Base DN testen", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", @@ -115,12 +134,12 @@ OC.L10N.register( "Saving" : "Speichern", "Back" : "Zurück", "Continue" : "Fortsetzen", - "Please renew your password." : "Bitte erneuern Sie Ihr Passwort", + "Please renew your password." : "Bitte erneuern Sie Ihr Passwort.", "An internal error occurred." : "Es ist ein interner Fehler aufgetreten.", - "Please try again or contact your administrator." : "Bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator.", + "Please try again or contact your administrator." : "Bitte erneut versuchen oder kontaktieren Sie Ihre Administration.", "Current password" : "Aktuelles Passwort", "New password" : "Neues Passwort", - "Renew password" : "Bitte erneuern Sie Ihr Passwort", + "Renew password" : "Passwort erneuern", "Wrong password." : "Falsches Passwort.", "Cancel" : "Abbrechen", "Server" : "Server", @@ -129,7 +148,7 @@ OC.L10N.register( "Groups" : "Gruppen", "Expert" : "Experte", "Advanced" : "Fortgeschritten", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktieren Sie Ihren Systemadministrator und bitten Sie um die Installation des Moduls.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktieren Sie Ihre Systemadministration und bitten Sie sie um die Installation des Moduls.", "Connection Settings" : "Verbindungseinstellungen", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Konfiguration wird übersprungen, wenn nicht angehakt.", @@ -146,11 +165,13 @@ OC.L10N.register( "User Display Name Field" : "Feld für den Anzeigenamen des Benutzers", "The LDAP attribute to use to generate the user's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens des Benutzers.", "2nd User Display Name Field" : "2. Benutzeranzeigename Feld", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. Ein hinzuzufügendes LDAP-Attribut um den Namen in Klammern anzuzeigen. Beispiel: »John Doe (john.doe@example.org)«.", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. Ein hinzuzufügendes LDAP-Attribut, um den Namen in Klammern anzuzeigen. Beispiel: »Max Mustermann (max.mustermann@beispiel.de)«.", "Base User Tree" : "Basis-Benutzerbaum", "One User Base DN per line" : "Ein Benutzer Basis-DN pro Zeile", "User Search Attributes" : "Benutzersucheigenschaften", "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", + "Disable users missing from LDAP" : "Benutzer deaktivieren, die in LDAP fehlen", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Beim Einschalten werden aus LDAP importierte und dann hier fehlende Benutzer deaktiviert", "Group Display Name Field" : "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens der Gruppen.", "Base Group Tree" : "Basis-Gruppenbaum", @@ -162,25 +183,48 @@ OC.L10N.register( "Nested Groups" : "Verschachtelte Gruppen", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Wenn aktiviert, werden Gruppen, die Gruppen enthalten, unterstützt. (Funktioniert nur, wenn das Merkmal des Gruppenmitgliedes den Domain-Namen enthält.)", "Paging chunksize" : "Seitenstücke (Paging chunksize)", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Abschnittslänge von seitenweise angezeigten LDAP-Suchen, die bei Suchen wie etwa Benutzer- und Gruppen-Auflistungen ausufernd viele Ergebnisse liefern können (die Einstellung „0“ deaktiviert seitenweise angezeigte LDAP-Suchen in diesen Situationen).", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Abschnittslänge von seitenweise angezeigten LDAP-Suchen, die bei Suchen wie etwa Benutzer- und Gruppen-Auflistungen ausufernd viele Ergebnisse liefern können (die Einstellung \"0\" deaktiviert seitenweise angezeigte LDAP-Suchen in diesen Situationen).", "Enable LDAP password changes per user" : "LDAP-Passwortänderungen pro Benutzer aktivieren", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP-Nutzern die Änderung ihrer Passwörter erlauben und Super-Administratoren sowie Gruppen-Administratoren die Passwortänderung ihrer LDAP-Nutzer erlauben. \nDies funktioniert nur, wenn die Zugriffsrichtlinien auf dem LDAP-Server entsprechend konfiguriert sind. Da Passwörter im Klartext an den LDAP-Server gesendet werden, muss die Transportverschlüsselung verwendet werden und das Passwort-Hashing auf dem LDAP-Server sollte konfiguriert werden.", "(New password is sent as plain text to LDAP)" : "(Das neue Passwort wurde als einfacher Text an LDAP gesendet)", - "Default password policy DN" : "Standard Passwort-Regeln DN", + "Default password policy DN" : "Standardmäßige Passwort-Regeln DN", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Die DN einer Standard-Passwort-Policy, welche für den Umgang mit ablaufenden Passwörtern verwendet wird. Dies funktioniert nur wenn Passwort-Änderungen pro Benutzer via LDAP und OpenLDAP aktiviert sind. Leer lassen, um die Passwortablaufbehandlung zu deaktivieren.", "Special Attributes" : "Spezielle Eigenschaften", "Quota Field" : "Kontingent-Feld", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird das Standard-Kontingent des Benutzers verwendet. Andernfall ein LDAP/AD-Attribut eingeben.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird das Standard-Kontingent des Benutzers verwendet. Andernfalls ein LDAP/AD-Attribut eingeben.", "Quota Default" : "Standard-Kontingent", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standard-Kontingent ignorieren für LDAP-Benutzer , die kein Kontingent festgelegt haben.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standard-Kontingent ignorieren für LDAP-Benutzer, die kein Kontingent festgelegt haben.", "Email Field" : "E-Mail-Feld", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "E-Mail-Adresse des Benutzers aus seinem LDAP-Attribut generieren. Für Standard-Verhalten leer lassen.", "User Home Folder Naming Rule" : "Benennungsregel für das Home-Verzeichnis des Benutzers", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls tragen Sie bitte ein LDAP/AD-Attribut ein.", "\"$home\" Placeholder Field" : "\"$home\" Platzhalter-Feld", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in der Konfiguration eines extern angeschlossenen Speichers wird mit dem Wert des angegebenen Attributs ersetzt", + "User Profile Attributes" : "Benutzerprofilattribute", + "Phone Field" : "Telefonfeld", + "User profile Phone will be set from the specified attribute" : "Benutzerprofil Telefon wird aus dem angegebenen Attribut festgelegt", + "Website Field" : "Webseiten-Feld", + "User profile Website will be set from the specified attribute" : "Benutzerprofil Webseite wird aus dem angegebenen Attribut festgelegt", + "Address Field" : "Adressfeld", + "User profile Address will be set from the specified attribute" : "Benutzerprofil Adresse wird aus dem angegebenen Attribut festgelegt", + "Twitter Field" : "Twitter-Feld", + "User profile Twitter will be set from the specified attribute" : "Benutzerprofil Twitter wird aus dem angegebenen Attribut festgelegt", + "Fediverse Field" : "Fediverse-Feld", + "User profile Fediverse will be set from the specified attribute" : "Benutzerprofil Fediverse wird aus dem angegebenen Attribut festgelegt", + "Organisation Field" : "Organisationsfeld", + "User profile Organisation will be set from the specified attribute" : "Benutzerprofil Organisation wird aus dem angegebenen Attribut festgelegt", + "Role Field" : "Rollenfeld", + "User profile Role will be set from the specified attribute" : "Benutzerprofil Rolle wird anhand des angegebenen Attributs festgelegt\n ", + "Headline Field" : "Überschriftenfeld", + "User profile Headline will be set from the specified attribute" : "Benutzerprofil Überschrift wird aus dem angegebenen Attribut festgelegt", + "Biography Field" : "Biografisches Feld", + "User profile Biography will be set from the specified attribute" : "Benutzerprofil Biografie wird aus dem angegebenen Attribut festgelegt", + "Birthdate Field" : "Geburtstagsfeld", + "User profile Date of birth will be set from the specified attribute" : "Das Geburtsdatum des Benutzerprofils wird aus dem angegebenen Attribut ermittelt", + "Pronouns Field" : "Pronomenfeld", + "User profile Pronouns will be set from the specified attribute" : "Benutzerprofil-Pronomen werden aus dem angegebenen Attribut festgelegt", "Internal Username" : "Interner Benutzername", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lassen Sie das Eingabefeld leer. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Standardmäßig wird der interne Benutzername aus dem UUID-Attribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [a-zA-Z0-9_.@-]. Andere Zeichen werden durch ihre ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist außerdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Beispiel für alle DAV-Dienste. Mit dieser Einstellung kann das Standardverhalten geändert werden. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. Für die Standardeinstellung lassen Sie das Eingabefeld leer.", "Internal Username Attribute:" : "Interne Eigenschaften des Benutzers:", "Override UUID detection" : "UUID-Erkennung überschreiben", "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." : "Standardmäßig wird die UUID-Eigenschaft automatisch erkannt. Die UUID-Eigenschaft wird genutzt, um einen LDAP-Benutzer und Gruppen einwandfrei zu identifizieren. Außerdem wird der interne Benutzername erzeugt, der auf Eigenschaften der UUID basiert, wenn es oben nicht anders angegeben wurde. Sie müssen allerdings sicherstellen, dass Ihre gewählten Eigenschaften zur Identifikation der Benutzer und Gruppen eindeutig sind und zugeordnet werden können. Lassen Sie es frei, um es beim Standardverhalten zu belassen. Änderungen wirken sich nur auf neu gemappte (hinzugefügte) LDAP-Benutzer und -Gruppen aus.", @@ -189,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Benutzernamen dienen zum Speichern und Zuweisen von Metadaten. Um Benutzer eindeutig zu identifizieren und zu erkennen, besitzt jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des jeweiligen Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzers zugeordnet. Darüber hinaus wird der DN auch zwischengespeichert, um die Interaktion über LDAP zu reduzieren, was aber nicht zur Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird durchgängig verwendet. Ein Löschen der Zuordnungen führt zum systemweiten Verbleib von Restdaten. Es bleibt nicht auf eine einzelne Konfiguration beschränkt, sondern wirkt sich auf alle LDAP-Konfigurationen aus! Löschen Sie die Zuordnungen nie innerhalb einer Produktivumgebung, sondern nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "Lösche LDAP-Benutzernamenzuordnung", - "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung" + "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung", + "Invalid configuration. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details finden Sie in den Protokolldateien. " }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json index c38fff0c180..c8bcf0d8640 100644 --- a/apps/user_ldap/l10n/de_DE.json +++ b/apps/user_ldap/l10n/de_DE.json @@ -1,19 +1,20 @@ { "translations": { - "Failed to clear the mappings." : "Löschen der Zuordnungen fehlgeschlagen.", - "Failed to delete the server configuration" : "Löschen der Serverkonfiguration fehlgeschlagen", + "Failed to clear the mappings." : "Die Zuordnungen konnten nicht gelöscht werden.", + "Failed to delete the server configuration" : "Die Serverkonfiguration konnte nicht gelöscht werden", "Invalid configuration: Anonymous binding is not allowed." : "Die Konfiguration ist ungültig: anonymes Binden ist nicht erlaubt. ", "Valid configuration, connection established!" : "Gültige Konfiguration, Verbindung hergestellt!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfen Sie die Servereinstellungen und die Anmeldeinformationen. ", - "Invalid configuration. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details finden Sie in den Logdateien. ", + "Invalid configuration: %s" : "Ungültige Konfiguration: %s", "No action specified" : "Keine Aktion angegeben", "No configuration specified" : "Keine Konfiguration angegeben", "No data specified" : "Keine Daten angegeben", - " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", + "Invalid data specified" : "Ungültige Daten angegeben", + "Could not set configuration %1$s to %2$s" : "Die Konfiguration %1$s konnte nicht auf %2$s gesetzt werden", "Action does not exist" : "Aktion existiert nicht", "Renewing …" : "Erneuere …", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", - "So-so password" : "Passables Passwort", + "So-so password" : "Akzeptables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", "The Base DN appears to be wrong" : "Die Base-DN scheint falsch zu sein", @@ -34,7 +35,7 @@ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Es ist ein Fehler aufgetreten. Bitte überprüfen Sie die Base DN wie auch die Verbindungseinstellungen und Anmeldeinformationen.", "Do you really want to delete the current Server Configuration?" : "Möchten Sie die aktuelle Serverkonfiguration wirklich löschen?", "Confirm Deletion" : "Löschen bestätigen", - "Mappings cleared successfully!" : "Zuordnungen erfolgreich gelöscht!", + "Mappings cleared successfully!" : "Zuordnungen gelöscht!", "Error while clearing the mappings." : "Fehler beim Löschen der Zuordnungen.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous Bind ist nicht erlaubt. Bitte geben Sie eine Benutzer-DN und ein Passwort angeben.", "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymous Bind ist anscheinend nicht erlaubt.", @@ -45,27 +46,44 @@ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfen Sie Ihre Anmelde-Attribute und Benutzernamen. Wirksamer Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>", "User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Erwägen Sie, Ihre Suche einzugrenzen, da sie viele Benutzer umfaßte. Nur der erste wird sich anmelden können.", - "An unspecified error occurred. Please check log and settings." : "Ein nicht näher spezifizierter Fehler ist aufgetreten. Bitte prüfen Sie die Protokolldatei und die Einstellungen.", + "An unspecified error occurred. Please check log and settings." : "Es ist ein ein nicht näher spezifizierter Fehler aufgetreten. Bitte prüfen Sie die Protokolldatei und die Einstellungen.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte überprüfen Sie Host, Port und Anmeldeinformationen.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Der \"1 %u id\" Platzhalter fehlt. Er wird durch den Anmeldenamen ersetzt, wenn LDAP / AD abgefragt wird.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte überprüfen Sie Host, Port und Anmeldeinformationen.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Der \"%u id\" Platzhalter fehlt. Er wird durch den Anmeldenamen ersetzt, wenn LDAP/AD abgefragt wird.", "Please provide a login name to test against" : "Bitte geben Sie einen Benutzernamen an, um gegen diesen zu testen", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.", - "Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP/AD-Server memberOf nicht unterstützt.", + "Password change rejected. Hint: %s" : "Passwortänderung verweigert. Hinweis: %s", + "Mandatory field \"%s\" left empty" : "Pflichtfeld \"%s\" leer gelassen", + "A password is given, but not an LDAP agent" : "Es wurde ein Passwort, aber kein LDAP-Agent eingegeben", + "No password is given for the user agent" : "Für den User-Agenten wurde kein Passwort angegeben", + "No LDAP base DN was given" : "Es wurde keine LDAP-Basis-DN angegeben", + "User base DN is not a subnode of global base DN" : "Der Benutzer-Basis-DN ist kein Unterknoten des globalen Basis-DN", + "Group base DN is not a subnode of global base DN" : "Der Gruppen-Basis-DN ist kein Unterknoten des globalen Basis-DN", + "Login filter does not contain %s placeholder." : "Der Anmeldefilter enthält keinen %s-Platzhalter", "Please login with the new password" : "Bitte mit dem neuen Passwort anmelden", "LDAP User backend" : "LDAP Benutzer-Backend", - "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab", - "Your password will expire today." : "Ihr Passwort läuft heute ab", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tage ab","Ihr Passwort läuft in %n Tagen ab"], - "LDAP / AD integration" : "LDAP/AD-Integration", - "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], - "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], + "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab.", + "Your password will expire today." : "Ihr Passwort läuft heute ab.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tag ab.","Ihr Passwort läuft in %n Tagen ab."], + "LDAP/AD integration" : "LDAP/AD-Integration", + "LDAP Connection" : "LDAP-Verbindung", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Bindung für diese LDAP-Konfiguration fehlgeschlagen: %s","Bindung für %n LDAP-Konfigurationen fehlgeschlagen: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Die Suche für diese LDAP-Konfigurationen ist fehlgeschlagen: %s","Die Suche für %n LDAP-Konfigurationen ist fehlgeschlagen: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Es gibt eine inaktive LDAP-Konfiguration: %s","Es gibt %n inaktive LDAP-Konfigurationen: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Bindung und Suche funktionieren mit der eingerichteten LDAP-Verbindung (%s)","Bindung und Suchen funktioniert auf allen der %nkonfigurierten LDAP-Verbindungen (%s)"], + "Invalid LDAP UUIDs" : "Ungültige LDAP-UUIDs", + "None found" : "Keine gefunden", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Es wurden ungültige UUIDs von LDAP-Konten oder -Gruppen gefunden. Bitte überprüfen Sie Ihre \"UUID-Erkennung überschreiben\"-Einstellungen im Expertenteil der LDAP-Konfiguration und verwenden Sie \"occ ldap:update-uuid\", um sie zu aktualisieren.", + "_%n group found_::_%n groups found_" : ["%n Gruppe gefunden","%n Gruppen gefunden"], + "> 1000 groups found" : "Mehr als 1000 Gruppen gefunden", + "> 1000 users found" : "Mehr als 1000 Benutzer gefunden", + "_%n user found_::_%n users found_" : ["%n Benutzer gefunden","%n Benutzer gefunden"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte geben Sie es selbst in den erweiterten LDAP-Einstellungen an.", "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", "LDAP user and group backend" : "LDAP Benutzer- und Gruppen-Backend", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Diese App ermöglicht es Administratoren Nextcloud mit einem LDAP-basiertem Nutzerverzeichnis zu verbinden.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Diese App ermöglicht es Administratoren Nextcloud mit einem auf LDAP basierenden Nutzerverzeichnis zu verbinden um so die Anmeldung, Nutzer, Gruppen und Berechtigungen zu konfigurieren. Administratoren können die App so einrichten, dass sie sich mit einem oder mehreren LDAP-Verzeichnissen oder Active-Directories über eine LDAP-Schnittstelle verbindet. Attribute wie Speicherkontingent, E-Mail, Avatare, Gruppenmitgliedschaft usw. können von einem Verzeichnis mit den dazugehörigen Anfragen und Filtern bezogen werden\n\nDer Nutzer meldet sich an der Nextclud mit seinen LDAP oder AD Anmeldedaten an. und erhält Zugriff durch eine Authentifizierungsanfrage am LDAP- oder AD-Server. Nextcloud speichert und verwendet nicht die LDAP- oder AD-Zugangsdaten sondern verwendet eine Sitzungs-ID für die jeweilige Nutzer-ID. Weitere Infos in der \"LDAP User and Group Backend\"-Dokumentation.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Diese App ermöglicht es der Administration, Nextcloud mit einem LDAP-basiertem Nutzerverzeichnis zu verbinden.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Diese App ermöglicht es Administratoren Nextcloud mit einem auf LDAP basierenden Nutzerverzeichnis zu verbinden um so die Anmeldung, Nutzer, Gruppen und Berechtigungen zu konfigurieren. Administratoren können die App so einrichten, dass sie sich mit einem oder mehreren LDAP-Verzeichnissen oder Active-Directories über eine LDAP-Schnittstelle verbindet. Attribute wie Speicherkontingent, E-Mail, Avatare, Gruppenmitgliedschaft usw. können von einem Verzeichnis mit den dazugehörigen Anfragen und Filtern bezogen werden\n\nDer Nutzer meldet sich an der Nextclud mit seinen LDAP oder AD Anmeldedaten an. und erhält Zugriff durch eine Authentifizierungsanfrage am LDAP- oder AD-Server. Nextcloud speichert und verwendet nicht die LDAP- oder AD-Zugangsdaten sondern verwendet eine Sitzungs-ID für die jeweilige Nutzer-ID. Weitere Infos in der \"LDAP User und Group Backend\"-Dokumentation.", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", @@ -77,18 +95,19 @@ "Edit LDAP Query" : "LDAP-Abfrage bearbeiten", "LDAP Filter:" : "LDAP-Filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter bestimmt, welche LDAP-Gruppen Zugriff auf die %s-Instanz haben sollen.", - "Verify settings and count the groups" : "Überprüfe die Einstellungen und zähle die Gruppen", + "Verify settings and count the groups" : "Überprüfen Sie die Einstellungen und zählen Sie die Gruppen", "When logging in, %s will find the user based on the following attributes:" : "Beim Anmelden wird %s den Benutzer basierend auf folgenden Attributen finden:", - "LDAP / AD Username:" : "LDAP-/AD-Benutzername:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Erlaubt die Anmeldung gegen den LDAP/AD-Benutzernamen, der entweder \"uid\" oder \"sAMAccountName\" ist, und erkannt wird.", - "LDAP / AD Email Address:" : "LDAP-/AD-E-Mail-Adresse:", + "LDAP/AD Username:" : "LDAP-/AD-Benutzername:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Erlaubt die Anmeldung gegen den LDAP/AD-Benutzernamen, der entweder \"uid\" oder \"sAMAccountName\" ist, und erkannt wird.", + "LDAP/AD Email Address:" : "LDAP-/AD E-Mail-Adresse:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Erlaubt die Anmeldung gegen ein E-Mail-Attribut. \"mail\" und \"mailPrimaryAddress\" sind erlaubt.", "Other Attributes:" : "Andere Attribute:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. \"%%uid\" ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"", "Test Loginname" : "Anmeldenamen testen", + "Attempts to receive a DN for the given loginname and the current login filter" : "Es wird versucht, einen DN für den angegebenen Anmeldenamen und den aktuellen Anmeldefilter zu erhalten", "Verify settings" : "Einstellungen überprüfen", "%s. Server:" : "%s. Server:", - "Add a new configuration" : "Füge eine neue Konfiguration hinzu.", + "Add a new configuration" : "Fügen Sie eine neue Konfiguration hinzu.", "Copy current configuration into new directory binding" : "Aktuelle Konfiguration in eine neues Verzeichnis-Bind kopieren ", "Delete the current configuration" : "Aktuelle Konfiguration löschen", "Host" : "Host", @@ -101,7 +120,7 @@ "For anonymous access, leave DN and Password empty." : "Lassen Sie die Felder DN und Passwort für einen anonymen Zugang leer.", "Save Credentials" : "Zugangsdaten speichern", "One Base DN per line" : "Einen Basis-DN pro Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : " Sie können die Basis-DN für Benutzer und Gruppen im Reiter „Fortgeschritten“ angeben", + "You can specify Base DN for users and groups in the Advanced tab" : " Sie können die Basis-DN für Benutzer und Gruppen im Reiter \"Fortgeschritten\" angeben", "Detect Base DN" : "Base-DN ermitteln", "Test Base DN" : "Base DN testen", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", @@ -113,12 +132,12 @@ "Saving" : "Speichern", "Back" : "Zurück", "Continue" : "Fortsetzen", - "Please renew your password." : "Bitte erneuern Sie Ihr Passwort", + "Please renew your password." : "Bitte erneuern Sie Ihr Passwort.", "An internal error occurred." : "Es ist ein interner Fehler aufgetreten.", - "Please try again or contact your administrator." : "Bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator.", + "Please try again or contact your administrator." : "Bitte erneut versuchen oder kontaktieren Sie Ihre Administration.", "Current password" : "Aktuelles Passwort", "New password" : "Neues Passwort", - "Renew password" : "Bitte erneuern Sie Ihr Passwort", + "Renew password" : "Passwort erneuern", "Wrong password." : "Falsches Passwort.", "Cancel" : "Abbrechen", "Server" : "Server", @@ -127,7 +146,7 @@ "Groups" : "Gruppen", "Expert" : "Experte", "Advanced" : "Fortgeschritten", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktieren Sie Ihren Systemadministrator und bitten Sie um die Installation des Moduls.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktieren Sie Ihre Systemadministration und bitten Sie sie um die Installation des Moduls.", "Connection Settings" : "Verbindungseinstellungen", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Konfiguration wird übersprungen, wenn nicht angehakt.", @@ -144,11 +163,13 @@ "User Display Name Field" : "Feld für den Anzeigenamen des Benutzers", "The LDAP attribute to use to generate the user's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens des Benutzers.", "2nd User Display Name Field" : "2. Benutzeranzeigename Feld", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. Ein hinzuzufügendes LDAP-Attribut um den Namen in Klammern anzuzeigen. Beispiel: »John Doe (john.doe@example.org)«.", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. Ein hinzuzufügendes LDAP-Attribut, um den Namen in Klammern anzuzeigen. Beispiel: »Max Mustermann (max.mustermann@beispiel.de)«.", "Base User Tree" : "Basis-Benutzerbaum", "One User Base DN per line" : "Ein Benutzer Basis-DN pro Zeile", "User Search Attributes" : "Benutzersucheigenschaften", "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", + "Disable users missing from LDAP" : "Benutzer deaktivieren, die in LDAP fehlen", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Beim Einschalten werden aus LDAP importierte und dann hier fehlende Benutzer deaktiviert", "Group Display Name Field" : "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens der Gruppen.", "Base Group Tree" : "Basis-Gruppenbaum", @@ -160,25 +181,48 @@ "Nested Groups" : "Verschachtelte Gruppen", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Wenn aktiviert, werden Gruppen, die Gruppen enthalten, unterstützt. (Funktioniert nur, wenn das Merkmal des Gruppenmitgliedes den Domain-Namen enthält.)", "Paging chunksize" : "Seitenstücke (Paging chunksize)", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Abschnittslänge von seitenweise angezeigten LDAP-Suchen, die bei Suchen wie etwa Benutzer- und Gruppen-Auflistungen ausufernd viele Ergebnisse liefern können (die Einstellung „0“ deaktiviert seitenweise angezeigte LDAP-Suchen in diesen Situationen).", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Abschnittslänge von seitenweise angezeigten LDAP-Suchen, die bei Suchen wie etwa Benutzer- und Gruppen-Auflistungen ausufernd viele Ergebnisse liefern können (die Einstellung \"0\" deaktiviert seitenweise angezeigte LDAP-Suchen in diesen Situationen).", "Enable LDAP password changes per user" : "LDAP-Passwortänderungen pro Benutzer aktivieren", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP-Nutzern die Änderung ihrer Passwörter erlauben und Super-Administratoren sowie Gruppen-Administratoren die Passwortänderung ihrer LDAP-Nutzer erlauben. \nDies funktioniert nur, wenn die Zugriffsrichtlinien auf dem LDAP-Server entsprechend konfiguriert sind. Da Passwörter im Klartext an den LDAP-Server gesendet werden, muss die Transportverschlüsselung verwendet werden und das Passwort-Hashing auf dem LDAP-Server sollte konfiguriert werden.", "(New password is sent as plain text to LDAP)" : "(Das neue Passwort wurde als einfacher Text an LDAP gesendet)", - "Default password policy DN" : "Standard Passwort-Regeln DN", + "Default password policy DN" : "Standardmäßige Passwort-Regeln DN", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Die DN einer Standard-Passwort-Policy, welche für den Umgang mit ablaufenden Passwörtern verwendet wird. Dies funktioniert nur wenn Passwort-Änderungen pro Benutzer via LDAP und OpenLDAP aktiviert sind. Leer lassen, um die Passwortablaufbehandlung zu deaktivieren.", "Special Attributes" : "Spezielle Eigenschaften", "Quota Field" : "Kontingent-Feld", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird das Standard-Kontingent des Benutzers verwendet. Andernfall ein LDAP/AD-Attribut eingeben.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird das Standard-Kontingent des Benutzers verwendet. Andernfalls ein LDAP/AD-Attribut eingeben.", "Quota Default" : "Standard-Kontingent", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standard-Kontingent ignorieren für LDAP-Benutzer , die kein Kontingent festgelegt haben.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standard-Kontingent ignorieren für LDAP-Benutzer, die kein Kontingent festgelegt haben.", "Email Field" : "E-Mail-Feld", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "E-Mail-Adresse des Benutzers aus seinem LDAP-Attribut generieren. Für Standard-Verhalten leer lassen.", "User Home Folder Naming Rule" : "Benennungsregel für das Home-Verzeichnis des Benutzers", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls tragen Sie bitte ein LDAP/AD-Attribut ein.", "\"$home\" Placeholder Field" : "\"$home\" Platzhalter-Feld", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in der Konfiguration eines extern angeschlossenen Speichers wird mit dem Wert des angegebenen Attributs ersetzt", + "User Profile Attributes" : "Benutzerprofilattribute", + "Phone Field" : "Telefonfeld", + "User profile Phone will be set from the specified attribute" : "Benutzerprofil Telefon wird aus dem angegebenen Attribut festgelegt", + "Website Field" : "Webseiten-Feld", + "User profile Website will be set from the specified attribute" : "Benutzerprofil Webseite wird aus dem angegebenen Attribut festgelegt", + "Address Field" : "Adressfeld", + "User profile Address will be set from the specified attribute" : "Benutzerprofil Adresse wird aus dem angegebenen Attribut festgelegt", + "Twitter Field" : "Twitter-Feld", + "User profile Twitter will be set from the specified attribute" : "Benutzerprofil Twitter wird aus dem angegebenen Attribut festgelegt", + "Fediverse Field" : "Fediverse-Feld", + "User profile Fediverse will be set from the specified attribute" : "Benutzerprofil Fediverse wird aus dem angegebenen Attribut festgelegt", + "Organisation Field" : "Organisationsfeld", + "User profile Organisation will be set from the specified attribute" : "Benutzerprofil Organisation wird aus dem angegebenen Attribut festgelegt", + "Role Field" : "Rollenfeld", + "User profile Role will be set from the specified attribute" : "Benutzerprofil Rolle wird anhand des angegebenen Attributs festgelegt\n ", + "Headline Field" : "Überschriftenfeld", + "User profile Headline will be set from the specified attribute" : "Benutzerprofil Überschrift wird aus dem angegebenen Attribut festgelegt", + "Biography Field" : "Biografisches Feld", + "User profile Biography will be set from the specified attribute" : "Benutzerprofil Biografie wird aus dem angegebenen Attribut festgelegt", + "Birthdate Field" : "Geburtstagsfeld", + "User profile Date of birth will be set from the specified attribute" : "Das Geburtsdatum des Benutzerprofils wird aus dem angegebenen Attribut ermittelt", + "Pronouns Field" : "Pronomenfeld", + "User profile Pronouns will be set from the specified attribute" : "Benutzerprofil-Pronomen werden aus dem angegebenen Attribut festgelegt", "Internal Username" : "Interner Benutzername", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lassen Sie das Eingabefeld leer. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Standardmäßig wird der interne Benutzername aus dem UUID-Attribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [a-zA-Z0-9_.@-]. Andere Zeichen werden durch ihre ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist außerdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Beispiel für alle DAV-Dienste. Mit dieser Einstellung kann das Standardverhalten geändert werden. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. Für die Standardeinstellung lassen Sie das Eingabefeld leer.", "Internal Username Attribute:" : "Interne Eigenschaften des Benutzers:", "Override UUID detection" : "UUID-Erkennung überschreiben", "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." : "Standardmäßig wird die UUID-Eigenschaft automatisch erkannt. Die UUID-Eigenschaft wird genutzt, um einen LDAP-Benutzer und Gruppen einwandfrei zu identifizieren. Außerdem wird der interne Benutzername erzeugt, der auf Eigenschaften der UUID basiert, wenn es oben nicht anders angegeben wurde. Sie müssen allerdings sicherstellen, dass Ihre gewählten Eigenschaften zur Identifikation der Benutzer und Gruppen eindeutig sind und zugeordnet werden können. Lassen Sie es frei, um es beim Standardverhalten zu belassen. Änderungen wirken sich nur auf neu gemappte (hinzugefügte) LDAP-Benutzer und -Gruppen aus.", @@ -187,6 +231,7 @@ "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Benutzernamen dienen zum Speichern und Zuweisen von Metadaten. Um Benutzer eindeutig zu identifizieren und zu erkennen, besitzt jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des jeweiligen Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzers zugeordnet. Darüber hinaus wird der DN auch zwischengespeichert, um die Interaktion über LDAP zu reduzieren, was aber nicht zur Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird durchgängig verwendet. Ein Löschen der Zuordnungen führt zum systemweiten Verbleib von Restdaten. Es bleibt nicht auf eine einzelne Konfiguration beschränkt, sondern wirkt sich auf alle LDAP-Konfigurationen aus! Löschen Sie die Zuordnungen nie innerhalb einer Produktivumgebung, sondern nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "Lösche LDAP-Benutzernamenzuordnung", - "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung" + "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung", + "Invalid configuration. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details finden Sie in den Protokolldateien. " },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/el.js b/apps/user_ldap/l10n/el.js index 990388db03e..bb4bebdc29c 100644 --- a/apps/user_ldap/l10n/el.js +++ b/apps/user_ldap/l10n/el.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Μη έγκυρη διαμόρφωση: Δεν επιτρέπεται ανώνυμη δέσμευση.", "Valid configuration, connection established!" : "Επιτυχής ρύθμιση, συνδεθήκατε με επιτυχία", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Έγκυρη διαμόρφωση, αλλά η σύνδεση απέτυχε. Ελέγξτε τις ρυθμίσεις διακομιστή και τα διαπιστευτήρια.", - "Invalid configuration. Please have a look at the logs for further details." : "Μη έγκυρη διαμόρφωση. Παρακαλώ ρίξτε μια ματιά στα αρχεία καταγραφής για περισσότερες λεπτομέρειες.", "No action specified" : "Καμμία εντολή δεν προσδιορίστηκε", "No configuration specified" : "Καμμία διαμόρφωση δεν προσδιορίστηκε", "No data specified" : "Δεν προσδιορίστηκαν δεδομένα", - " Could not set configuration %s" : "Αδυναμία ρύθμισης %s", "Action does not exist" : "Η ενέργεια δεν υπάρχει", "Renewing …" : "Ανανέωση ...", "Very weak password" : "Πολύ αδύναμος κωδικός πρόσβασης", @@ -49,25 +47,26 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Σκεφτείτε να περιορίσετε την αναζήτησή σας, καθώς περιλαμβάνει πολλούς χρήστες, μόνο ο πρώτος από τους οποίους θα μπορεί να συνδεθεί.", "An unspecified error occurred. Please check log and settings." : "Παρουσιάστηκε ακαθόριστο λάθος. Παρακαλώ ελέγξτε το αρχείο καταγραφής και τις ρυθμίσεις.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Το φίλτρο αναζήτησης δεν είναι έγκυρο, πιθανώς λόγω συντακτικών προβλημάτων όπως μη ταίριασμα ανοίγματος και κλεισίματος αγκυλών. Παρακαλούμε διορθώστε.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Προέκυψε σφάλμα σύνδεσης στο LDAP / AD, παρακαλούμε ελέγξτε διακομιστή θύρα και διαπιστευτήρια.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Η δέσμευση \"%uid\" απουσιάζει. Θα αντικατασταθεί με το όνομα σύνδεσης κατά το ερώτημα LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Συνέβη σφάλμα σύνδεσης στο LDAP/AD. Παρακαλώ ελέγξτε τον εξυπηρετητή, την θύρα και τα διαπιστευτήρια.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Το σύμβολο υποκατάστασης \"%uid\" λείπει. Θα αντικατασταθεί με το όνομα login κατά την υποβολή ερωτήματος LDAP/AD.", "Please provide a login name to test against" : "Παρακαλούμε δώστε ένα όνομα σύνδεσης για να γίνει δοκιμή", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Το πεδίο ομάδας απενεργοποιήθηκε επειδή ο διακομιστής LDAP / AD δεν υποστηρίζει το memberOf.", - "Password change rejected. Hint: " : "Η αλλαγή του συνθηματικού απέτυχε. Υπόδειξη:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Το κουτί ομάδας απενεργοποιήθηκε, επειδή ο LDAP/APD διακομιστής δεν υποστηρίζει memberOf.", "Please login with the new password" : "Παρακαλώ κάντε είσοδο με το νέο συνθηματικό", "LDAP User backend" : "LDAP Σύστημα υποστήριξης χρήστη", "Your password will expire tomorrow." : "Το συνθηματικό σας θα λήξει αύριο.", "Your password will expire today." : "Το συνθηματικό σας λήγει σήμερα.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Το συνθηματικό σας θα λήξει σε %n ημέρα.","Το συνθηματικό σας θα λήξει σε %n ημέρες."], - "LDAP / AD integration" : "LDAP / AD ενσωμάτωση", - "_%s group found_::_%s groups found_" : ["%s ομάδα βρέθηκε","%s ομάδες βρέθηκαν"], - "_%s user found_::_%s users found_" : ["%s χρήστης βρέθηκε","%s χρήστες βρέθηκαν"], + "LDAP/AD integration" : "LDAP/AD ενσωμάτωση ", + "_%n group found_::_%n groups found_" : ["βρέθηκε %n ομάδα","βρέθηκαν %n ομάδες"], + "> 1000 groups found" : "Βρέθηκαν > 1000 ομάδες", + "> 1000 users found" : "Βρέθηκαν > 1000 χρήστες", + "_%n user found_::_%n users found_" : ["βρέθηκε %n χρήστης","βρέθηκαν %n χρήστες"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Δεν ήταν δυνατή η ανίχνευση της ιδιότητας του εμφανιζόμενου ονόματος χρήστη . Παρακαλώ προσδιορίστε στις προηγμένες ρυθμίσεις LDAP", "Could not find the desired feature" : "Αδυναμία εύρεσης επιθυμητού χαρακτηριστικού", "Invalid Host" : "Άκυρος εξυπηρετητής", "LDAP user and group backend" : "LDAP Σύστημα υποστήριξης χρήστη και ομάδος", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Η εφαρμογή επιτρέπει την σύνδεση διαχειριστών Nextcloud στον κατάλογο χρήστη LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Αυτή η εφαρμογή επιτρέπει στους διαχειριστές να συνδέουν το Nextcloud με έναν κατάλογο χρηστών που βασίζεται στο LDAP για τον έλεγχο ταυτότητας και την παροχή χαρακτηριστικών, ομάδων και χρηστών. Οι διαχειριστές μπορούν να ρυθμίσουν αυτήν την εφαρμογή ώστε να συνδέονται σε έναν ή περισσότερους καταλόγους LDAP ή Active Directories μέσω διεπαφής LDAP. Χαρακτηριστικά όπως η ποσόστωση των χρηστών, τα μηνύματα ηλεκτρονικού ταχυδρομείου, οι εικόνες των avatar, η συμμετοχή σε ομάδες και άλλα μπορούν να τραβηχτούν στο Nextcloud από έναν κατάλογο με τα κατάλληλα ερωτήματα και φίλτρα.\n\nΈνας χρήστης συνδέεται στο Nextcloud με τα διαπιστευτήριά του LDAP ή του AD και του παρέχεται πρόσβαση βάσει μιας αίτησης ελέγχου ταυτότητας που χειρίζεται ο διακομιστής LDAP ή AD. Το Nextcloud δεν αποθηκεύει κωδικούς πρόσβασης LDAP ή AD, αλλά αυτά τα διαπιστευτήρια χρησιμοποιούνται για τον έλεγχο ταυτότητας ενός χρήστη και στη συνέχεια το Nextcloud χρησιμοποιεί μια περίοδο σύνδεσης για το αναγνωριστικό χρήστη. Περισσότερες πληροφορίες είναι διαθέσιμες στην τεκμηρίωση του χρήστη LDAP και της ομάδας Backend.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Αυτή η εφαρμογή επιτρέπει στους διαχειριστές να συνδέουν το Nextcloud με έναν κατάλογο χρηστών που βασίζεται στο LDAP για τον έλεγχο ταυτότητας και την παροχή χαρακτηριστικών, ομάδων και χρηστών. Οι διαχειριστές μπορούν να ρυθμίσουν αυτήν την εφαρμογή ώστε να συνδέονται σε έναν ή περισσότερους καταλόγους LDAP ή Active Directories μέσω διεπαφής LDAP. Χαρακτηριστικά όπως η ποσόστωση των χρηστών, τα μηνύματα ηλεκτρονικού ταχυδρομείου, οι εικόνες των άβαταρ, η συμμετοχή σε ομάδες και άλλα μπορούν να τραβηχτούν στο Nextcloud από έναν κατάλογο με τα κατάλληλα ερωτήματα και φίλτρα.\n\nΈνας χρήστης συνδέεται στο Nextcloud με τα διαπιστευτήριά του LDAP ή του AD και του παρέχεται πρόσβαση βάσει μιας αίτησης ελέγχου ταυτότητας που χειρίζεται ο διακομιστής LDAP ή AD. Το Nextcloud δεν αποθηκεύει κωδικούς πρόσβασης LDAP ή AD, αλλά αυτά τα διαπιστευτήρια χρησιμοποιούνται για τον έλεγχο ταυτότητας ενός χρήστη και στη συνέχεια το Nextcloud χρησιμοποιεί μια περίοδο σύνδεσης για το αναγνωριστικό χρήστη. Περισσότερες πληροφορίες είναι διαθέσιμες στην τεκμηρίωση του χρήστη LDAP και της ομάδας Backend.", "Test Configuration" : "Δοκιμαστικές ρυθμίσεις", "Help" : "Βοήθεια", "Groups meeting these criteria are available in %s:" : "Οι ομάδες που πληρούν τα κριτήρια είναι διαθέσιμες σε %s:", @@ -81,9 +80,9 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Το φίλτρο καθορίζει ποιες ομάδες LDAP θα έχουν πρόσβαση στην εγκατάσταση %s.", "Verify settings and count the groups" : "Έλεγχος ρυθμίσεων και μέτρημα ομάδων", "When logging in, %s will find the user based on the following attributes:" : "Κατά τη σύνδεση, το %s θα βρει το χρήστη βασιζόμενος στις ακόλουθες ιδιότητες:", - "LDAP / AD Username:" : "Όνομα χρήστη LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Επιτρέπει σύνδεση με το όνομα χρήστη στο LDAP / AD, το οποίο είναι είτε \"uid\" ή \"sΑΜΑccountΝame\" και θα ανιχνευθεί.", - "LDAP / AD Email Address:" : "Διεύθυνση ηλ. ταχυδρομείου LDAP / AD:", + "LDAP/AD Username:" : "LDAP/AD όνομα χρήστη:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Επιτρέπει την σύνδεση ενάντια στο LDAP/AD όνομα χρήστη, το οποίο είναι είτε \"uid\" ή \"sAMAccountName\" και θα ανιχνευθεί.", + "LDAP/AD Email Address:" : "LDAP/AD Διεύθυνση email:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Επιτρέπει με χρήση μια ιδιότητας email. Τα \"mail\" και \"mailPrimaryAddress\" επιτρέπονται.", "Other Attributes:" : "Άλλες Ιδιότητες:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Ορίζει το φίλτρο που θα εφαρμοστεί, όταν επιχειρηθεί σύνδεση. Το \"%%uid\" αντικαθιστά το όνομα χρήστη κατά τη σύνδεση. Παράδειγμα: \"uid=%%uid\"", @@ -180,7 +179,7 @@ OC.L10N.register( "\"$home\" Placeholder Field" : "\"$home\" Πεδίο Δέσμευσης", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Το $home σε μια ρύθμιση εξωτερικού χώρου αποθήκευσης θα αντικατασταθεί με την τιμή του καθορισμένου χαρακτηριστικού", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Από προεπιλογή, το εσωτερικό όνομα χρήστη θα δημιουργηθεί από το χαρακτηριστικό UUID. Εξασφαλίζει ότι το όνομα χρήστη είναι μοναδικό και οι χαρακτήρες δεν χρειάζεται να μετατραπούν. Το εσωτερικό όνομα χρήστη έχει τον περιορισμό ότι επιτρέπονται μόνο οι χαρακτήρες: [a-zA-Z0-9 _. @ -]. Άλλοι χαρακτήρες αντικαθίστανται με την μορφή ASCII ή απλά παραλείπονται. Στις διενέξεις θα προστεθεί / αυξηθεί ένας αριθμός. Το εσωτερικό όνομα χρήστη χρησιμοποιείται για την εσωτερική αναγνώριση ενός χρήστη. Είναι επίσης το προεπιλεγμένο όνομα για τον αρχικό φάκελο του χρήστη. Είναι επίσης μέρος απομακρυσμένων διευθύνσεων URL, για παράδειγμα για όλες τις υπηρεσίες * DAV. Με αυτήν τη ρύθμιση, η προεπιλεγμένη μπορεί να αντικατασταθεί. Αφήστε το κενό για την προεπιλεγμένη ρύθμιση. Οι αλλαγές θα επηρεάσουν μόνο τους νέους χρήστες που έχουν αντιστοιχιστεί (προστεθεί) στο LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Από προεπιλογή, το εσωτερικό όνομα χρήστη θα δημιουργηθεί από το χαρακτηριστικό UUID. Αυτό διασφαλίζει ότι το όνομα χρήστη είναι μοναδικό και οι χαρακτήρες δεν χρειάζεται να μετατραπούν. Το εσωτερικό όνομα χρήστη έχει τον περιορισμό ότι επιτρέπονται μόνο αυτοί οι χαρακτήρες: [a-zA-Z0-9_.@-]. Άλλοι χαρακτήρες αντικαθίστανται με την ASCII αντιστοιχία τους ή απλώς παραλείπονται. Σε περίπτωση σύγκρουσης προστίθεται/αυξάνεται ένας αριθμός. Το εσωτερικό όνομα χρήστη χρησιμοποιείται για την εσωτερική αναγνώριση ενός χρήστη. Είναι επίσης το προεπιλεγμένο όνομα για τον αρχικό φάκελο του χρήστη. Αποτελεί επίσης μέρος των απομακρυσμένων διευθύνσεων URL, για παράδειγμα για όλες τις υπηρεσίες DAV. Με αυτή τη ρύθμιση, η προεπιλεγμένη συμπεριφορά μπορεί να παρακαμφθεί. Οι αλλαγές θα έχουν αποτέλεσμα μόνο σε πρόσφατα αντιστοιχισμένους (προστιθέμενους) χρήστες 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." : "Από προεπιλογή, το χαρακτηριστικό UUID εντοπίζεται αυτόματα. Το χαρακτηριστικό UUID χρησιμοποιείται για την αναγνώριση χωρίς αμφιβολία χρηστών και ομάδων LDAP. Επίσης, το εσωτερικό όνομα χρήστη θα δημιουργηθεί με βάση το UUID, εφόσον δεν ορίζεται διαφορετικά ανωτέρω. Μπορείτε να παρακάμψετε τη ρύθμιση και να ορίσετε ένα χαρακτηριστικό της επιλογής σας. Θα πρέπει να βεβαιωθείτε ότι το χαρακτηριστικό της επιλογής σας μπορεί να ληφθεί για τους χρήστες και τις ομάδες και ότι είναι μοναδικό. Αφήστε το κενό για την προεπιλεγμένη λειτουργία. Οι αλλαγές θα έχουν ισχύ μόνο σε πρόσφατα αντιστοιχισμένους (προστιθέμενους) χρήστες και ομάδες LDAP.", @@ -189,6 +188,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Αντιστοίχιση Χρηστών Όνομα Χρήστη-LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Τα ονόματα χρηστών χρησιμοποιούνται για την αποθήκευση και την εκχώρηση μεταδεδομένων. Προκειμένου να εντοπιστούν και να αναγνωριστούν με ακρίβεια οι χρήστες, κάθε ένας του LDAP θα έχει ένα εσωτερικό όνομα. Αυτό απαιτεί μια αντιστοίχιση από όνομα χρήστη σε χρήστη LDAP. Το τελικό όνομα χρήστη αντιστοιχίζεται στο UUID του χρήστη LDAP. Επιπλέον, αποθηκεύεται προσωρινά το DN για τη μείωση της αλληλεπίδρασης LDAP, αλλά δεν χρησιμοποιείται για αναγνώριση. Εάν αλλάξει το DN, οι αλλαγές θα βρεθούν. Το εσωτερικό όνομα χρήστη χρησιμοποιείται παντού. Η εκκαθάριση των αντιστοιχίσεων θα έχει υπολείμματα παντού. Η εκκαθάριση των αντιστοιχιών δεν είναι ευαίσθητη στη διαμόρφωση, επηρεάζει όλες τις διαμορφώσεις LDAP! Μην εκκαθαρίζετε ποτέ τις αντιστοιχίσεις σε τρέχων σύστημα, μόνο σε δοκιμαστικό ή πειραματικό στάδιο.", "Clear Username-LDAP User Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Χρήστη LDAP-Χρήστη", - "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας" + "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας", + "Invalid configuration. Please have a look at the logs for further details." : "Μη έγκυρη διαμόρφωση. Παρακαλώ ρίξτε μια ματιά στα αρχεία καταγραφής για περισσότερες λεπτομέρειες." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/el.json b/apps/user_ldap/l10n/el.json index f8bd532e593..6caed219c56 100644 --- a/apps/user_ldap/l10n/el.json +++ b/apps/user_ldap/l10n/el.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Μη έγκυρη διαμόρφωση: Δεν επιτρέπεται ανώνυμη δέσμευση.", "Valid configuration, connection established!" : "Επιτυχής ρύθμιση, συνδεθήκατε με επιτυχία", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Έγκυρη διαμόρφωση, αλλά η σύνδεση απέτυχε. Ελέγξτε τις ρυθμίσεις διακομιστή και τα διαπιστευτήρια.", - "Invalid configuration. Please have a look at the logs for further details." : "Μη έγκυρη διαμόρφωση. Παρακαλώ ρίξτε μια ματιά στα αρχεία καταγραφής για περισσότερες λεπτομέρειες.", "No action specified" : "Καμμία εντολή δεν προσδιορίστηκε", "No configuration specified" : "Καμμία διαμόρφωση δεν προσδιορίστηκε", "No data specified" : "Δεν προσδιορίστηκαν δεδομένα", - " Could not set configuration %s" : "Αδυναμία ρύθμισης %s", "Action does not exist" : "Η ενέργεια δεν υπάρχει", "Renewing …" : "Ανανέωση ...", "Very weak password" : "Πολύ αδύναμος κωδικός πρόσβασης", @@ -47,25 +45,26 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Σκεφτείτε να περιορίσετε την αναζήτησή σας, καθώς περιλαμβάνει πολλούς χρήστες, μόνο ο πρώτος από τους οποίους θα μπορεί να συνδεθεί.", "An unspecified error occurred. Please check log and settings." : "Παρουσιάστηκε ακαθόριστο λάθος. Παρακαλώ ελέγξτε το αρχείο καταγραφής και τις ρυθμίσεις.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Το φίλτρο αναζήτησης δεν είναι έγκυρο, πιθανώς λόγω συντακτικών προβλημάτων όπως μη ταίριασμα ανοίγματος και κλεισίματος αγκυλών. Παρακαλούμε διορθώστε.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Προέκυψε σφάλμα σύνδεσης στο LDAP / AD, παρακαλούμε ελέγξτε διακομιστή θύρα και διαπιστευτήρια.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Η δέσμευση \"%uid\" απουσιάζει. Θα αντικατασταθεί με το όνομα σύνδεσης κατά το ερώτημα LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Συνέβη σφάλμα σύνδεσης στο LDAP/AD. Παρακαλώ ελέγξτε τον εξυπηρετητή, την θύρα και τα διαπιστευτήρια.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Το σύμβολο υποκατάστασης \"%uid\" λείπει. Θα αντικατασταθεί με το όνομα login κατά την υποβολή ερωτήματος LDAP/AD.", "Please provide a login name to test against" : "Παρακαλούμε δώστε ένα όνομα σύνδεσης για να γίνει δοκιμή", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Το πεδίο ομάδας απενεργοποιήθηκε επειδή ο διακομιστής LDAP / AD δεν υποστηρίζει το memberOf.", - "Password change rejected. Hint: " : "Η αλλαγή του συνθηματικού απέτυχε. Υπόδειξη:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Το κουτί ομάδας απενεργοποιήθηκε, επειδή ο LDAP/APD διακομιστής δεν υποστηρίζει memberOf.", "Please login with the new password" : "Παρακαλώ κάντε είσοδο με το νέο συνθηματικό", "LDAP User backend" : "LDAP Σύστημα υποστήριξης χρήστη", "Your password will expire tomorrow." : "Το συνθηματικό σας θα λήξει αύριο.", "Your password will expire today." : "Το συνθηματικό σας λήγει σήμερα.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Το συνθηματικό σας θα λήξει σε %n ημέρα.","Το συνθηματικό σας θα λήξει σε %n ημέρες."], - "LDAP / AD integration" : "LDAP / AD ενσωμάτωση", - "_%s group found_::_%s groups found_" : ["%s ομάδα βρέθηκε","%s ομάδες βρέθηκαν"], - "_%s user found_::_%s users found_" : ["%s χρήστης βρέθηκε","%s χρήστες βρέθηκαν"], + "LDAP/AD integration" : "LDAP/AD ενσωμάτωση ", + "_%n group found_::_%n groups found_" : ["βρέθηκε %n ομάδα","βρέθηκαν %n ομάδες"], + "> 1000 groups found" : "Βρέθηκαν > 1000 ομάδες", + "> 1000 users found" : "Βρέθηκαν > 1000 χρήστες", + "_%n user found_::_%n users found_" : ["βρέθηκε %n χρήστης","βρέθηκαν %n χρήστες"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Δεν ήταν δυνατή η ανίχνευση της ιδιότητας του εμφανιζόμενου ονόματος χρήστη . Παρακαλώ προσδιορίστε στις προηγμένες ρυθμίσεις LDAP", "Could not find the desired feature" : "Αδυναμία εύρεσης επιθυμητού χαρακτηριστικού", "Invalid Host" : "Άκυρος εξυπηρετητής", "LDAP user and group backend" : "LDAP Σύστημα υποστήριξης χρήστη και ομάδος", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Η εφαρμογή επιτρέπει την σύνδεση διαχειριστών Nextcloud στον κατάλογο χρήστη LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Αυτή η εφαρμογή επιτρέπει στους διαχειριστές να συνδέουν το Nextcloud με έναν κατάλογο χρηστών που βασίζεται στο LDAP για τον έλεγχο ταυτότητας και την παροχή χαρακτηριστικών, ομάδων και χρηστών. Οι διαχειριστές μπορούν να ρυθμίσουν αυτήν την εφαρμογή ώστε να συνδέονται σε έναν ή περισσότερους καταλόγους LDAP ή Active Directories μέσω διεπαφής LDAP. Χαρακτηριστικά όπως η ποσόστωση των χρηστών, τα μηνύματα ηλεκτρονικού ταχυδρομείου, οι εικόνες των avatar, η συμμετοχή σε ομάδες και άλλα μπορούν να τραβηχτούν στο Nextcloud από έναν κατάλογο με τα κατάλληλα ερωτήματα και φίλτρα.\n\nΈνας χρήστης συνδέεται στο Nextcloud με τα διαπιστευτήριά του LDAP ή του AD και του παρέχεται πρόσβαση βάσει μιας αίτησης ελέγχου ταυτότητας που χειρίζεται ο διακομιστής LDAP ή AD. Το Nextcloud δεν αποθηκεύει κωδικούς πρόσβασης LDAP ή AD, αλλά αυτά τα διαπιστευτήρια χρησιμοποιούνται για τον έλεγχο ταυτότητας ενός χρήστη και στη συνέχεια το Nextcloud χρησιμοποιεί μια περίοδο σύνδεσης για το αναγνωριστικό χρήστη. Περισσότερες πληροφορίες είναι διαθέσιμες στην τεκμηρίωση του χρήστη LDAP και της ομάδας Backend.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Αυτή η εφαρμογή επιτρέπει στους διαχειριστές να συνδέουν το Nextcloud με έναν κατάλογο χρηστών που βασίζεται στο LDAP για τον έλεγχο ταυτότητας και την παροχή χαρακτηριστικών, ομάδων και χρηστών. Οι διαχειριστές μπορούν να ρυθμίσουν αυτήν την εφαρμογή ώστε να συνδέονται σε έναν ή περισσότερους καταλόγους LDAP ή Active Directories μέσω διεπαφής LDAP. Χαρακτηριστικά όπως η ποσόστωση των χρηστών, τα μηνύματα ηλεκτρονικού ταχυδρομείου, οι εικόνες των άβαταρ, η συμμετοχή σε ομάδες και άλλα μπορούν να τραβηχτούν στο Nextcloud από έναν κατάλογο με τα κατάλληλα ερωτήματα και φίλτρα.\n\nΈνας χρήστης συνδέεται στο Nextcloud με τα διαπιστευτήριά του LDAP ή του AD και του παρέχεται πρόσβαση βάσει μιας αίτησης ελέγχου ταυτότητας που χειρίζεται ο διακομιστής LDAP ή AD. Το Nextcloud δεν αποθηκεύει κωδικούς πρόσβασης LDAP ή AD, αλλά αυτά τα διαπιστευτήρια χρησιμοποιούνται για τον έλεγχο ταυτότητας ενός χρήστη και στη συνέχεια το Nextcloud χρησιμοποιεί μια περίοδο σύνδεσης για το αναγνωριστικό χρήστη. Περισσότερες πληροφορίες είναι διαθέσιμες στην τεκμηρίωση του χρήστη LDAP και της ομάδας Backend.", "Test Configuration" : "Δοκιμαστικές ρυθμίσεις", "Help" : "Βοήθεια", "Groups meeting these criteria are available in %s:" : "Οι ομάδες που πληρούν τα κριτήρια είναι διαθέσιμες σε %s:", @@ -79,9 +78,9 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Το φίλτρο καθορίζει ποιες ομάδες LDAP θα έχουν πρόσβαση στην εγκατάσταση %s.", "Verify settings and count the groups" : "Έλεγχος ρυθμίσεων και μέτρημα ομάδων", "When logging in, %s will find the user based on the following attributes:" : "Κατά τη σύνδεση, το %s θα βρει το χρήστη βασιζόμενος στις ακόλουθες ιδιότητες:", - "LDAP / AD Username:" : "Όνομα χρήστη LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Επιτρέπει σύνδεση με το όνομα χρήστη στο LDAP / AD, το οποίο είναι είτε \"uid\" ή \"sΑΜΑccountΝame\" και θα ανιχνευθεί.", - "LDAP / AD Email Address:" : "Διεύθυνση ηλ. ταχυδρομείου LDAP / AD:", + "LDAP/AD Username:" : "LDAP/AD όνομα χρήστη:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Επιτρέπει την σύνδεση ενάντια στο LDAP/AD όνομα χρήστη, το οποίο είναι είτε \"uid\" ή \"sAMAccountName\" και θα ανιχνευθεί.", + "LDAP/AD Email Address:" : "LDAP/AD Διεύθυνση email:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Επιτρέπει με χρήση μια ιδιότητας email. Τα \"mail\" και \"mailPrimaryAddress\" επιτρέπονται.", "Other Attributes:" : "Άλλες Ιδιότητες:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Ορίζει το φίλτρο που θα εφαρμοστεί, όταν επιχειρηθεί σύνδεση. Το \"%%uid\" αντικαθιστά το όνομα χρήστη κατά τη σύνδεση. Παράδειγμα: \"uid=%%uid\"", @@ -178,7 +177,7 @@ "\"$home\" Placeholder Field" : "\"$home\" Πεδίο Δέσμευσης", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Το $home σε μια ρύθμιση εξωτερικού χώρου αποθήκευσης θα αντικατασταθεί με την τιμή του καθορισμένου χαρακτηριστικού", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Από προεπιλογή, το εσωτερικό όνομα χρήστη θα δημιουργηθεί από το χαρακτηριστικό UUID. Εξασφαλίζει ότι το όνομα χρήστη είναι μοναδικό και οι χαρακτήρες δεν χρειάζεται να μετατραπούν. Το εσωτερικό όνομα χρήστη έχει τον περιορισμό ότι επιτρέπονται μόνο οι χαρακτήρες: [a-zA-Z0-9 _. @ -]. Άλλοι χαρακτήρες αντικαθίστανται με την μορφή ASCII ή απλά παραλείπονται. Στις διενέξεις θα προστεθεί / αυξηθεί ένας αριθμός. Το εσωτερικό όνομα χρήστη χρησιμοποιείται για την εσωτερική αναγνώριση ενός χρήστη. Είναι επίσης το προεπιλεγμένο όνομα για τον αρχικό φάκελο του χρήστη. Είναι επίσης μέρος απομακρυσμένων διευθύνσεων URL, για παράδειγμα για όλες τις υπηρεσίες * DAV. Με αυτήν τη ρύθμιση, η προεπιλεγμένη μπορεί να αντικατασταθεί. Αφήστε το κενό για την προεπιλεγμένη ρύθμιση. Οι αλλαγές θα επηρεάσουν μόνο τους νέους χρήστες που έχουν αντιστοιχιστεί (προστεθεί) στο LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Από προεπιλογή, το εσωτερικό όνομα χρήστη θα δημιουργηθεί από το χαρακτηριστικό UUID. Αυτό διασφαλίζει ότι το όνομα χρήστη είναι μοναδικό και οι χαρακτήρες δεν χρειάζεται να μετατραπούν. Το εσωτερικό όνομα χρήστη έχει τον περιορισμό ότι επιτρέπονται μόνο αυτοί οι χαρακτήρες: [a-zA-Z0-9_.@-]. Άλλοι χαρακτήρες αντικαθίστανται με την ASCII αντιστοιχία τους ή απλώς παραλείπονται. Σε περίπτωση σύγκρουσης προστίθεται/αυξάνεται ένας αριθμός. Το εσωτερικό όνομα χρήστη χρησιμοποιείται για την εσωτερική αναγνώριση ενός χρήστη. Είναι επίσης το προεπιλεγμένο όνομα για τον αρχικό φάκελο του χρήστη. Αποτελεί επίσης μέρος των απομακρυσμένων διευθύνσεων URL, για παράδειγμα για όλες τις υπηρεσίες DAV. Με αυτή τη ρύθμιση, η προεπιλεγμένη συμπεριφορά μπορεί να παρακαμφθεί. Οι αλλαγές θα έχουν αποτέλεσμα μόνο σε πρόσφατα αντιστοιχισμένους (προστιθέμενους) χρήστες 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." : "Από προεπιλογή, το χαρακτηριστικό UUID εντοπίζεται αυτόματα. Το χαρακτηριστικό UUID χρησιμοποιείται για την αναγνώριση χωρίς αμφιβολία χρηστών και ομάδων LDAP. Επίσης, το εσωτερικό όνομα χρήστη θα δημιουργηθεί με βάση το UUID, εφόσον δεν ορίζεται διαφορετικά ανωτέρω. Μπορείτε να παρακάμψετε τη ρύθμιση και να ορίσετε ένα χαρακτηριστικό της επιλογής σας. Θα πρέπει να βεβαιωθείτε ότι το χαρακτηριστικό της επιλογής σας μπορεί να ληφθεί για τους χρήστες και τις ομάδες και ότι είναι μοναδικό. Αφήστε το κενό για την προεπιλεγμένη λειτουργία. Οι αλλαγές θα έχουν ισχύ μόνο σε πρόσφατα αντιστοιχισμένους (προστιθέμενους) χρήστες και ομάδες LDAP.", @@ -187,6 +186,7 @@ "Username-LDAP User Mapping" : "Αντιστοίχιση Χρηστών Όνομα Χρήστη-LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Τα ονόματα χρηστών χρησιμοποιούνται για την αποθήκευση και την εκχώρηση μεταδεδομένων. Προκειμένου να εντοπιστούν και να αναγνωριστούν με ακρίβεια οι χρήστες, κάθε ένας του LDAP θα έχει ένα εσωτερικό όνομα. Αυτό απαιτεί μια αντιστοίχιση από όνομα χρήστη σε χρήστη LDAP. Το τελικό όνομα χρήστη αντιστοιχίζεται στο UUID του χρήστη LDAP. Επιπλέον, αποθηκεύεται προσωρινά το DN για τη μείωση της αλληλεπίδρασης LDAP, αλλά δεν χρησιμοποιείται για αναγνώριση. Εάν αλλάξει το DN, οι αλλαγές θα βρεθούν. Το εσωτερικό όνομα χρήστη χρησιμοποιείται παντού. Η εκκαθάριση των αντιστοιχίσεων θα έχει υπολείμματα παντού. Η εκκαθάριση των αντιστοιχιών δεν είναι ευαίσθητη στη διαμόρφωση, επηρεάζει όλες τις διαμορφώσεις LDAP! Μην εκκαθαρίζετε ποτέ τις αντιστοιχίσεις σε τρέχων σύστημα, μόνο σε δοκιμαστικό ή πειραματικό στάδιο.", "Clear Username-LDAP User Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Χρήστη LDAP-Χρήστη", - "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας" + "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας", + "Invalid configuration. Please have a look at the logs for further details." : "Μη έγκυρη διαμόρφωση. Παρακαλώ ρίξτε μια ματιά στα αρχεία καταγραφής για περισσότερες λεπτομέρειες." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js index 9373cb7eead..550cc262cb5 100644 --- a/apps/user_ldap/l10n/en_GB.js +++ b/apps/user_ldap/l10n/en_GB.js @@ -6,11 +6,12 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Invalid configuration: Anonymous binding is not allowed.", "Valid configuration, connection established!" : "Valid configuration, connection established!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Valid configuration, but binding failed. Please check the server settings and credentials.", - "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details.", + "Invalid configuration: %s" : "Invalid configuration: %s", "No action specified" : "No action specified", "No configuration specified" : "No configuration specified", "No data specified" : "No data specified", - " Could not set configuration %s" : " Could not set configuration %s", + "Invalid data specified" : "Invalid data specified", + "Could not set configuration %1$s to %2$s" : "Could not set configuration %1$s to %2$s", "Action does not exist" : "Action does not exist", "Renewing …" : "Renewing …", "Very weak password" : "Very weak password", @@ -49,18 +50,36 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in.", "An unspecified error occurred. Please check log and settings." : "An unspecified error occurred. Please check log and settings.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like an uneven number of opened and closed brackets. Please revise.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "A connection error to LDAP / AD occurred, please check host, port and credentials.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "A connection error to LDAP/AD occurred. Please check host, port and credentials.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.", "Please provide a login name to test against" : "Please provide a login name to test against", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "The group box was disabled, because the LDAP / AD server does not support memberOf.", - "Password change rejected. Hint: " : "Password change rejected. Hint: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "The group box was disabled, because the LDAP/AD server does not support memberOf.", + "Password change rejected. Hint: %s" : "Password change rejected. Hint: %s", + "Mandatory field \"%s\" left empty" : "Mandatory field \"%s\" left empty", + "A password is given, but not an LDAP agent" : "A password is given, but not an LDAP agent", + "No password is given for the user agent" : "No password is given for the user agent", + "No LDAP base DN was given" : "No LDAP base DN was given", + "User base DN is not a subnode of global base DN" : "User base DN is not a subnode of global base DN", + "Group base DN is not a subnode of global base DN" : "Group base DN is not a subnode of global base DN", + "Login filter does not contain %s placeholder." : "Login filter does not contain %s placeholder.", "Please login with the new password" : "Please login with the new password", + "LDAP User backend" : "LDAP User backend", "Your password will expire tomorrow." : "Your password will expire tomorrow.", "Your password will expire today." : "Your password will expire today.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Your password will expire within %n day.","Your password will expire within %n days."], - "LDAP / AD integration" : "LDAP / AD integration", - "_%s group found_::_%s groups found_" : ["%s group found","%s groups found"], - "_%s user found_::_%s users found_" : ["%s user found","%s users found"], + "LDAP/AD integration" : "LDAP/AD integration", + "LDAP Connection" : "Подключение LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Binding failed for this LDAP configuration: %s","Binding failed for %n LDAP configurations: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Searching failed for this LDAP configuration: %s","Searching failed for %n LDAP configurations: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["There is an inactive LDAP configuration: %s","There are %n inactive LDAP configurations: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Binding and searching works on the configured LDAP connection (%s)","Binding and searching works on all of the %n configured LDAP connections (%s)"], + "Invalid LDAP UUIDs" : "Invalid LDAP UUIDs", + "None found" : "None found", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them.", + "_%n group found_::_%n groups found_" : ["%n group found","%n groups found"], + "> 1000 groups found" : "> 1000 groups found", + "> 1000 users found" : "> 1000 users found", + "_%n user found_::_%n users found_" : ["%n user found","%n users found"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings.", "Could not find the desired feature" : "Could not find the desired feature", "Invalid Host" : "Invalid Host", @@ -80,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "The filter specifies which LDAP groups shall have access to the %s instance.", "Verify settings and count the groups" : "Verify settings and count the groups", "When logging in, %s will find the user based on the following attributes:" : "When logging in, %s will find the user based on the following attributes:", - "LDAP / AD Username:" : "LDAP / AD Username:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected.", - "LDAP / AD Email Address:" : "LDAP / AD Email Address:", + "LDAP/AD Username:" : "LDAP/AD Username:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected.", + "LDAP/AD Email Address:" : "LDAP/AD Email Address:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed.", "Other Attributes:" : "Other Attributes:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"", "Test Loginname" : "Test Loginname", + "Attempts to receive a DN for the given loginname and the current login filter" : "Attempts to receive a DN for the given loginname and the current login filter", "Verify settings" : "Verify settings", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Add a new configuration", @@ -150,6 +170,8 @@ OC.L10N.register( "One User Base DN per line" : "One User Base DN per line", "User Search Attributes" : "User Search Attributes", "Optional; one attribute per line" : "Optional; one attribute per line", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", "Group Display Name Field" : "Group Display Name Field", "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the group's display name.", "Base Group Tree" : "Base Group Tree", @@ -175,8 +197,34 @@ OC.L10N.register( "Email Field" : "Email Field", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Set the user's email from their LDAP attribute. Leave it empty for default behaviour.", "User Home Folder Naming Rule" : "User Home Folder Naming Rule", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.", + "\"$home\" Placeholder Field" : "\"$home\" Placeholder Field", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in an external storage configuration will be replaced with the value of the specified attribute", + "User Profile Attributes" : "User Profile Attributes", + "Phone Field" : "Phone Field", + "User profile Phone will be set from the specified attribute" : "User profile Phone will be set from the specified attribute", + "Website Field" : "Website Field", + "User profile Website will be set from the specified attribute" : "User profile Website will be set from the specified attribute", + "Address Field" : "Address Field", + "User profile Address will be set from the specified attribute" : "User profile Address will be set from the specified attribute", + "Twitter Field" : "Twitter Field", + "User profile Twitter will be set from the specified attribute" : "User profile Twitter will be set from the specified attribute", + "Fediverse Field" : "Fediverse Field", + "User profile Fediverse will be set from the specified attribute" : "User profile Fediverse will be set from the specified attribute", + "Organisation Field" : "Organisation Field", + "User profile Organisation will be set from the specified attribute" : "User profile Organisation will be set from the specified attribute", + "Role Field" : "Role Field", + "User profile Role will be set from the specified attribute" : "User profile Role will be set from the specified attribute", + "Headline Field" : "Headline Field", + "User profile Headline will be set from the specified attribute" : "User profile Headline will be set from the specified attribute", + "Biography Field" : "Biography Field", + "User profile Biography will be set from the specified attribute" : "User profile Biography will be set from the specified attribute", + "Birthdate Field" : "Birthdate Field", + "User profile Date of birth will be set from the specified attribute" : "User profile Date of birth will be set from the specified attribute", + "Pronouns Field" : "Pronouns Field", + "User profile Pronouns will be set from the specified attribute" : "User profile Pronouns will be set from the specified attribute", "Internal Username" : "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.", "Internal Username Attribute:" : "Internal Username Attribute:", "Override UUID detection" : "Override UUID detection", "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." : "By default, the UUID attribute is automatically detected. The UUID attribute is used to unambiguously 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 behaviour. Changes will have effect only on newly mapped (added) LDAP users and groups.", @@ -185,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Username-LDAP User Mapping", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Usernames are used to store and assign metadata. In order to precisely identify and recognise users, each LDAP user will have an 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.", "Clear Username-LDAP User Mapping" : "Clear Username-LDAP User Mapping", - "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping" + "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping", + "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json index 9f15e2bce7f..d516661ef41 100644 --- a/apps/user_ldap/l10n/en_GB.json +++ b/apps/user_ldap/l10n/en_GB.json @@ -4,11 +4,12 @@ "Invalid configuration: Anonymous binding is not allowed." : "Invalid configuration: Anonymous binding is not allowed.", "Valid configuration, connection established!" : "Valid configuration, connection established!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Valid configuration, but binding failed. Please check the server settings and credentials.", - "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details.", + "Invalid configuration: %s" : "Invalid configuration: %s", "No action specified" : "No action specified", "No configuration specified" : "No configuration specified", "No data specified" : "No data specified", - " Could not set configuration %s" : " Could not set configuration %s", + "Invalid data specified" : "Invalid data specified", + "Could not set configuration %1$s to %2$s" : "Could not set configuration %1$s to %2$s", "Action does not exist" : "Action does not exist", "Renewing …" : "Renewing …", "Very weak password" : "Very weak password", @@ -47,18 +48,36 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in.", "An unspecified error occurred. Please check log and settings." : "An unspecified error occurred. Please check log and settings.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like an uneven number of opened and closed brackets. Please revise.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "A connection error to LDAP / AD occurred, please check host, port and credentials.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "A connection error to LDAP/AD occurred. Please check host, port and credentials.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.", "Please provide a login name to test against" : "Please provide a login name to test against", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "The group box was disabled, because the LDAP / AD server does not support memberOf.", - "Password change rejected. Hint: " : "Password change rejected. Hint: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "The group box was disabled, because the LDAP/AD server does not support memberOf.", + "Password change rejected. Hint: %s" : "Password change rejected. Hint: %s", + "Mandatory field \"%s\" left empty" : "Mandatory field \"%s\" left empty", + "A password is given, but not an LDAP agent" : "A password is given, but not an LDAP agent", + "No password is given for the user agent" : "No password is given for the user agent", + "No LDAP base DN was given" : "No LDAP base DN was given", + "User base DN is not a subnode of global base DN" : "User base DN is not a subnode of global base DN", + "Group base DN is not a subnode of global base DN" : "Group base DN is not a subnode of global base DN", + "Login filter does not contain %s placeholder." : "Login filter does not contain %s placeholder.", "Please login with the new password" : "Please login with the new password", + "LDAP User backend" : "LDAP User backend", "Your password will expire tomorrow." : "Your password will expire tomorrow.", "Your password will expire today." : "Your password will expire today.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Your password will expire within %n day.","Your password will expire within %n days."], - "LDAP / AD integration" : "LDAP / AD integration", - "_%s group found_::_%s groups found_" : ["%s group found","%s groups found"], - "_%s user found_::_%s users found_" : ["%s user found","%s users found"], + "LDAP/AD integration" : "LDAP/AD integration", + "LDAP Connection" : "Подключение LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Binding failed for this LDAP configuration: %s","Binding failed for %n LDAP configurations: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Searching failed for this LDAP configuration: %s","Searching failed for %n LDAP configurations: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["There is an inactive LDAP configuration: %s","There are %n inactive LDAP configurations: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Binding and searching works on the configured LDAP connection (%s)","Binding and searching works on all of the %n configured LDAP connections (%s)"], + "Invalid LDAP UUIDs" : "Invalid LDAP UUIDs", + "None found" : "None found", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them.", + "_%n group found_::_%n groups found_" : ["%n group found","%n groups found"], + "> 1000 groups found" : "> 1000 groups found", + "> 1000 users found" : "> 1000 users found", + "_%n user found_::_%n users found_" : ["%n user found","%n users found"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings.", "Could not find the desired feature" : "Could not find the desired feature", "Invalid Host" : "Invalid Host", @@ -78,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "The filter specifies which LDAP groups shall have access to the %s instance.", "Verify settings and count the groups" : "Verify settings and count the groups", "When logging in, %s will find the user based on the following attributes:" : "When logging in, %s will find the user based on the following attributes:", - "LDAP / AD Username:" : "LDAP / AD Username:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected.", - "LDAP / AD Email Address:" : "LDAP / AD Email Address:", + "LDAP/AD Username:" : "LDAP/AD Username:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected.", + "LDAP/AD Email Address:" : "LDAP/AD Email Address:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed.", "Other Attributes:" : "Other Attributes:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"", "Test Loginname" : "Test Loginname", + "Attempts to receive a DN for the given loginname and the current login filter" : "Attempts to receive a DN for the given loginname and the current login filter", "Verify settings" : "Verify settings", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Add a new configuration", @@ -148,6 +168,8 @@ "One User Base DN per line" : "One User Base DN per line", "User Search Attributes" : "User Search Attributes", "Optional; one attribute per line" : "Optional; one attribute per line", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", "Group Display Name Field" : "Group Display Name Field", "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the group's display name.", "Base Group Tree" : "Base Group Tree", @@ -173,8 +195,34 @@ "Email Field" : "Email Field", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Set the user's email from their LDAP attribute. Leave it empty for default behaviour.", "User Home Folder Naming Rule" : "User Home Folder Naming Rule", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.", + "\"$home\" Placeholder Field" : "\"$home\" Placeholder Field", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in an external storage configuration will be replaced with the value of the specified attribute", + "User Profile Attributes" : "User Profile Attributes", + "Phone Field" : "Phone Field", + "User profile Phone will be set from the specified attribute" : "User profile Phone will be set from the specified attribute", + "Website Field" : "Website Field", + "User profile Website will be set from the specified attribute" : "User profile Website will be set from the specified attribute", + "Address Field" : "Address Field", + "User profile Address will be set from the specified attribute" : "User profile Address will be set from the specified attribute", + "Twitter Field" : "Twitter Field", + "User profile Twitter will be set from the specified attribute" : "User profile Twitter will be set from the specified attribute", + "Fediverse Field" : "Fediverse Field", + "User profile Fediverse will be set from the specified attribute" : "User profile Fediverse will be set from the specified attribute", + "Organisation Field" : "Organisation Field", + "User profile Organisation will be set from the specified attribute" : "User profile Organisation will be set from the specified attribute", + "Role Field" : "Role Field", + "User profile Role will be set from the specified attribute" : "User profile Role will be set from the specified attribute", + "Headline Field" : "Headline Field", + "User profile Headline will be set from the specified attribute" : "User profile Headline will be set from the specified attribute", + "Biography Field" : "Biography Field", + "User profile Biography will be set from the specified attribute" : "User profile Biography will be set from the specified attribute", + "Birthdate Field" : "Birthdate Field", + "User profile Date of birth will be set from the specified attribute" : "User profile Date of birth will be set from the specified attribute", + "Pronouns Field" : "Pronouns Field", + "User profile Pronouns will be set from the specified attribute" : "User profile Pronouns will be set from the specified attribute", "Internal Username" : "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.", "Internal Username Attribute:" : "Internal Username Attribute:", "Override UUID detection" : "Override UUID detection", "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." : "By default, the UUID attribute is automatically detected. The UUID attribute is used to unambiguously 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 behaviour. Changes will have effect only on newly mapped (added) LDAP users and groups.", @@ -183,6 +231,7 @@ "Username-LDAP User Mapping" : "Username-LDAP User Mapping", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Usernames are used to store and assign metadata. In order to precisely identify and recognise users, each LDAP user will have an 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.", "Clear Username-LDAP User Mapping" : "Clear Username-LDAP User Mapping", - "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping" + "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping", + "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/eo.js b/apps/user_ldap/l10n/eo.js deleted file mode 100644 index 25c880dbdc5..00000000000 --- a/apps/user_ldap/l10n/eo.js +++ /dev/null @@ -1,63 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to delete the server configuration" : "Malsukcesis forigo de la agordo de servilo", - "Action does not exist" : "Ago ne ekzistas", - "Configuration incorrect" : "La agordaro malĝustas", - "Configuration incomplete" : "La agordaro neplenas", - "Configuration OK" : "La agordaro ĝustas", - "Select groups" : "Elekti grupojn", - "Select object classes" : "Elekti objektoklasojn", - "{nthServer}. Server" : "{nthServer}. Servilo", - "Confirm Deletion" : "Konfirmi forigon", - "Select attributes" : "Elekti atribuojn", - "_%s group found_::_%s groups found_" : ["%s grupo troviĝis","%s grupoj troviĝis"], - "_%s user found_::_%s users found_" : ["%s uzanto troviĝis","%s uzanto troviĝis"], - "Invalid Host" : "Nevalida gastigo", - "Server" : "Servilo", - "Users" : "Uzantoj", - "Groups" : "Grupoj", - "Test Configuration" : "Provi agordon", - "Help" : "Helpo", - "Other Attributes:" : "Aliaj atribuoj:", - "1. Server" : "1. Servilo", - "%s. Server:" : "%s. Servilo:", - "Host" : "Gastigo", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Vi povas neglekti la protokolon, escepte se vi bezonas SSL-on. Tiuokaze, komencu per ldaps://", - "Port" : "Pordo", - "User DN" : "Uzanto-DN", - "Password" : "Pasvorto", - "For anonymous access, leave DN and Password empty." : "Por sennoman aliron, lasu DN-on kaj Pasvorton malplenaj.", - "Saving" : "Konservante", - "Back" : "Antaŭen", - "Continue" : "Daŭri", - "LDAP" : "LDAP", - "Expert" : "Sperta", - "Advanced" : "Progresinta", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Averto</b>: la PHP-modulo LDAP ne instalatas; la motoro ne funkcios. Bonvolu peti vian sistemadministranton instali ĝin.", - "Connection Settings" : "Agordo de konekto", - "Disable Main Server" : "Malkapabligi la ĉefan servilon", - "Turn off SSL certificate validation." : "Malkapabligi validkontrolon de SSL-atestiloj.", - "Cache Time-To-Live" : "Vivotempo de la kaŝmemoro", - "in seconds. A change empties the cache." : "sekunde. Ajna ŝanĝo malplenigas la kaŝmemoron.", - "Directory Settings" : "Agordo de dosierujo", - "User Display Name Field" : "Kampo de vidignomo de uzanto", - "Base User Tree" : "Baza uzantarbo", - "User Search Attributes" : "Atributoj de serĉo de uzanto", - "Optional; one attribute per line" : "Malnepra; po unu atribuo por linio", - "Group Display Name Field" : "Kampo de vidignomo de grupo", - "Base Group Tree" : "Baza gruparbo", - "Group Search Attributes" : "Atribuoj de gruposerĉo", - "Group-Member association" : "Asocio de grupo kaj membro", - "Nested Groups" : "Ingitaj grupoj", - "Special Attributes" : "Specialaj atribuoj", - "Quota Field" : "Kampo de kvoto", - "in bytes" : "duumoke", - "Email Field" : "Kampo de retpoŝto", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Lasu malplena por uzantonomo (defaŭlto). Alie, specifu LDAP/AD-atributon.", - "Internal Username" : "Ena uzantonomo", - "Internal Username Attribute:" : "Atribuo de ena uzantonomo:", - "UUID Attribute for Users:" : "UUID-atribuo por uzantoj:", - "UUID Attribute for Groups:" : "UUID-atribuo por grupoj:" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/eo.json b/apps/user_ldap/l10n/eo.json deleted file mode 100644 index 37cdc4e2519..00000000000 --- a/apps/user_ldap/l10n/eo.json +++ /dev/null @@ -1,61 +0,0 @@ -{ "translations": { - "Failed to delete the server configuration" : "Malsukcesis forigo de la agordo de servilo", - "Action does not exist" : "Ago ne ekzistas", - "Configuration incorrect" : "La agordaro malĝustas", - "Configuration incomplete" : "La agordaro neplenas", - "Configuration OK" : "La agordaro ĝustas", - "Select groups" : "Elekti grupojn", - "Select object classes" : "Elekti objektoklasojn", - "{nthServer}. Server" : "{nthServer}. Servilo", - "Confirm Deletion" : "Konfirmi forigon", - "Select attributes" : "Elekti atribuojn", - "_%s group found_::_%s groups found_" : ["%s grupo troviĝis","%s grupoj troviĝis"], - "_%s user found_::_%s users found_" : ["%s uzanto troviĝis","%s uzanto troviĝis"], - "Invalid Host" : "Nevalida gastigo", - "Server" : "Servilo", - "Users" : "Uzantoj", - "Groups" : "Grupoj", - "Test Configuration" : "Provi agordon", - "Help" : "Helpo", - "Other Attributes:" : "Aliaj atribuoj:", - "1. Server" : "1. Servilo", - "%s. Server:" : "%s. Servilo:", - "Host" : "Gastigo", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Vi povas neglekti la protokolon, escepte se vi bezonas SSL-on. Tiuokaze, komencu per ldaps://", - "Port" : "Pordo", - "User DN" : "Uzanto-DN", - "Password" : "Pasvorto", - "For anonymous access, leave DN and Password empty." : "Por sennoman aliron, lasu DN-on kaj Pasvorton malplenaj.", - "Saving" : "Konservante", - "Back" : "Antaŭen", - "Continue" : "Daŭri", - "LDAP" : "LDAP", - "Expert" : "Sperta", - "Advanced" : "Progresinta", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Averto</b>: la PHP-modulo LDAP ne instalatas; la motoro ne funkcios. Bonvolu peti vian sistemadministranton instali ĝin.", - "Connection Settings" : "Agordo de konekto", - "Disable Main Server" : "Malkapabligi la ĉefan servilon", - "Turn off SSL certificate validation." : "Malkapabligi validkontrolon de SSL-atestiloj.", - "Cache Time-To-Live" : "Vivotempo de la kaŝmemoro", - "in seconds. A change empties the cache." : "sekunde. Ajna ŝanĝo malplenigas la kaŝmemoron.", - "Directory Settings" : "Agordo de dosierujo", - "User Display Name Field" : "Kampo de vidignomo de uzanto", - "Base User Tree" : "Baza uzantarbo", - "User Search Attributes" : "Atributoj de serĉo de uzanto", - "Optional; one attribute per line" : "Malnepra; po unu atribuo por linio", - "Group Display Name Field" : "Kampo de vidignomo de grupo", - "Base Group Tree" : "Baza gruparbo", - "Group Search Attributes" : "Atribuoj de gruposerĉo", - "Group-Member association" : "Asocio de grupo kaj membro", - "Nested Groups" : "Ingitaj grupoj", - "Special Attributes" : "Specialaj atribuoj", - "Quota Field" : "Kampo de kvoto", - "in bytes" : "duumoke", - "Email Field" : "Kampo de retpoŝto", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Lasu malplena por uzantonomo (defaŭlto). Alie, specifu LDAP/AD-atributon.", - "Internal Username" : "Ena uzantonomo", - "Internal Username Attribute:" : "Atribuo de ena uzantonomo:", - "UUID Attribute for Users:" : "UUID-atribuo por uzantoj:", - "UUID Attribute for Groups:" : "UUID-atribuo por grupoj:" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js index 3b277c89320..280e68568c4 100644 --- a/apps/user_ldap/l10n/es.js +++ b/apps/user_ldap/l10n/es.js @@ -6,13 +6,14 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración no válida: No se permite enlazado anónimo.", "Valid configuration, connection established!" : "Configuración válida. ¡Conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero falló el enlazado. Por favor compruebe los ajustes del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor, echa un vistazo al registro para más detalles.", + "Invalid configuration: %s" : "Configuración inválida: %s", "No action specified" : "No se ha especificado la acción", "No configuration specified" : "No se ha especificado la configuración", "No data specified" : "No se han especificado los datos", - " Could not set configuration %s" : "No se pudo establecer la configuración %s", + "Invalid data specified" : "Se especificaron datos inválidos", + "Could not set configuration %1$s to %2$s" : "No se pudo establecer la configuración %1$s a %2$s", "Action does not exist" : "La acción no existe", - "Renewing …" : "Renovando...", + "Renewing …" : "Renovando …", "Very weak password" : "Contraseña muy débil", "Weak password" : "Contraseña débil", "So-so password" : "Contraseña pasable", @@ -30,9 +31,9 @@ OC.L10N.register( "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN no puede ser detectada automáticamente, por favor revise credenciales, host y puerto.", "Could not detect Base DN, please enter it manually." : "No se ha podido detectar Base DN, por favor introdúzcala manualmente.", "{nthServer}. Server" : "{nthServer}. servidor", - "No object found in the given Base DN. Please revise." : "No se encuentra ningún objeto en la Base DN dada. Por favor revisar.", + "No object found in the given Base DN. Please revise." : "No se encuentra ningún objeto en el Base DN proporcionado. Por favor revisar.", "More than 1,000 directory entries available." : "Más de 1.000 entradas de directorios disponibles.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrada disponible en la base DN proporcionada","{objectsFound} entradas disponibles en la base DN proporcionada"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrada disponible en la base DN proporcionada","{objectsFound} entradas disponibles en la base DN proporcionada","{objectsFound} entradas disponibles en la base DN proporcionada"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Un error ocurrió. Por favor revise la Base DN, también como la configuración de la conexión y credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente quieres eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar eliminación", @@ -46,22 +47,39 @@ OC.L10N.register( "Select attributes" : "Seleccionar atributos", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuario no encontrado. Por favor, comprueba tus atributos de registro y el nombre de usuario. Filtro efectivo (para copiar y pegar para validación en línea de comandos): <br/>", "User found and settings verified." : "Usuario encontrado y configuración verificada.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera ajustar tu búsqueda, pues abarca varios usuarios, solo el primero de los cuales podrá entrar.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera ajustar tu búsqueda, pues abarca muchos usuarios, solo el primero de ellos podrá iniciar sesión.", "An unspecified error occurred. Please check log and settings." : "Ha ocurrido un error no especificado. Por favor, comprueba el registro y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de búsqueda es inválido, probablemente debido a problemas de sintáxis tales como números impares de paréntesis abiertos y cerrados. Por favor revíselos.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Un error de conexión a LDAP / AD ocurrió, por favor verifique host, puerto y credenciales.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el marcador de posición \"%uid\". Será reemplazado por el nombre de registro al consultar LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Ocurrió un error de conexión a LDAP/AD. Por favor verifique host, puerto y credenciales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posición \"%uid\". Será reemplazado por el nombre de registro al consultar LDAP/AD.", "Please provide a login name to test against" : "Por favor suministre un nombre de inicio de sesión para probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo fue deshabilitado, porque el servidor LDAP / AD no admite memberOf.", - "Password change rejected. Hint: " : "Contraseña rechazada. Pista:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El cuadro de grupo fue deshabilitado, porque el servidor LDAP/AD no admite memberOf.", + "Password change rejected. Hint: %s" : "Se rechazó el cambio de contraseña. Pista: %s", + "Mandatory field \"%s\" left empty" : "El campo obligatorio \"%s\" se dejó en blanco", + "A password is given, but not an LDAP agent" : "Se proporcionó una contraseña, pero no un agente LDAP", + "No password is given for the user agent" : "No se proporcionó una contraseña para el agente de usuario", + "No LDAP base DN was given" : "No se proporcionó un DN base LDAP", + "User base DN is not a subnode of global base DN" : "El DN base de usuario no es un subnodo del DN base global", + "Group base DN is not a subnode of global base DN" : "El DN base de grupo no es un subnodo del DN base global", + "Login filter does not contain %s placeholder." : "El filtro de inicio de sesión no contiene el marcador de posición %s.", "Please login with the new password" : "Por favor, entra con la nueva contraseña", "LDAP User backend" : "Motor de usuarios LDAP", "Your password will expire tomorrow." : "Tu contraseña caducará mañana.", "Your password will expire today." : "Tu contraseña caducará hoy.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Tu contraseña caducará dentro de %n día.","Tu contraseña caducará dentro de %n días."], - "LDAP / AD integration" : "Integración LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s grupo encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Tu contraseña caducará dentro de %n día.","Tu contraseña caducará dentro de %n días.","Tu contraseña caducará dentro de %n días."], + "LDAP/AD integration" : "Integración LDAP/AD", + "LDAP Connection" : "Conexión LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["El inicio de sesión falló para esta configuración de LDAP: %s","El inicio de sesión falló para %n configuraciones de LDAP: %s","El inicio de sesión falló para %n configuraciones de LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Falló la búsqueda para esta configuración LDAP: %s","Falló la búsqueda para %n configuraciones LDAP: %s","Falló la búsqueda para %n configuraciones LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Existe una configuración LDAP inactiva: %s","Existen %n configuraciones LDAP inactivas: %s","Existen %n configuraciones LDAP inactivas: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["El inicio de sesión y la búsqueda funcionan para la conexión LDAP configurada (%s)","El inicio de sesión y la búsqueda funcionan para todas las %n conexiones de LDAP configuradas (%s)","El inicio de sesión y la búsqueda funcionan para todas las %n conexiones de LDAP configuradas (%s)"], + "Invalid LDAP UUIDs" : "UUIDs LDAP inválidas", + "None found" : "Ninguno encontrado", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Se han encontrado UUIDs no válidos de cuentas o grupos LDAP. Por favor, compruebe la configuración de \"Anular detección de UUID\" en la sección de Experto de la configuración LDAP y use \"occ ldap:update-uuid\" para actualizarlos.", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrados","%n grupos encontrados"], + "> 1000 groups found" : "Se encontraron más de 1000 grupos", + "> 1000 users found" : "Se encontraron más de 1000 usuarios", + "_%n user found_::_%n users found_" : ["%n usuario encontrado ","%n usuarios encontrados","%n usuarios encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No se ha podido detectar el atributo del nombre ", "Could not find the desired feature" : "No se puede encontrar la función deseada.", "Invalid Host" : "Host no válido", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica que grupos LDAP tendrán acceso a %s.", "Verify settings and count the groups" : "Verifique los ajustes y cuente los grupos", "When logging in, %s will find the user based on the following attributes:" : "Cuando se inicia sesión, %s encontrará al usuario basado en los siguientes atributos:", - "LDAP / AD Username:" : "Nombre de usuario LDAP /AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite registrarse contra el usuario LDAP / AD, que es o \"uid\" o \"sAMNombreDeCuenta\" y será detectado.", - "LDAP / AD Email Address:" : "LDAP / AD dirección de correo electrónico:", + "LDAP/AD Username:" : "Nombre de usuario LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite registrarse contra el usuario LDAP/AD, que es o \"uid\" o \"sAMAccountName\" y será detectado.", + "LDAP/AD Email Address:" : "Dirección email LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite registrarse contra un atributo de correo electrónico. Se permiten \"mail\" y \"mailPrimaryAddress\".", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro que aplicar cuando se intenta el registro. \"%%uid\" reemplaza al nombre de usuario en la acción de registro. Ejemplo: \"uid=%%uid\"", "Test Loginname" : "Probar nombre de sesión", + "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta recibir un DN para el loginname dado y el filtro de ingreso actual", "Verify settings" : "Verificar configuración", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Agregar una nueva configuración", @@ -108,7 +127,7 @@ OC.L10N.register( "Test Base DN" : "Probar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automáticas al LDAP. Mejor para grandes configuraciones, pero requiere cierto conocimiento de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introduzca manualmente los filtros LDAP (recomendado para directorios grandes)", - "Listing and searching for users is constrained by these criteria:" : "El listado y la búsqueda de usuarios es restringido por estos criterios:", + "Listing and searching for users is constrained by these criteria:" : "El listado y la búsqueda de usuarios está restringido a estos criterios:", "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." : "Los objetos de clases más comunes para los usuarios son organizationalPerson, persona, usuario y inetOrgPerson. Si no está seguro de qué objeto de clase seleccionar, por favor, consulte con su administrador de directorio. ", "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica que usuarios LDAP pueden tener acceso a %s.", "Verify settings and count users" : "Verificar configuración y contar usuarios", @@ -121,7 +140,7 @@ OC.L10N.register( "Current password" : "Contraseña actual", "New password" : "Nueva contraseña", "Renew password" : "Renovar contraseña", - "Wrong password." : "Contraseña errónea.", + "Wrong password." : "Contraseña incorrecta.", "Cancel" : "Cancelar", "Server" : "Servidor", "Users" : "Usuarios", @@ -151,6 +170,8 @@ OC.L10N.register( "One User Base DN per line" : "Un DN Base de Usuario por línea", "User Search Attributes" : "Atributos de la busqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por linea", + "Disable users missing from LDAP" : "Desactivar los usuarios ausentes en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Si se activa, los usuarios importados de LDAP no encontrados se desactivarán.", "Group Display Name Field" : "Campo de nombre de grupo a mostrar", "The LDAP attribute to use to generate the groups's display name." : "El campo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", @@ -164,31 +185,55 @@ OC.L10N.register( "Paging chunksize" : "Tamaño de los fragmentos de paginación", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamaño de los fragmentos usado para búsquedas LDAP paginadas que pueden devolver resultados voluminosos, como enumeración de usuarios o de grupos. (Si se establece en 0, se deshabilitan las búsquedas LDAP paginadas en esas situaciones.)", "Enable LDAP password changes per user" : "Permitir cambios de contraseñas LDAP por usuario", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permite a usuarios LDAP cambiar su contraseña y permite administradores y administradores de grupos, cambiar la contraseña de sus usuarios LDAP. SOlo funciona cuando las políticas de control de acceso están configuradas de acuerdo a las del servidor LDAP. Como las contraseñas se mandan en texto plano al servidor, LDAP, encripción del transporte debe ser usado y cifrado de las contraseñas debe ser configurado en el servidor LDAP.", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permite a usuarios LDAP cambiar su contraseña y permite administradores y administradores de grupos, cambiar la contraseña de sus usuarios LDAP. Solo funciona cuando las políticas de control de acceso están configuradas de acuerdo a las del servidor LDAP. Como las contraseñas se mandan en texto plano al servidor, LDAP, encripción del transporte debe ser usado y cifrado de las contraseñas debe ser configurado en el servidor LDAP.", "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)", "Default password policy DN" : "Política de contraseñas por defecto DN", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de una política de contraseñas por defecto que será usado para el manejo de la expiración de contraseñas. Solo funciona cuando los cambios por usuario de la contraseña LDAP están habilitados y solo está aceptada por OpenLDAP. Déjala vacía para deshabilitar el manejo de expiración de contraseñas.", "Special Attributes" : "Atributos especiales", "Quota Field" : "Cuota", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deje vacío para la couta predeterminada del usuario. De otra manera, específique un atributo LDAP/AD.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Déjelo vacío para la cuota predeterminada del usuario. De lo contrario, especifique un atributo LDAP/AD.", "Quota Default" : "Cuota por defecto", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobre escribir la cuota predeterminada para usuarios LDAP que no tienen una cuota configurada en el campo Cuota.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobrescribir la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota.", "Email Field" : "E-mail", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Configurar el correo electrónico del usuario desde atributo LDAP. Déjelo vacío para comportamiento predeterminado.", "User Home Folder Naming Rule" : "Regla para la carpeta Home de usuario", - "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deje vacío el nombre de usuario (por omisión). En otro caso, especifique un atributo LDAP/AD.", - "\"$home\" Placeholder Field" : "\"$home\" campo de parámetro de sustitución", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Déjelo vacío para utilizar el nombre de usuario (predeterminado). De lo contrario, especifique un atributo LDAP/AD.", + "\"$home\" Placeholder Field" : "Marcador de posición del Campo \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home en una configuración de almacenamiento externo será reemplazado con el valor del atributo especificado", + "User Profile Attributes" : "Atributos del perfil de usuario", + "Phone Field" : "Campo Teléfono", + "User profile Phone will be set from the specified attribute" : "El teléfono en el perfil del usuario será definido desde el atributo especificado", + "Website Field" : "Campo sitio Web", + "User profile Website will be set from the specified attribute" : "El sitio Web en el perfil del usuario será definido desde el atributo especificado", + "Address Field" : "Campo Dirección", + "User profile Address will be set from the specified attribute" : "La Dirección en el perfil del usuario será definida desde el atributo especificado", + "Twitter Field" : "Campo Twitter", + "User profile Twitter will be set from the specified attribute" : "El alias de Twitter en el perfil del usuario será definido desde el atributo especificado", + "Fediverse Field" : "Campo Fediverso", + "User profile Fediverse will be set from the specified attribute" : "La identidad en el Fediverso en el perfil del usuario será definida desde el atributo especificado", + "Organisation Field" : "Campo Organización", + "User profile Organisation will be set from the specified attribute" : "La Organización en el perfil del usuario será definida desde el atributo especificado", + "Role Field" : "Campo Rol", + "User profile Role will be set from the specified attribute" : "El Rol en el perfil del usuario será definido desde el atributo especificado", + "Headline Field" : "Campo Título", + "User profile Headline will be set from the specified attribute" : "El Título en el perfil del usuario será definido desde el atributo especificado", + "Biography Field" : "Campo Biografía", + "User profile Biography will be set from the specified attribute" : "La Biografía en el perfil del usuario será definida desde el atributo especificado", + "Birthdate Field" : "Campo de Fecha de nacimiento", + "User profile Date of birth will be set from the specified attribute" : "La fecha de nacimiento en el perfil de usuario será asignada en base al atributo especificado", + "Pronouns Field" : "Campo Pronombres", + "User profile Pronouns will be set from the specified attribute" : "Los pronombres en el perfil de usuario se asignarán en base al atributo especificado", "Internal Username" : "Nombre de usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el nombre de usuario interno será creado a partir del atributo UUID. Esto asegura que el nombre de usuario es único y no se necesita convertir los caracteres. El nombre de usuario interno tiene la restricción de que solo se admiten estos caracteres: [ a-zA-Z0-9_.@- ]. Otros caracteres son reemplazados por su correspondencia ASCII o simplemente omitidos. En caso de colisiones se añadirá/incrementará un número. El nombre de usuario interno se usa para identificar internamente a un usuario. Es también el nombre por defecto de la carpeta de inicio del usuario. También es parte de las URL remotas, por ejemplo para todos los servicios *DAV. Con esta configuración, se puede anular el comportamiento por defecto. Déjelo vacío para usar el comportamiento por defecto. Los cambios tendrán efecto solo en usuarios LDAP mapeados (añadidos) después del cambio.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por defecto, el nombre de usuario interno será creado a partir del atributo UUID. Esto asegura que el nombre de usuario es único y no se necesitará convertir los caracteres. El nombre de usuario interno tiene la restricción de que solo se admiten estos caracteres: [ a-zA-Z0-9_.@- ]. Otros caracteres son reemplazados por su correspondencia ASCII o simplemente omitidos. En caso de colisiones se añadirá/incrementará un número. El nombre de usuario interno se usa para identificar internamente a un usuario. Es también el nombre por defecto de la carpeta de inicio del usuario. También es parte de las URL remotas, por ejemplo para todos los servicios DAV. Con esta configuración, se puede anular el comportamiento por defecto. Los cambios tendrán efecto solo en usuarios LDAP mapeados (añadidos) después del cambio. Déjelo vacío para usar el comportamiento por defecto.", "Internal Username Attribute:" : "Atributo de nombre de usuario interno:", - "Override UUID detection" : "Sobrescribir la detección 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." : "Por defecto, el atributo UUID es autodetectado. Este atributo es usado para identificar sin dudas a usuarios y grupos LDAP. Además, el nombre de usuario interno será creado en base al UUID, si no ha sido especificado otro comportamiento arriba. Puedes sobrescribir la configuración y pasar un atributo de tu elección. Debes asegurarte de que el atributo de tu elección sea accesible por los usuarios y grupos y ser único. Déjalo en blanco para usar el comportamiento por defecto. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.", + "Override UUID detection" : "Anular la detección 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." : "De manera predeterminada, el atributo UUID se detecta automáticamente. El atributo UUID se utiliza para identificar inequívocamente a usuarios y grupos LDAP. Además, el nombre de usuario interno será creado basado en el UUID, si no ha sido especificado un comportamiento diferente más arriba. Puede sobrescribir la configuración y pasar un atributo de su elección. Debe asegurarse de que el atributo de su elección sea accesible tanto por usuarios como grupos y ser único. Déjelo en blanco para usar el comportamiento predeterminado. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.", "UUID Attribute for Users:" : "Atributo UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuario se usan para almacenar y asignar metadatos. Para identificar y reconocer con precisión a los usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere una asignación de nombre de usuario a usuario de LDAP. El nombre de usuario creado se asigna al UUID del usuario de LDAP. Además, el DN también se almacena en caché para reducir la interacción de LDAP, pero no se utiliza para la identificación. Si el DN cambia, se encontrarán los cambios. El nombre de usuario interno se usa en todas partes. Limpiar las asignaciones tendrá sobras en todas partes. ¡Borrar las asignaciones no es sensible a la configuración, afecta todas las configuraciones de LDAP! Nunca borre las asignaciones en un entorno de producción, solo en una etapa de prueba o experimental.", "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración no válida. Por favor, echa un vistazo al registro para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json index 7d4ca925938..668dd84b489 100644 --- a/apps/user_ldap/l10n/es.json +++ b/apps/user_ldap/l10n/es.json @@ -4,13 +4,14 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración no válida: No se permite enlazado anónimo.", "Valid configuration, connection established!" : "Configuración válida. ¡Conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero falló el enlazado. Por favor compruebe los ajustes del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor, echa un vistazo al registro para más detalles.", + "Invalid configuration: %s" : "Configuración inválida: %s", "No action specified" : "No se ha especificado la acción", "No configuration specified" : "No se ha especificado la configuración", "No data specified" : "No se han especificado los datos", - " Could not set configuration %s" : "No se pudo establecer la configuración %s", + "Invalid data specified" : "Se especificaron datos inválidos", + "Could not set configuration %1$s to %2$s" : "No se pudo establecer la configuración %1$s a %2$s", "Action does not exist" : "La acción no existe", - "Renewing …" : "Renovando...", + "Renewing …" : "Renovando …", "Very weak password" : "Contraseña muy débil", "Weak password" : "Contraseña débil", "So-so password" : "Contraseña pasable", @@ -28,9 +29,9 @@ "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN no puede ser detectada automáticamente, por favor revise credenciales, host y puerto.", "Could not detect Base DN, please enter it manually." : "No se ha podido detectar Base DN, por favor introdúzcala manualmente.", "{nthServer}. Server" : "{nthServer}. servidor", - "No object found in the given Base DN. Please revise." : "No se encuentra ningún objeto en la Base DN dada. Por favor revisar.", + "No object found in the given Base DN. Please revise." : "No se encuentra ningún objeto en el Base DN proporcionado. Por favor revisar.", "More than 1,000 directory entries available." : "Más de 1.000 entradas de directorios disponibles.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrada disponible en la base DN proporcionada","{objectsFound} entradas disponibles en la base DN proporcionada"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrada disponible en la base DN proporcionada","{objectsFound} entradas disponibles en la base DN proporcionada","{objectsFound} entradas disponibles en la base DN proporcionada"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Un error ocurrió. Por favor revise la Base DN, también como la configuración de la conexión y credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente quieres eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar eliminación", @@ -44,22 +45,39 @@ "Select attributes" : "Seleccionar atributos", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuario no encontrado. Por favor, comprueba tus atributos de registro y el nombre de usuario. Filtro efectivo (para copiar y pegar para validación en línea de comandos): <br/>", "User found and settings verified." : "Usuario encontrado y configuración verificada.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera ajustar tu búsqueda, pues abarca varios usuarios, solo el primero de los cuales podrá entrar.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera ajustar tu búsqueda, pues abarca muchos usuarios, solo el primero de ellos podrá iniciar sesión.", "An unspecified error occurred. Please check log and settings." : "Ha ocurrido un error no especificado. Por favor, comprueba el registro y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de búsqueda es inválido, probablemente debido a problemas de sintáxis tales como números impares de paréntesis abiertos y cerrados. Por favor revíselos.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Un error de conexión a LDAP / AD ocurrió, por favor verifique host, puerto y credenciales.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el marcador de posición \"%uid\". Será reemplazado por el nombre de registro al consultar LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Ocurrió un error de conexión a LDAP/AD. Por favor verifique host, puerto y credenciales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posición \"%uid\". Será reemplazado por el nombre de registro al consultar LDAP/AD.", "Please provide a login name to test against" : "Por favor suministre un nombre de inicio de sesión para probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo fue deshabilitado, porque el servidor LDAP / AD no admite memberOf.", - "Password change rejected. Hint: " : "Contraseña rechazada. Pista:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El cuadro de grupo fue deshabilitado, porque el servidor LDAP/AD no admite memberOf.", + "Password change rejected. Hint: %s" : "Se rechazó el cambio de contraseña. Pista: %s", + "Mandatory field \"%s\" left empty" : "El campo obligatorio \"%s\" se dejó en blanco", + "A password is given, but not an LDAP agent" : "Se proporcionó una contraseña, pero no un agente LDAP", + "No password is given for the user agent" : "No se proporcionó una contraseña para el agente de usuario", + "No LDAP base DN was given" : "No se proporcionó un DN base LDAP", + "User base DN is not a subnode of global base DN" : "El DN base de usuario no es un subnodo del DN base global", + "Group base DN is not a subnode of global base DN" : "El DN base de grupo no es un subnodo del DN base global", + "Login filter does not contain %s placeholder." : "El filtro de inicio de sesión no contiene el marcador de posición %s.", "Please login with the new password" : "Por favor, entra con la nueva contraseña", "LDAP User backend" : "Motor de usuarios LDAP", "Your password will expire tomorrow." : "Tu contraseña caducará mañana.", "Your password will expire today." : "Tu contraseña caducará hoy.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Tu contraseña caducará dentro de %n día.","Tu contraseña caducará dentro de %n días."], - "LDAP / AD integration" : "Integración LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s grupo encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Tu contraseña caducará dentro de %n día.","Tu contraseña caducará dentro de %n días.","Tu contraseña caducará dentro de %n días."], + "LDAP/AD integration" : "Integración LDAP/AD", + "LDAP Connection" : "Conexión LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["El inicio de sesión falló para esta configuración de LDAP: %s","El inicio de sesión falló para %n configuraciones de LDAP: %s","El inicio de sesión falló para %n configuraciones de LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Falló la búsqueda para esta configuración LDAP: %s","Falló la búsqueda para %n configuraciones LDAP: %s","Falló la búsqueda para %n configuraciones LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Existe una configuración LDAP inactiva: %s","Existen %n configuraciones LDAP inactivas: %s","Existen %n configuraciones LDAP inactivas: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["El inicio de sesión y la búsqueda funcionan para la conexión LDAP configurada (%s)","El inicio de sesión y la búsqueda funcionan para todas las %n conexiones de LDAP configuradas (%s)","El inicio de sesión y la búsqueda funcionan para todas las %n conexiones de LDAP configuradas (%s)"], + "Invalid LDAP UUIDs" : "UUIDs LDAP inválidas", + "None found" : "Ninguno encontrado", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Se han encontrado UUIDs no válidos de cuentas o grupos LDAP. Por favor, compruebe la configuración de \"Anular detección de UUID\" en la sección de Experto de la configuración LDAP y use \"occ ldap:update-uuid\" para actualizarlos.", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrados","%n grupos encontrados"], + "> 1000 groups found" : "Se encontraron más de 1000 grupos", + "> 1000 users found" : "Se encontraron más de 1000 usuarios", + "_%n user found_::_%n users found_" : ["%n usuario encontrado ","%n usuarios encontrados","%n usuarios encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No se ha podido detectar el atributo del nombre ", "Could not find the desired feature" : "No se puede encontrar la función deseada.", "Invalid Host" : "Host no válido", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica que grupos LDAP tendrán acceso a %s.", "Verify settings and count the groups" : "Verifique los ajustes y cuente los grupos", "When logging in, %s will find the user based on the following attributes:" : "Cuando se inicia sesión, %s encontrará al usuario basado en los siguientes atributos:", - "LDAP / AD Username:" : "Nombre de usuario LDAP /AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite registrarse contra el usuario LDAP / AD, que es o \"uid\" o \"sAMNombreDeCuenta\" y será detectado.", - "LDAP / AD Email Address:" : "LDAP / AD dirección de correo electrónico:", + "LDAP/AD Username:" : "Nombre de usuario LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite registrarse contra el usuario LDAP/AD, que es o \"uid\" o \"sAMAccountName\" y será detectado.", + "LDAP/AD Email Address:" : "Dirección email LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite registrarse contra un atributo de correo electrónico. Se permiten \"mail\" y \"mailPrimaryAddress\".", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro que aplicar cuando se intenta el registro. \"%%uid\" reemplaza al nombre de usuario en la acción de registro. Ejemplo: \"uid=%%uid\"", "Test Loginname" : "Probar nombre de sesión", + "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta recibir un DN para el loginname dado y el filtro de ingreso actual", "Verify settings" : "Verificar configuración", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Agregar una nueva configuración", @@ -106,7 +125,7 @@ "Test Base DN" : "Probar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automáticas al LDAP. Mejor para grandes configuraciones, pero requiere cierto conocimiento de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introduzca manualmente los filtros LDAP (recomendado para directorios grandes)", - "Listing and searching for users is constrained by these criteria:" : "El listado y la búsqueda de usuarios es restringido por estos criterios:", + "Listing and searching for users is constrained by these criteria:" : "El listado y la búsqueda de usuarios está restringido a estos criterios:", "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." : "Los objetos de clases más comunes para los usuarios son organizationalPerson, persona, usuario y inetOrgPerson. Si no está seguro de qué objeto de clase seleccionar, por favor, consulte con su administrador de directorio. ", "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica que usuarios LDAP pueden tener acceso a %s.", "Verify settings and count users" : "Verificar configuración y contar usuarios", @@ -119,7 +138,7 @@ "Current password" : "Contraseña actual", "New password" : "Nueva contraseña", "Renew password" : "Renovar contraseña", - "Wrong password." : "Contraseña errónea.", + "Wrong password." : "Contraseña incorrecta.", "Cancel" : "Cancelar", "Server" : "Servidor", "Users" : "Usuarios", @@ -149,6 +168,8 @@ "One User Base DN per line" : "Un DN Base de Usuario por línea", "User Search Attributes" : "Atributos de la busqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por linea", + "Disable users missing from LDAP" : "Desactivar los usuarios ausentes en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Si se activa, los usuarios importados de LDAP no encontrados se desactivarán.", "Group Display Name Field" : "Campo de nombre de grupo a mostrar", "The LDAP attribute to use to generate the groups's display name." : "El campo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", @@ -162,31 +183,55 @@ "Paging chunksize" : "Tamaño de los fragmentos de paginación", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamaño de los fragmentos usado para búsquedas LDAP paginadas que pueden devolver resultados voluminosos, como enumeración de usuarios o de grupos. (Si se establece en 0, se deshabilitan las búsquedas LDAP paginadas en esas situaciones.)", "Enable LDAP password changes per user" : "Permitir cambios de contraseñas LDAP por usuario", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permite a usuarios LDAP cambiar su contraseña y permite administradores y administradores de grupos, cambiar la contraseña de sus usuarios LDAP. SOlo funciona cuando las políticas de control de acceso están configuradas de acuerdo a las del servidor LDAP. Como las contraseñas se mandan en texto plano al servidor, LDAP, encripción del transporte debe ser usado y cifrado de las contraseñas debe ser configurado en el servidor LDAP.", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permite a usuarios LDAP cambiar su contraseña y permite administradores y administradores de grupos, cambiar la contraseña de sus usuarios LDAP. Solo funciona cuando las políticas de control de acceso están configuradas de acuerdo a las del servidor LDAP. Como las contraseñas se mandan en texto plano al servidor, LDAP, encripción del transporte debe ser usado y cifrado de las contraseñas debe ser configurado en el servidor LDAP.", "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)", "Default password policy DN" : "Política de contraseñas por defecto DN", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de una política de contraseñas por defecto que será usado para el manejo de la expiración de contraseñas. Solo funciona cuando los cambios por usuario de la contraseña LDAP están habilitados y solo está aceptada por OpenLDAP. Déjala vacía para deshabilitar el manejo de expiración de contraseñas.", "Special Attributes" : "Atributos especiales", "Quota Field" : "Cuota", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deje vacío para la couta predeterminada del usuario. De otra manera, específique un atributo LDAP/AD.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Déjelo vacío para la cuota predeterminada del usuario. De lo contrario, especifique un atributo LDAP/AD.", "Quota Default" : "Cuota por defecto", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobre escribir la cuota predeterminada para usuarios LDAP que no tienen una cuota configurada en el campo Cuota.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobrescribir la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota.", "Email Field" : "E-mail", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Configurar el correo electrónico del usuario desde atributo LDAP. Déjelo vacío para comportamiento predeterminado.", "User Home Folder Naming Rule" : "Regla para la carpeta Home de usuario", - "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deje vacío el nombre de usuario (por omisión). En otro caso, especifique un atributo LDAP/AD.", - "\"$home\" Placeholder Field" : "\"$home\" campo de parámetro de sustitución", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Déjelo vacío para utilizar el nombre de usuario (predeterminado). De lo contrario, especifique un atributo LDAP/AD.", + "\"$home\" Placeholder Field" : "Marcador de posición del Campo \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home en una configuración de almacenamiento externo será reemplazado con el valor del atributo especificado", + "User Profile Attributes" : "Atributos del perfil de usuario", + "Phone Field" : "Campo Teléfono", + "User profile Phone will be set from the specified attribute" : "El teléfono en el perfil del usuario será definido desde el atributo especificado", + "Website Field" : "Campo sitio Web", + "User profile Website will be set from the specified attribute" : "El sitio Web en el perfil del usuario será definido desde el atributo especificado", + "Address Field" : "Campo Dirección", + "User profile Address will be set from the specified attribute" : "La Dirección en el perfil del usuario será definida desde el atributo especificado", + "Twitter Field" : "Campo Twitter", + "User profile Twitter will be set from the specified attribute" : "El alias de Twitter en el perfil del usuario será definido desde el atributo especificado", + "Fediverse Field" : "Campo Fediverso", + "User profile Fediverse will be set from the specified attribute" : "La identidad en el Fediverso en el perfil del usuario será definida desde el atributo especificado", + "Organisation Field" : "Campo Organización", + "User profile Organisation will be set from the specified attribute" : "La Organización en el perfil del usuario será definida desde el atributo especificado", + "Role Field" : "Campo Rol", + "User profile Role will be set from the specified attribute" : "El Rol en el perfil del usuario será definido desde el atributo especificado", + "Headline Field" : "Campo Título", + "User profile Headline will be set from the specified attribute" : "El Título en el perfil del usuario será definido desde el atributo especificado", + "Biography Field" : "Campo Biografía", + "User profile Biography will be set from the specified attribute" : "La Biografía en el perfil del usuario será definida desde el atributo especificado", + "Birthdate Field" : "Campo de Fecha de nacimiento", + "User profile Date of birth will be set from the specified attribute" : "La fecha de nacimiento en el perfil de usuario será asignada en base al atributo especificado", + "Pronouns Field" : "Campo Pronombres", + "User profile Pronouns will be set from the specified attribute" : "Los pronombres en el perfil de usuario se asignarán en base al atributo especificado", "Internal Username" : "Nombre de usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el nombre de usuario interno será creado a partir del atributo UUID. Esto asegura que el nombre de usuario es único y no se necesita convertir los caracteres. El nombre de usuario interno tiene la restricción de que solo se admiten estos caracteres: [ a-zA-Z0-9_.@- ]. Otros caracteres son reemplazados por su correspondencia ASCII o simplemente omitidos. En caso de colisiones se añadirá/incrementará un número. El nombre de usuario interno se usa para identificar internamente a un usuario. Es también el nombre por defecto de la carpeta de inicio del usuario. También es parte de las URL remotas, por ejemplo para todos los servicios *DAV. Con esta configuración, se puede anular el comportamiento por defecto. Déjelo vacío para usar el comportamiento por defecto. Los cambios tendrán efecto solo en usuarios LDAP mapeados (añadidos) después del cambio.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por defecto, el nombre de usuario interno será creado a partir del atributo UUID. Esto asegura que el nombre de usuario es único y no se necesitará convertir los caracteres. El nombre de usuario interno tiene la restricción de que solo se admiten estos caracteres: [ a-zA-Z0-9_.@- ]. Otros caracteres son reemplazados por su correspondencia ASCII o simplemente omitidos. En caso de colisiones se añadirá/incrementará un número. El nombre de usuario interno se usa para identificar internamente a un usuario. Es también el nombre por defecto de la carpeta de inicio del usuario. También es parte de las URL remotas, por ejemplo para todos los servicios DAV. Con esta configuración, se puede anular el comportamiento por defecto. Los cambios tendrán efecto solo en usuarios LDAP mapeados (añadidos) después del cambio. Déjelo vacío para usar el comportamiento por defecto.", "Internal Username Attribute:" : "Atributo de nombre de usuario interno:", - "Override UUID detection" : "Sobrescribir la detección 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." : "Por defecto, el atributo UUID es autodetectado. Este atributo es usado para identificar sin dudas a usuarios y grupos LDAP. Además, el nombre de usuario interno será creado en base al UUID, si no ha sido especificado otro comportamiento arriba. Puedes sobrescribir la configuración y pasar un atributo de tu elección. Debes asegurarte de que el atributo de tu elección sea accesible por los usuarios y grupos y ser único. Déjalo en blanco para usar el comportamiento por defecto. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.", + "Override UUID detection" : "Anular la detección 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." : "De manera predeterminada, el atributo UUID se detecta automáticamente. El atributo UUID se utiliza para identificar inequívocamente a usuarios y grupos LDAP. Además, el nombre de usuario interno será creado basado en el UUID, si no ha sido especificado un comportamiento diferente más arriba. Puede sobrescribir la configuración y pasar un atributo de su elección. Debe asegurarse de que el atributo de su elección sea accesible tanto por usuarios como grupos y ser único. Déjelo en blanco para usar el comportamiento predeterminado. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.", "UUID Attribute for Users:" : "Atributo UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuario se usan para almacenar y asignar metadatos. Para identificar y reconocer con precisión a los usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere una asignación de nombre de usuario a usuario de LDAP. El nombre de usuario creado se asigna al UUID del usuario de LDAP. Además, el DN también se almacena en caché para reducir la interacción de LDAP, pero no se utiliza para la identificación. Si el DN cambia, se encontrarán los cambios. El nombre de usuario interno se usa en todas partes. Limpiar las asignaciones tendrá sobras en todas partes. ¡Borrar las asignaciones no es sensible a la configuración, afecta todas las configuraciones de LDAP! Nunca borre las asignaciones en un entorno de producción, solo en una etapa de prueba o experimental.", "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración no válida. Por favor, echa un vistazo al registro para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_419.js b/apps/user_ldap/l10n/es_419.js index 048bea09ccc..5bbe85d2791 100644 --- a/apps/user_ldap/l10n/es_419.js +++ b/apps/user_ldap/l10n/es_419.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_419.json b/apps/user_ldap/l10n/es_419.json index 07c8e64a6f1..942c0d81725 100644 --- a/apps/user_ldap/l10n/es_419.json +++ b/apps/user_ldap/l10n/es_419.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_AR.js b/apps/user_ldap/l10n/es_AR.js index 69ec5c4fe63..2ed7f903b45 100644 --- a/apps/user_ldap/l10n/es_AR.js +++ b/apps/user_ldap/l10n/es_AR.js @@ -6,7 +6,6 @@ OC.L10N.register( "No action specified" : "No se ha especificado una acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -41,18 +40,11 @@ OC.L10N.register( "Select attributes" : "Seleccionar atributos", "User found and settings verified." : "Usuario encontrado y configuraciones verificadas. ", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Favor de verificar. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, favor de verificar el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Favor de iniciar sesion con la nueva contraseña", "Your password will expire tomorrow." : "Su contraseña expirará mañana.", "Your password will expire today." : "Su contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", "LDAP user and group backend" : "Backend de LDAP para usuario y grupo", @@ -69,8 +61,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Nombre de usuario LDAP / AD", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Other Attributes:" : "Otros atributos:", "Test Loginname" : "Probar nombre de usuario", "Verify settings" : "Verificar configuraciones ", @@ -161,7 +151,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Dejelo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Nombre de usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el nombre de usuario interno se creará con base en el atributo UUID. Esto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El nombre de usuario intenro tiene la restricción de que sólo los siguienes caracteres están permitidos: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un numero. El nombre de usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Mantengalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el nombre de usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puede anular el ajuste y proporcionar el atributo que desee. Debe asegurarse de que el atributo que desee sea accesible por los usuarios y grupos y que sea único. Mantengalo vacío para el comportamiento predeterminado . Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -171,4 +160,4 @@ OC.L10N.register( "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Nombres de usuario a los Usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos de LDAP" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_AR.json b/apps/user_ldap/l10n/es_AR.json index 48192d00640..0e44649f127 100644 --- a/apps/user_ldap/l10n/es_AR.json +++ b/apps/user_ldap/l10n/es_AR.json @@ -4,7 +4,6 @@ "No action specified" : "No se ha especificado una acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -39,18 +38,11 @@ "Select attributes" : "Seleccionar atributos", "User found and settings verified." : "Usuario encontrado y configuraciones verificadas. ", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Favor de verificar. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, favor de verificar el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Favor de iniciar sesion con la nueva contraseña", "Your password will expire tomorrow." : "Su contraseña expirará mañana.", "Your password will expire today." : "Su contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", "LDAP user and group backend" : "Backend de LDAP para usuario y grupo", @@ -67,8 +59,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Nombre de usuario LDAP / AD", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Other Attributes:" : "Otros atributos:", "Test Loginname" : "Probar nombre de usuario", "Verify settings" : "Verificar configuraciones ", @@ -159,7 +149,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Dejelo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Nombre de usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el nombre de usuario interno se creará con base en el atributo UUID. Esto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El nombre de usuario intenro tiene la restricción de que sólo los siguienes caracteres están permitidos: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un numero. El nombre de usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Mantengalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el nombre de usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puede anular el ajuste y proporcionar el atributo que desee. Debe asegurarse de que el atributo que desee sea accesible por los usuarios y grupos y que sea único. Mantengalo vacío para el comportamiento predeterminado . Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -168,5 +157,5 @@ "Username-LDAP User Mapping" : "Mapeo del Nombre del usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Nombres de usuario a los Usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos de LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_CL.js b/apps/user_ldap/l10n/es_CL.js index 3a091985afd..e8b4c41e5cb 100644 --- a/apps/user_ldap/l10n/es_CL.js +++ b/apps/user_ldap/l10n/es_CL.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -32,7 +30,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -49,18 +47,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -78,9 +69,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -174,7 +162,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -183,6 +170,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_CL.json b/apps/user_ldap/l10n/es_CL.json index 811e1028873..d45f025b43b 100644 --- a/apps/user_ldap/l10n/es_CL.json +++ b/apps/user_ldap/l10n/es_CL.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -30,7 +28,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -47,18 +45,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -76,9 +67,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -172,7 +160,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_CO.js b/apps/user_ldap/l10n/es_CO.js index 3a091985afd..e8b4c41e5cb 100644 --- a/apps/user_ldap/l10n/es_CO.js +++ b/apps/user_ldap/l10n/es_CO.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -32,7 +30,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -49,18 +47,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -78,9 +69,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -174,7 +162,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -183,6 +170,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_CO.json b/apps/user_ldap/l10n/es_CO.json index 811e1028873..d45f025b43b 100644 --- a/apps/user_ldap/l10n/es_CO.json +++ b/apps/user_ldap/l10n/es_CO.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -30,7 +28,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -47,18 +45,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -76,9 +67,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -172,7 +160,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_CR.js b/apps/user_ldap/l10n/es_CR.js index 3a091985afd..e8b4c41e5cb 100644 --- a/apps/user_ldap/l10n/es_CR.js +++ b/apps/user_ldap/l10n/es_CR.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -32,7 +30,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -49,18 +47,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -78,9 +69,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -174,7 +162,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -183,6 +170,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_CR.json b/apps/user_ldap/l10n/es_CR.json index 811e1028873..d45f025b43b 100644 --- a/apps/user_ldap/l10n/es_CR.json +++ b/apps/user_ldap/l10n/es_CR.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -30,7 +28,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -47,18 +45,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -76,9 +67,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -172,7 +160,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_DO.js b/apps/user_ldap/l10n/es_DO.js index 3a091985afd..e8b4c41e5cb 100644 --- a/apps/user_ldap/l10n/es_DO.js +++ b/apps/user_ldap/l10n/es_DO.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -32,7 +30,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -49,18 +47,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -78,9 +69,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -174,7 +162,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -183,6 +170,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_DO.json b/apps/user_ldap/l10n/es_DO.json index 811e1028873..d45f025b43b 100644 --- a/apps/user_ldap/l10n/es_DO.json +++ b/apps/user_ldap/l10n/es_DO.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -30,7 +28,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -47,18 +45,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -76,9 +67,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -172,7 +160,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_EC.js b/apps/user_ldap/l10n/es_EC.js index 3a091985afd..3181235f7fe 100644 --- a/apps/user_ldap/l10n/es_EC.js +++ b/apps/user_ldap/l10n/es_EC.js @@ -6,11 +6,10 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", + "Invalid data specified" : "Datos especificados no válidos", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -32,7 +31,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -49,22 +48,26 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Se produjo un error de conexión con LDAP/AD. Por favor, verifica el host, el puerto y las credenciales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posición \"%uid\". Se reemplazará con el nombre de inicio de sesión al consultar LDAP/AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El cuadro de grupo está deshabilitado porque el servidor LDAP/AD no admite memberOf.", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", + "LDAP User backend" : "Backend de usuario LDAP", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], + "LDAP/AD integration" : "Integración LDAP/AD", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrados","%n grupos encontrados"], + "> 1000 groups found" : "Se encontraron más de 1000 grupos", + "> 1000 users found" : "Se encontraron más de 1000 usuarios", + "_%n user found_::_%n users found_" : ["%n usuario encontrado","%n usuarios encontrados","%n usuarios encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", "LDAP user and group backend" : "Backend de LDAP para usuario y grupo", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Esta aplicación permite a los administradores conectar Nextcloud a un directorio de usuarios basado en LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Esta aplicación permite a los administradores conectar Nextcloud a un directorio de usuarios basado en LDAP para autenticación y provisión de usuarios, grupos y atributos de usuarios. Los administradores pueden configurar esta aplicación para conectarse a uno o más directorios LDAP o Active Directory a través de una interfaz LDAP. Atributos como la cuota de usuario, el correo electrónico, las imágenes de avatar, las membresías de grupo y más se pueden extraer en Nextcloud desde un directorio con las consultas y filtros adecuados.\n \n Un usuario inicia sesión en Nextcloud con sus credenciales de LDAP o AD y se le concede acceso en función de una solicitud de autenticación gestionada por el servidor LDAP o AD. Nextcloud no almacena contraseñas de LDAP o AD, en su lugar, estas credenciales se utilizan para autenticar a un usuario y luego Nextcloud utiliza una sesión para el ID de usuario. Obtén más información en la documentación de Backend de Usuarios y Grupos LDAP.", "Test Configuration" : "Probar configuración", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:", @@ -78,13 +81,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", + "LDAP/AD Username:" : "Usuario LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión con el nombre de usuario LDAP/AD, que es \"uid\" o \"sAMAccountName\" y se detectará automáticamente.", + "LDAP/AD Email Address:" : "Dirección de correo electrónico LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", "Test Loginname" : "Probar nombre de usuario", + "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta obtener un DN para el nombre de inicio de sesión y el filtro de inicio de sesión actual", "Verify settings" : "Verificar configuraciones ", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Agregar una nueva configuración", @@ -148,6 +152,8 @@ OC.L10N.register( "One User Base DN per line" : "Un Usuario Base de DN por línea", "User Search Attributes" : "Atributos de búsqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por línea", + "Disable users missing from LDAP" : "Deshabilitar usuarios ausentes en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cuando está activado, los usuarios importados de LDAP que luego estén ausentes se desactivarán", "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar", "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", @@ -173,8 +179,30 @@ OC.L10N.register( "Email Field" : "Campo de correo electrónico", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Déjalo vacío para el nombre de usuario (predeterminado). De lo contrario, especifica un atributo LDAP/AD.", + "\"$home\" Placeholder Field" : "Campo de marcador de posición \"$home\"", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home en una configuración de almacenamiento externo se reemplazará con el valor del atributo especificado", + "User Profile Attributes" : "Atributos del perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "El perfil de usuario Teléfono se establecerá a partir del atributo especificado", + "Website Field" : "Campo de sitio web", + "User profile Website will be set from the specified attribute" : "El perfil de usuario Sitio web se establecerá a partir del atributo especificado", + "Address Field" : "Campo de dirección", + "User profile Address will be set from the specified attribute" : "El perfil de usuario Dirección se establecerá a partir del atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "El perfil de usuario Twitter se establecerá a partir del atributo especificado", + "Fediverse Field" : "Campo de Fediverse", + "User profile Fediverse will be set from the specified attribute" : "El perfil de usuario Fediverse se establecerá a partir del atributo especificado", + "Organisation Field" : "Campo de organización", + "User profile Organisation will be set from the specified attribute" : "El perfil de usuario Organización se establecerá a partir del atributo especificado", + "Role Field" : "Campo de rol", + "User profile Role will be set from the specified attribute" : "El perfil de usuario Rol se establecerá a partir del atributo especificado", + "Headline Field" : "Campo de titular", + "User profile Headline will be set from the specified attribute" : "El perfil de usuario Titular se establecerá a partir del atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "El perfil de usuario Biografía se establecerá a partir del atributo especificado", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De forma predeterminada, el nombre de usuario interno se creará a partir del atributo UUID. Se asegura de que el nombre de usuario sea único y no se necesite convertir caracteres. El nombre de usuario interno tiene la restricción de que solo se permiten estos caracteres: [a-zA-Z0-9_.@-]. Otros caracteres se reemplazan por su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/aumentará un número. El nombre de usuario interno se utiliza para identificar a un usuario internamente. También es el nombre predeterminado para la carpeta de inicio de usuario. También es parte de las URL remotas, por ejemplo, para todos los servicios DAV. Con esta configuración, se puede anular el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente. Déjalo vacío para el comportamiento predeterminado.", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -183,6 +211,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_EC.json b/apps/user_ldap/l10n/es_EC.json index 811e1028873..a6942679af5 100644 --- a/apps/user_ldap/l10n/es_EC.json +++ b/apps/user_ldap/l10n/es_EC.json @@ -4,11 +4,10 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", + "Invalid data specified" : "Datos especificados no válidos", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -30,7 +29,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -47,22 +46,26 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Se produjo un error de conexión con LDAP/AD. Por favor, verifica el host, el puerto y las credenciales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posición \"%uid\". Se reemplazará con el nombre de inicio de sesión al consultar LDAP/AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El cuadro de grupo está deshabilitado porque el servidor LDAP/AD no admite memberOf.", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", + "LDAP User backend" : "Backend de usuario LDAP", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], + "LDAP/AD integration" : "Integración LDAP/AD", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrados","%n grupos encontrados"], + "> 1000 groups found" : "Se encontraron más de 1000 grupos", + "> 1000 users found" : "Se encontraron más de 1000 usuarios", + "_%n user found_::_%n users found_" : ["%n usuario encontrado","%n usuarios encontrados","%n usuarios encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", "LDAP user and group backend" : "Backend de LDAP para usuario y grupo", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Esta aplicación permite a los administradores conectar Nextcloud a un directorio de usuarios basado en LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Esta aplicación permite a los administradores conectar Nextcloud a un directorio de usuarios basado en LDAP para autenticación y provisión de usuarios, grupos y atributos de usuarios. Los administradores pueden configurar esta aplicación para conectarse a uno o más directorios LDAP o Active Directory a través de una interfaz LDAP. Atributos como la cuota de usuario, el correo electrónico, las imágenes de avatar, las membresías de grupo y más se pueden extraer en Nextcloud desde un directorio con las consultas y filtros adecuados.\n \n Un usuario inicia sesión en Nextcloud con sus credenciales de LDAP o AD y se le concede acceso en función de una solicitud de autenticación gestionada por el servidor LDAP o AD. Nextcloud no almacena contraseñas de LDAP o AD, en su lugar, estas credenciales se utilizan para autenticar a un usuario y luego Nextcloud utiliza una sesión para el ID de usuario. Obtén más información en la documentación de Backend de Usuarios y Grupos LDAP.", "Test Configuration" : "Probar configuración", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:", @@ -76,13 +79,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", + "LDAP/AD Username:" : "Usuario LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión con el nombre de usuario LDAP/AD, que es \"uid\" o \"sAMAccountName\" y se detectará automáticamente.", + "LDAP/AD Email Address:" : "Dirección de correo electrónico LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", "Test Loginname" : "Probar nombre de usuario", + "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta obtener un DN para el nombre de inicio de sesión y el filtro de inicio de sesión actual", "Verify settings" : "Verificar configuraciones ", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Agregar una nueva configuración", @@ -146,6 +150,8 @@ "One User Base DN per line" : "Un Usuario Base de DN por línea", "User Search Attributes" : "Atributos de búsqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por línea", + "Disable users missing from LDAP" : "Deshabilitar usuarios ausentes en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cuando está activado, los usuarios importados de LDAP que luego estén ausentes se desactivarán", "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar", "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", @@ -171,8 +177,30 @@ "Email Field" : "Campo de correo electrónico", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Déjalo vacío para el nombre de usuario (predeterminado). De lo contrario, especifica un atributo LDAP/AD.", + "\"$home\" Placeholder Field" : "Campo de marcador de posición \"$home\"", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home en una configuración de almacenamiento externo se reemplazará con el valor del atributo especificado", + "User Profile Attributes" : "Atributos del perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "El perfil de usuario Teléfono se establecerá a partir del atributo especificado", + "Website Field" : "Campo de sitio web", + "User profile Website will be set from the specified attribute" : "El perfil de usuario Sitio web se establecerá a partir del atributo especificado", + "Address Field" : "Campo de dirección", + "User profile Address will be set from the specified attribute" : "El perfil de usuario Dirección se establecerá a partir del atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "El perfil de usuario Twitter se establecerá a partir del atributo especificado", + "Fediverse Field" : "Campo de Fediverse", + "User profile Fediverse will be set from the specified attribute" : "El perfil de usuario Fediverse se establecerá a partir del atributo especificado", + "Organisation Field" : "Campo de organización", + "User profile Organisation will be set from the specified attribute" : "El perfil de usuario Organización se establecerá a partir del atributo especificado", + "Role Field" : "Campo de rol", + "User profile Role will be set from the specified attribute" : "El perfil de usuario Rol se establecerá a partir del atributo especificado", + "Headline Field" : "Campo de titular", + "User profile Headline will be set from the specified attribute" : "El perfil de usuario Titular se establecerá a partir del atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "El perfil de usuario Biografía se establecerá a partir del atributo especificado", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De forma predeterminada, el nombre de usuario interno se creará a partir del atributo UUID. Se asegura de que el nombre de usuario sea único y no se necesite convertir caracteres. El nombre de usuario interno tiene la restricción de que solo se permiten estos caracteres: [a-zA-Z0-9_.@-]. Otros caracteres se reemplazan por su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/aumentará un número. El nombre de usuario interno se utiliza para identificar a un usuario internamente. También es el nombre predeterminado para la carpeta de inicio de usuario. También es parte de las URL remotas, por ejemplo, para todos los servicios DAV. Con esta configuración, se puede anular el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente. Déjalo vacío para el comportamiento predeterminado.", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +209,7 @@ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_GT.js b/apps/user_ldap/l10n/es_GT.js index 3a091985afd..e8b4c41e5cb 100644 --- a/apps/user_ldap/l10n/es_GT.js +++ b/apps/user_ldap/l10n/es_GT.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -32,7 +30,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -49,18 +47,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -78,9 +69,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -174,7 +162,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -183,6 +170,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_GT.json b/apps/user_ldap/l10n/es_GT.json index 811e1028873..d45f025b43b 100644 --- a/apps/user_ldap/l10n/es_GT.json +++ b/apps/user_ldap/l10n/es_GT.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -30,7 +28,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -47,18 +45,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -76,9 +67,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -172,7 +160,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_HN.js b/apps/user_ldap/l10n/es_HN.js index d8d218ce1e0..fd1a560a19a 100644 --- a/apps/user_ldap/l10n/es_HN.js +++ b/apps/user_ldap/l10n/es_HN.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_HN.json b/apps/user_ldap/l10n/es_HN.json index 0f2728b3b53..6bca1270581 100644 --- a/apps/user_ldap/l10n/es_HN.json +++ b/apps/user_ldap/l10n/es_HN.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_MX.js b/apps/user_ldap/l10n/es_MX.js index 7c4659d8360..4e06ab492d4 100644 --- a/apps/user_ldap/l10n/es_MX.js +++ b/apps/user_ldap/l10n/es_MX.js @@ -6,11 +6,10 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", + "Invalid data specified" : "Datos especificados inválidos", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -32,7 +31,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -49,18 +48,23 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Ocurrió un error de conexión a LDAP/AD. Por favor, verifique el huésped, puerto y credenciales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posición \"%uid\". Se reemplazará con el nombre de inicio de sesión al consultar LDAP/AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El cuadro de grupo está deshabilitado porque el servidor LDAP/AD no admite \"memberOf\".", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", + "LDAP User backend" : "Backend de usuario LDAP", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], + "LDAP/AD integration" : "Integración LDAP/AD", + "LDAP Connection" : "Conexión LDAP", + "Invalid LDAP UUIDs" : "UUIDs de LDAP inválidas", + "None found" : "Ninguno encontrado", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrados","%n grupos encontrados"], + "> 1000 groups found" : "> 1000 grupos encontrados", + "> 1000 users found" : "> 1000 usuarios encontrados", + "_%n user found_::_%n users found_" : ["%n usuario encontrado","%n usuarios encontrados","%n usuarios encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -80,9 +84,8 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", + "LDAP/AD Username:" : "Nombre de usuario LDAP/AD:", + "LDAP/AD Email Address:" : "Dirección de correo electrónico LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -150,6 +153,7 @@ OC.L10N.register( "One User Base DN per line" : "Un Usuario Base de DN por línea", "User Search Attributes" : "Atributos de búsqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por línea", + "Disable users missing from LDAP" : "Desactivar los usuarios ausentes en LDAP", "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar", "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", @@ -175,8 +179,26 @@ OC.L10N.register( "Email Field" : "Campo de correo electrónico", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", + "User Profile Attributes" : "Atributos del perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "El teléfono del perfil de usuario se establecerá desde el atributo especificado", + "Website Field" : "Campo de sitio web", + "User profile Website will be set from the specified attribute" : "El sitio web del perfil de usuario se establecerá desde el atributo especificado", + "Address Field" : "Campo de dirección", + "User profile Address will be set from the specified attribute" : "La dirección del perfil de usuario se establecerá desde el atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "El Twitter del perfil de usuario se establecerá desde el atributo especificado", + "Fediverse Field" : "Campo de fediverso", + "User profile Fediverse will be set from the specified attribute" : "El fediverso del perfil de usuario se establecerá desde el atributo especificado", + "Organisation Field" : "Campo de organización", + "User profile Organisation will be set from the specified attribute" : "La organización del perfil de usuario se establecerá desde el atributo especificado", + "Role Field" : "Campo de cargo", + "User profile Role will be set from the specified attribute" : "El cargo del perfil de usuario se establecerá desde el atributo especificado", + "Headline Field" : "Campo de titular", + "User profile Headline will be set from the specified attribute" : "El titular del perfil de usuario se establecerá desde el atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "La biografía del perfil de usuario se establecerá desde el atributo especificado", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -185,6 +207,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_MX.json b/apps/user_ldap/l10n/es_MX.json index e21f4b63ec4..74020cb5593 100644 --- a/apps/user_ldap/l10n/es_MX.json +++ b/apps/user_ldap/l10n/es_MX.json @@ -4,11 +4,10 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", + "Invalid data specified" : "Datos especificados inválidos", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -30,7 +29,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -47,18 +46,23 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Ocurrió un error de conexión a LDAP/AD. Por favor, verifique el huésped, puerto y credenciales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta el marcador de posición \"%uid\". Se reemplazará con el nombre de inicio de sesión al consultar LDAP/AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "El cuadro de grupo está deshabilitado porque el servidor LDAP/AD no admite \"memberOf\".", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", + "LDAP User backend" : "Backend de usuario LDAP", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], + "LDAP/AD integration" : "Integración LDAP/AD", + "LDAP Connection" : "Conexión LDAP", + "Invalid LDAP UUIDs" : "UUIDs de LDAP inválidas", + "None found" : "Ninguno encontrado", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrados","%n grupos encontrados"], + "> 1000 groups found" : "> 1000 grupos encontrados", + "> 1000 users found" : "> 1000 usuarios encontrados", + "_%n user found_::_%n users found_" : ["%n usuario encontrado","%n usuarios encontrados","%n usuarios encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -78,9 +82,8 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", + "LDAP/AD Username:" : "Nombre de usuario LDAP/AD:", + "LDAP/AD Email Address:" : "Dirección de correo electrónico LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -148,6 +151,7 @@ "One User Base DN per line" : "Un Usuario Base de DN por línea", "User Search Attributes" : "Atributos de búsqueda de usuario", "Optional; one attribute per line" : "Opcional; un atributo por línea", + "Disable users missing from LDAP" : "Desactivar los usuarios ausentes en LDAP", "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar", "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", @@ -173,8 +177,26 @@ "Email Field" : "Campo de correo electrónico", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", + "User Profile Attributes" : "Atributos del perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "El teléfono del perfil de usuario se establecerá desde el atributo especificado", + "Website Field" : "Campo de sitio web", + "User profile Website will be set from the specified attribute" : "El sitio web del perfil de usuario se establecerá desde el atributo especificado", + "Address Field" : "Campo de dirección", + "User profile Address will be set from the specified attribute" : "La dirección del perfil de usuario se establecerá desde el atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "El Twitter del perfil de usuario se establecerá desde el atributo especificado", + "Fediverse Field" : "Campo de fediverso", + "User profile Fediverse will be set from the specified attribute" : "El fediverso del perfil de usuario se establecerá desde el atributo especificado", + "Organisation Field" : "Campo de organización", + "User profile Organisation will be set from the specified attribute" : "La organización del perfil de usuario se establecerá desde el atributo especificado", + "Role Field" : "Campo de cargo", + "User profile Role will be set from the specified attribute" : "El cargo del perfil de usuario se establecerá desde el atributo especificado", + "Headline Field" : "Campo de titular", + "User profile Headline will be set from the specified attribute" : "El titular del perfil de usuario se establecerá desde el atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "La biografía del perfil de usuario se establecerá desde el atributo especificado", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -183,6 +205,7 @@ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_NI.js b/apps/user_ldap/l10n/es_NI.js index d8d218ce1e0..fd1a560a19a 100644 --- a/apps/user_ldap/l10n/es_NI.js +++ b/apps/user_ldap/l10n/es_NI.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_NI.json b/apps/user_ldap/l10n/es_NI.json index 0f2728b3b53..6bca1270581 100644 --- a/apps/user_ldap/l10n/es_NI.json +++ b/apps/user_ldap/l10n/es_NI.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_PA.js b/apps/user_ldap/l10n/es_PA.js index d8d218ce1e0..fd1a560a19a 100644 --- a/apps/user_ldap/l10n/es_PA.js +++ b/apps/user_ldap/l10n/es_PA.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_PA.json b/apps/user_ldap/l10n/es_PA.json index 0f2728b3b53..6bca1270581 100644 --- a/apps/user_ldap/l10n/es_PA.json +++ b/apps/user_ldap/l10n/es_PA.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_PE.js b/apps/user_ldap/l10n/es_PE.js index d8d218ce1e0..fd1a560a19a 100644 --- a/apps/user_ldap/l10n/es_PE.js +++ b/apps/user_ldap/l10n/es_PE.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_PE.json b/apps/user_ldap/l10n/es_PE.json index 0f2728b3b53..6bca1270581 100644 --- a/apps/user_ldap/l10n/es_PE.json +++ b/apps/user_ldap/l10n/es_PE.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_PR.js b/apps/user_ldap/l10n/es_PR.js index d8d218ce1e0..fd1a560a19a 100644 --- a/apps/user_ldap/l10n/es_PR.js +++ b/apps/user_ldap/l10n/es_PR.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_PR.json b/apps/user_ldap/l10n/es_PR.json index 0f2728b3b53..6bca1270581 100644 --- a/apps/user_ldap/l10n/es_PR.json +++ b/apps/user_ldap/l10n/es_PR.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_PY.js b/apps/user_ldap/l10n/es_PY.js index d8d218ce1e0..fd1a560a19a 100644 --- a/apps/user_ldap/l10n/es_PY.js +++ b/apps/user_ldap/l10n/es_PY.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_PY.json b/apps/user_ldap/l10n/es_PY.json index 0f2728b3b53..6bca1270581 100644 --- a/apps/user_ldap/l10n/es_PY.json +++ b/apps/user_ldap/l10n/es_PY.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_SV.js b/apps/user_ldap/l10n/es_SV.js index 3a091985afd..e8b4c41e5cb 100644 --- a/apps/user_ldap/l10n/es_SV.js +++ b/apps/user_ldap/l10n/es_SV.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -32,7 +30,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -49,18 +47,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -78,9 +69,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -174,7 +162,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -183,6 +170,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_SV.json b/apps/user_ldap/l10n/es_SV.json index 811e1028873..d45f025b43b 100644 --- a/apps/user_ldap/l10n/es_SV.json +++ b/apps/user_ldap/l10n/es_SV.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -30,7 +28,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.", "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} registro disponible dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado","{objectsFound} registros disponibles dentro del DN base proporcionado"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?", "Confirm Deletion" : "Confirmar el borrado", @@ -47,18 +45,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -76,9 +67,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -172,7 +160,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/es_UY.js b/apps/user_ldap/l10n/es_UY.js index d8d218ce1e0..fd1a560a19a 100644 --- a/apps/user_ldap/l10n/es_UY.js +++ b/apps/user_ldap/l10n/es_UY.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/es_UY.json b/apps/user_ldap/l10n/es_UY.json index 0f2728b3b53..6bca1270581 100644 --- a/apps/user_ldap/l10n/es_UY.json +++ b/apps/user_ldap/l10n/es_UY.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ", "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.", "No action specified" : "No se ha especificado alguna acción", "No configuration specified" : "No se ha especificado una configuración", "No data specified" : "No se han especificado datos", - " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ", "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.", "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", - "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña", "Your password will expire tomorrow." : "Tu contraseña expirará mañana.", "Your password will expire today." : "Tu contraseña expirará el día de hoy. ", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], - "LDAP / AD integration" : "Integración con LDAP / AD", - "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. ","La contraseña expirará dentro de %n días. "], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ", "Could not find the desired feature" : "No fue posible encontrar la función deseada.", "Invalid Host" : "Servidor inválido", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.", "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos", "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:", - "LDAP / AD Username:" : "Usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ", - "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ", "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario", "Internal Username" : "Usuario interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ", "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:", "Override UUID detection" : "Anular la detección 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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP", "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/et_EE.js b/apps/user_ldap/l10n/et_EE.js index 4193ced76dc..a024012d43d 100644 --- a/apps/user_ldap/l10n/et_EE.js +++ b/apps/user_ldap/l10n/et_EE.js @@ -4,19 +4,21 @@ OC.L10N.register( "Failed to clear the mappings." : "Vastenduste puhastamine ebaõnnestus.", "Failed to delete the server configuration" : "Serveri seadistuse kustutamine ebaõnnestus", "Invalid configuration: Anonymous binding is not allowed." : "Vale seadistus: anonüümne sidumine pole lubatud.", - "Valid configuration, connection established!" : "Valiidne seadistus, ühendus loodud!", - "Invalid configuration. Please have a look at the logs for further details." : "Vigane seadistus. Rohkema info jaoks vaadake logisid.", + "Valid configuration, connection established!" : "Korrektne seadistus, ühendus on loodud!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Seadistus on korrektne, kuid sidumine ei õnnestunud. Palun kontrolli serveri seadistusi ja ühenduse kasutajanime/salasõna.", + "Invalid configuration: %s" : "Vigane seadistus: %s", "No action specified" : "Tegevusi pole määratletud", "No configuration specified" : "Seadistust pole määratletud", "No data specified" : "Andmeid pole määratletud", - " Could not set configuration %s" : "Ei suutnud seadistada %s", + "Invalid data specified" : "Kirjeldatud on vigased andmed", + "Could not set configuration %1$s to %2$s" : "Ei õnnestunud muuta „%1$s“ seadistuse väärtuseks „%2$s“", "Action does not exist" : "Toimingut pole olemas", "Renewing …" : "Värskendamine ...", - "Very weak password" : "Väga nõrk parool", - "Weak password" : "Nõrk parool", - "So-so password" : "Enam-vähem sobiv parool", - "Good password" : "Hea parool", - "Strong password" : "Väga hea parool", + "Very weak password" : "Väga nõrk salasõna", + "Weak password" : "Nõrk salasõna", + "So-so password" : "Enam-vähem sobiv salasõna", + "Good password" : "Hea salasõna", + "Strong password" : "Väga hea salasõna", "The Base DN appears to be wrong" : "Näib, et Base DN on vale", "Testing configuration…" : "Seadistuse testimine", "Configuration incorrect" : "Seadistus on vigane", @@ -30,22 +32,35 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "BaasDN-i tuvastamine ebaõnnestus. Palun sisesta see käsitsi.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "BaasDN-is ei leitu ühtegi objekti.", - "More than 1,000 directory entries available." : "Saadaval on rohkem kui 1000 kataloogi kirjet.", + "More than 1,000 directory entries available." : "Saadaval on rohkem kui 1000 kataloogikirjet.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["„Base DN“ alusel on saadaval {objectsFound} kirje","„Base DN“ alusel on saadaval {objectsFound} kirjet"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Tekkis viga. Palun kontrolli, kas „Base DN“ on õige, ühendus toimib ning kasutajanimi/salasõna on korrektsed.", "Do you really want to delete the current Server Configuration?" : "Oled kindel, et tahad kustutada praegust serveri seadistust?", "Confirm Deletion" : "Kinnita kustutamine", "Mappings cleared successfully!" : "Vastandused on eemaldatud!", - "Error while clearing the mappings." : "Tõrgeseose eemaldamisel.", + "Error while clearing the mappings." : "Viga vastanduse/seose eemaldamisel.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonüümne sidumine pole lubatud. Palun sisesta kasutaja „User DN“ ja salasõna.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP päringu viga. Anonüümne sidumine pole ilmselt lubatud.", "Mode switch" : "Režiimi lüliti", "Select attributes" : "Vali atribuudid", "User found and settings verified." : "Kasutaja leiti ja seaded on kontrollitud.", "Please provide a login name to test against" : "Palun sisesta kasutajanimi, mida testida", - "Please login with the new password" : "Palun logi uue parooliga sisse", - "Your password will expire tomorrow." : "Su parool aegub homme.", - "Your password will expire today." : "Su parool aegub täna.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Su parool aegub %n päeva jooksul.","Su parool aegub %n päeva jooksul."], - "LDAP / AD integration" : "LDAP / AD integratsioon", - "_%s group found_::_%s groups found_" : ["%s grupp leitud","%s gruppi leitud"], - "_%s user found_::_%s users found_" : ["%s kasutaja leitud","%s kasutajat leitud"], + "Password change rejected. Hint: %s" : "Salasõna muutmine polnud võimalik. Selgitus: %s", + "Mandatory field \"%s\" left empty" : "Kohustuslik väli „%s“ on jäänud tühjaks", + "Login filter does not contain %s placeholder." : "Kasutajanimede filtris puudub kohatäitja „%s“", + "Please login with the new password" : "Palun logi uue salasõnaga sisse", + "LDAP User backend" : "LPAD-i põhine tausteteenus kasutajate jaoks", + "Your password will expire tomorrow." : "Su salasõna aegub homme.", + "Your password will expire today." : "Su salasõna aegub täna.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Su salasõna aegub %n päeva jooksul.","Su salasõna aegub %n päeva jooksul."], + "LDAP/AD integration" : "LDAP/AD lõiming", + "LDAP Connection" : "LDAP ühendus", + "Invalid LDAP UUIDs" : "Vigased LDAP UUID-d", + "None found" : "Mitte midagi ei leidu", + "_%n group found_::_%n groups found_" : ["Leidus %n grupp","Leidus %n gruppi"], + "> 1000 groups found" : "Leidus üle 1000 grupi", + "> 1000 users found" : "Leidus üle 1000 kasutaja", + "_%n user found_::_%n users found_" : ["Leidus %n kasutaja","Leidus %n kasutajat"], "Could not find the desired feature" : "Ei suuda leida soovitud funktsioonaalsust", "Invalid Host" : "Vigane server", "Test Configuration" : "Testi seadistust", @@ -55,12 +70,10 @@ OC.L10N.register( "Only from these groups:" : "Ainult neist gruppidest:", "Search groups" : "Otsi gruppe", "Available groups" : "Saadaolevad grupid", - "Selected groups" : "Validut grupid", + "Selected groups" : "Valitud grupid", "Edit LDAP Query" : "Muuda LDAP päringut", "LDAP Filter:" : "LDAP filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filter määrab millised LDAP grupid saavad ligipääsu sellele %s instantsile.", - "LDAP / AD Username:" : "LDAP / AD kasutajanimi:", - "LDAP / AD Email Address:" : "LDAP / AD e-posti aadress:", "Other Attributes:" : "Muud atribuudid:", "Test Loginname" : "Testi kasutajanime", "Verify settings" : "Kontrolli seadeid", @@ -70,9 +83,9 @@ OC.L10N.register( "Port" : "Port", "Detect Port" : "Tuvasta port", "User DN" : "Kasutaja 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." : "Klientkasutaja DN, kellega seotakse, nt. uid=agent,dc=näidis,dc=com. Anonüümseks ligipääsuks jäta DN ja parool tühjaks.", - "Password" : "Parool", - "For anonymous access, leave DN and Password empty." : "Anonüümseks ligipääsuks jäta DN ja parool tühjaks.", + "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." : "Klientkasutaja DN, kellega seotakse, nt. uid=agent,dc=näidis,dc=com. Anonüümseks ligipääsuks jäta DN ja salasõna tühjaks.", + "Password" : "Salasõna", + "For anonymous access, leave DN and Password empty." : "Anonüümseks ligipääsuks jäta DN ja salasõna tühjaks.", "Save Credentials" : "Salvesta kasutajaandmed", "One Base DN per line" : "Üks baas-DN rea kohta", "You can specify Base DN for users and groups in the Advanced tab" : "Sa saad kasutajate ja gruppide baas DN-i määrata lisavalikute vahekaardilt", @@ -86,13 +99,13 @@ OC.L10N.register( "Saving" : "Salvestamine", "Back" : "Tagasi", "Continue" : "Jätka", - "Please renew your password." : "Palun uuenda oma parool.", + "Please renew your password." : "Palun uuenda oma salasõna.", "An internal error occurred." : "Tekkis sisemine tõrge.", "Please try again or contact your administrator." : "Proovi uuesti või võta ühendust administraatoriga.", - "Current password" : "Praegune parool", - "New password" : "Uus parool", - "Renew password" : "Uuenda parooli", - "Wrong password." : "Vale parool.", + "Current password" : "Praegune salasõna", + "New password" : "Uus salasõna", + "Renew password" : "Uuenda salasõna", + "Wrong password." : "Vale salasõna.", "Cancel" : "Loobu", "Server" : "Server", "Users" : "Kasutajad", @@ -101,8 +114,8 @@ OC.L10N.register( "Expert" : "Ekspert", "Advanced" : "Täpsem", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Hoiatus:</b>PHP LDAP moodul pole paigaldatud ning LDAP kasutamine ei ole võimalik. Palu oma süsteeihaldurit see paigaldada.", - "Connection Settings" : "Ühenduse seaded", - "Configuration Active" : "Seadistus aktiivne", + "Connection Settings" : "Ühenduse seadistused", + "Configuration Active" : "Seadistus on aktiivne", "When unchecked, this configuration will be skipped." : "Kui on märkimata, siis seadistust ei kasutata.", "Backup (Replica) Host" : "Varuserver", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Lisa valikuline varuserver. See peab olema koopia peamisest LDAP/AD serverist.", @@ -144,6 +157,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "UUID atribuut gruppidele:", "Username-LDAP User Mapping" : "LDAP-Kasutajatunnus Kasutaja Vastendus", "Clear Username-LDAP User Mapping" : "Puhasta LDAP-Kasutajatunnus Kasutaja Vastendus", - "Clear Groupname-LDAP Group Mapping" : "Puhasta LDAP-Grupinimi Grupp Vastendus" + "Clear Groupname-LDAP Group Mapping" : "Puhasta LDAP-Grupinimi Grupp Vastendus", + "Invalid configuration. Please have a look at the logs for further details." : "Vigane seadistus. Rohkema info jaoks vaadake logisid." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/et_EE.json b/apps/user_ldap/l10n/et_EE.json index 61b2e3c4ea4..3d90e2d17ce 100644 --- a/apps/user_ldap/l10n/et_EE.json +++ b/apps/user_ldap/l10n/et_EE.json @@ -2,19 +2,21 @@ "Failed to clear the mappings." : "Vastenduste puhastamine ebaõnnestus.", "Failed to delete the server configuration" : "Serveri seadistuse kustutamine ebaõnnestus", "Invalid configuration: Anonymous binding is not allowed." : "Vale seadistus: anonüümne sidumine pole lubatud.", - "Valid configuration, connection established!" : "Valiidne seadistus, ühendus loodud!", - "Invalid configuration. Please have a look at the logs for further details." : "Vigane seadistus. Rohkema info jaoks vaadake logisid.", + "Valid configuration, connection established!" : "Korrektne seadistus, ühendus on loodud!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Seadistus on korrektne, kuid sidumine ei õnnestunud. Palun kontrolli serveri seadistusi ja ühenduse kasutajanime/salasõna.", + "Invalid configuration: %s" : "Vigane seadistus: %s", "No action specified" : "Tegevusi pole määratletud", "No configuration specified" : "Seadistust pole määratletud", "No data specified" : "Andmeid pole määratletud", - " Could not set configuration %s" : "Ei suutnud seadistada %s", + "Invalid data specified" : "Kirjeldatud on vigased andmed", + "Could not set configuration %1$s to %2$s" : "Ei õnnestunud muuta „%1$s“ seadistuse väärtuseks „%2$s“", "Action does not exist" : "Toimingut pole olemas", "Renewing …" : "Värskendamine ...", - "Very weak password" : "Väga nõrk parool", - "Weak password" : "Nõrk parool", - "So-so password" : "Enam-vähem sobiv parool", - "Good password" : "Hea parool", - "Strong password" : "Väga hea parool", + "Very weak password" : "Väga nõrk salasõna", + "Weak password" : "Nõrk salasõna", + "So-so password" : "Enam-vähem sobiv salasõna", + "Good password" : "Hea salasõna", + "Strong password" : "Väga hea salasõna", "The Base DN appears to be wrong" : "Näib, et Base DN on vale", "Testing configuration…" : "Seadistuse testimine", "Configuration incorrect" : "Seadistus on vigane", @@ -28,22 +30,35 @@ "Could not detect Base DN, please enter it manually." : "BaasDN-i tuvastamine ebaõnnestus. Palun sisesta see käsitsi.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "BaasDN-is ei leitu ühtegi objekti.", - "More than 1,000 directory entries available." : "Saadaval on rohkem kui 1000 kataloogi kirjet.", + "More than 1,000 directory entries available." : "Saadaval on rohkem kui 1000 kataloogikirjet.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["„Base DN“ alusel on saadaval {objectsFound} kirje","„Base DN“ alusel on saadaval {objectsFound} kirjet"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Tekkis viga. Palun kontrolli, kas „Base DN“ on õige, ühendus toimib ning kasutajanimi/salasõna on korrektsed.", "Do you really want to delete the current Server Configuration?" : "Oled kindel, et tahad kustutada praegust serveri seadistust?", "Confirm Deletion" : "Kinnita kustutamine", "Mappings cleared successfully!" : "Vastandused on eemaldatud!", - "Error while clearing the mappings." : "Tõrgeseose eemaldamisel.", + "Error while clearing the mappings." : "Viga vastanduse/seose eemaldamisel.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonüümne sidumine pole lubatud. Palun sisesta kasutaja „User DN“ ja salasõna.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP päringu viga. Anonüümne sidumine pole ilmselt lubatud.", "Mode switch" : "Režiimi lüliti", "Select attributes" : "Vali atribuudid", "User found and settings verified." : "Kasutaja leiti ja seaded on kontrollitud.", "Please provide a login name to test against" : "Palun sisesta kasutajanimi, mida testida", - "Please login with the new password" : "Palun logi uue parooliga sisse", - "Your password will expire tomorrow." : "Su parool aegub homme.", - "Your password will expire today." : "Su parool aegub täna.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Su parool aegub %n päeva jooksul.","Su parool aegub %n päeva jooksul."], - "LDAP / AD integration" : "LDAP / AD integratsioon", - "_%s group found_::_%s groups found_" : ["%s grupp leitud","%s gruppi leitud"], - "_%s user found_::_%s users found_" : ["%s kasutaja leitud","%s kasutajat leitud"], + "Password change rejected. Hint: %s" : "Salasõna muutmine polnud võimalik. Selgitus: %s", + "Mandatory field \"%s\" left empty" : "Kohustuslik väli „%s“ on jäänud tühjaks", + "Login filter does not contain %s placeholder." : "Kasutajanimede filtris puudub kohatäitja „%s“", + "Please login with the new password" : "Palun logi uue salasõnaga sisse", + "LDAP User backend" : "LPAD-i põhine tausteteenus kasutajate jaoks", + "Your password will expire tomorrow." : "Su salasõna aegub homme.", + "Your password will expire today." : "Su salasõna aegub täna.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Su salasõna aegub %n päeva jooksul.","Su salasõna aegub %n päeva jooksul."], + "LDAP/AD integration" : "LDAP/AD lõiming", + "LDAP Connection" : "LDAP ühendus", + "Invalid LDAP UUIDs" : "Vigased LDAP UUID-d", + "None found" : "Mitte midagi ei leidu", + "_%n group found_::_%n groups found_" : ["Leidus %n grupp","Leidus %n gruppi"], + "> 1000 groups found" : "Leidus üle 1000 grupi", + "> 1000 users found" : "Leidus üle 1000 kasutaja", + "_%n user found_::_%n users found_" : ["Leidus %n kasutaja","Leidus %n kasutajat"], "Could not find the desired feature" : "Ei suuda leida soovitud funktsioonaalsust", "Invalid Host" : "Vigane server", "Test Configuration" : "Testi seadistust", @@ -53,12 +68,10 @@ "Only from these groups:" : "Ainult neist gruppidest:", "Search groups" : "Otsi gruppe", "Available groups" : "Saadaolevad grupid", - "Selected groups" : "Validut grupid", + "Selected groups" : "Valitud grupid", "Edit LDAP Query" : "Muuda LDAP päringut", "LDAP Filter:" : "LDAP filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filter määrab millised LDAP grupid saavad ligipääsu sellele %s instantsile.", - "LDAP / AD Username:" : "LDAP / AD kasutajanimi:", - "LDAP / AD Email Address:" : "LDAP / AD e-posti aadress:", "Other Attributes:" : "Muud atribuudid:", "Test Loginname" : "Testi kasutajanime", "Verify settings" : "Kontrolli seadeid", @@ -68,9 +81,9 @@ "Port" : "Port", "Detect Port" : "Tuvasta port", "User DN" : "Kasutaja 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." : "Klientkasutaja DN, kellega seotakse, nt. uid=agent,dc=näidis,dc=com. Anonüümseks ligipääsuks jäta DN ja parool tühjaks.", - "Password" : "Parool", - "For anonymous access, leave DN and Password empty." : "Anonüümseks ligipääsuks jäta DN ja parool tühjaks.", + "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." : "Klientkasutaja DN, kellega seotakse, nt. uid=agent,dc=näidis,dc=com. Anonüümseks ligipääsuks jäta DN ja salasõna tühjaks.", + "Password" : "Salasõna", + "For anonymous access, leave DN and Password empty." : "Anonüümseks ligipääsuks jäta DN ja salasõna tühjaks.", "Save Credentials" : "Salvesta kasutajaandmed", "One Base DN per line" : "Üks baas-DN rea kohta", "You can specify Base DN for users and groups in the Advanced tab" : "Sa saad kasutajate ja gruppide baas DN-i määrata lisavalikute vahekaardilt", @@ -84,13 +97,13 @@ "Saving" : "Salvestamine", "Back" : "Tagasi", "Continue" : "Jätka", - "Please renew your password." : "Palun uuenda oma parool.", + "Please renew your password." : "Palun uuenda oma salasõna.", "An internal error occurred." : "Tekkis sisemine tõrge.", "Please try again or contact your administrator." : "Proovi uuesti või võta ühendust administraatoriga.", - "Current password" : "Praegune parool", - "New password" : "Uus parool", - "Renew password" : "Uuenda parooli", - "Wrong password." : "Vale parool.", + "Current password" : "Praegune salasõna", + "New password" : "Uus salasõna", + "Renew password" : "Uuenda salasõna", + "Wrong password." : "Vale salasõna.", "Cancel" : "Loobu", "Server" : "Server", "Users" : "Kasutajad", @@ -99,8 +112,8 @@ "Expert" : "Ekspert", "Advanced" : "Täpsem", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Hoiatus:</b>PHP LDAP moodul pole paigaldatud ning LDAP kasutamine ei ole võimalik. Palu oma süsteeihaldurit see paigaldada.", - "Connection Settings" : "Ühenduse seaded", - "Configuration Active" : "Seadistus aktiivne", + "Connection Settings" : "Ühenduse seadistused", + "Configuration Active" : "Seadistus on aktiivne", "When unchecked, this configuration will be skipped." : "Kui on märkimata, siis seadistust ei kasutata.", "Backup (Replica) Host" : "Varuserver", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Lisa valikuline varuserver. See peab olema koopia peamisest LDAP/AD serverist.", @@ -142,6 +155,7 @@ "UUID Attribute for Groups:" : "UUID atribuut gruppidele:", "Username-LDAP User Mapping" : "LDAP-Kasutajatunnus Kasutaja Vastendus", "Clear Username-LDAP User Mapping" : "Puhasta LDAP-Kasutajatunnus Kasutaja Vastendus", - "Clear Groupname-LDAP Group Mapping" : "Puhasta LDAP-Grupinimi Grupp Vastendus" + "Clear Groupname-LDAP Group Mapping" : "Puhasta LDAP-Grupinimi Grupp Vastendus", + "Invalid configuration. Please have a look at the logs for further details." : "Vigane seadistus. Rohkema info jaoks vaadake logisid." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/eu.js b/apps/user_ldap/l10n/eu.js index 55506f3650a..0a488d9e0ba 100644 --- a/apps/user_ldap/l10n/eu.js +++ b/apps/user_ldap/l10n/eu.js @@ -6,11 +6,10 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Baliogabeko konfigurazioa. Lotura anonimoak ez dira onartzen.", "Valid configuration, connection established!" : "Baleko konfigurazioa, konexioa ezarri da!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Baleko konfigurazioa, baina lotura ez da ezarri. Egiaztatu zerbitzariaren ezarpenak eta kredentzialak.", - "Invalid configuration. Please have a look at the logs for further details." : "Baliogabeko konfigurazioa. Eman begirada bat egunkari-fitxategiei zehaztasun gehiagorako.", "No action specified" : "Ez da ekintzarik zehaztu", "No configuration specified" : "Ez da konfiguraziorik zehaztu", "No data specified" : "Ez da daturik zehaztu", - " Could not set configuration %s" : "Ezin izan da %s konfigurazioa ezarri", + "Invalid data specified" : "Zehaztutako datu baliogabeak", "Action does not exist" : "Ekintza ez da existitzen", "Renewing …" : "Berritzen ...", "Very weak password" : "Pasahitz oso ahula", @@ -41,48 +40,70 @@ OC.L10N.register( "Anonymous bind is not allowed. Please provide a User DN and Password." : "Lotura anonimoak ez dira onartzen. Eman erabiltzaile DN bat eta pasahitz bat.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP eragiketa errorea. Lotura anonimoa ez dago onartuta.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Gordetzeak huts egin du. Mesedez ziurtatu datu-basea funtzionatzen ari dela. Freskatu jarraitu baino lehen.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Modua aldatzeak LDAP eskaera automatikoak gaituko ditu. Zure LDAParen tamainaren arabera eskaera hauek denbora luzea eraman dezakete. Modua aldatu nahi duzu?", "Mode switch" : "Modu aldaketa", "Select attributes" : "Hautatu atributuak", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Erabiltzailea ez da aurkitu. Egiaztatu saioa hasteko atributuak eta erabiltzaile izena. Iragazki eraginkorra (kopiatu eta itsasteko komando-lerroa baliozkotzeko):<br/>", "User found and settings verified." : "Erabiltzailea aurkituta eta ezarpenak egiaztatutak.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Zure bilaketa murriztu dezakezu, erabiltzaile asko barne hartzen dituenez, horietatik lehenengoak bakarrik sartu ahal izango du.", "An unspecified error occurred. Please check log and settings." : "Zehaztu gabeko errore bat gertatu da. Mesedez egiaztatu log fitxategiak eta ezarpenak.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD konexio errore bat gertatu da, mesedez egiaztatu ostalaria, ataka eta kredentzialak.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Bilaketa iragazia baliogabea da, ziurrenik sintaxi arazoengatik, irekitako eta itxitako kortxeteen arteko kopuru desberdinengatik adibidez. Egiaztatu mesedez.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP/AD konexio errore bat gertatu da, mesedez egiaztatu ostalaria, ataka eta kredentzialak.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"%u id\" leku-marka falta da. LDAP/AD kontsultatzerakoan saioa hasteko izenarekin ordezkatuko da.", "Please provide a login name to test against" : "Mesedez saioa hasteko izen bat eman probatu ahal izateko", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Taldeen sarrera desgaitu da, LDAP / AD zerbitzariak ez duelako memberOf onartzen.", - "Password change rejected. Hint: " : "Pasahitz aldaketa ukatu da. Aholkua:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Taldeen sarrera desgaitu da, LDAP/AD zerbitzariak ez duelako memberOf onartzen.", "Please login with the new password" : "Mesedez hasi saioa pasahitz berriarekin", "LDAP User backend" : "LDAP erabiltzaileen atzealdea", "Your password will expire tomorrow." : "Zure pasahitza bihar iraungiko da.", "Your password will expire today." : "Zure pasahitza gaur iraungiko da.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Zure pasahitza egun %nean iraungiko da.","Zure pasahitza %n egunetan iraungiko da."], - "LDAP / AD integration" : "LDAP / AD integrazioa", - "_%s group found_::_%s groups found_" : ["Talde %s aurkitu da","%s talde aurkitu dira"], - "_%s user found_::_%s users found_" : ["Erabiltzaile %s aurkitu da","%s erabiltzaile aurkitu dira"], + "LDAP/AD integration" : "LDAP/AD integrazioa", + "LDAP Connection" : "LDAP konexioa", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Lotura egiteak huts egin du LDAP konfigurazio honentzat: %s","Lotura egiteak huts egin du %n LDAP konfigurazioentzat: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Bilaketak huts egin du LDAP konfigurazio honentzat: %s","Bilaketak huts egin du %n LDAP konfigurazioentzat: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Honako LDAP konfigurazioa inaktibo dago: %s","Honako %n LDAP konfigurazioak inaktibo daude: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Loturak eta bilaketak konfiguratutako LDAP konexioan funtzionatzen du (%s)","Loturak eta bilaketak konfiguratutako %n LDAP konexioetan funtzionatzen du (%s)"], + "Invalid LDAP UUIDs" : "Baliogabeko LDAP UUIDak", + "None found" : "Ez da batere aurkitu", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAP kontu edo taldeen UUID baliogabeak aurkitu dira. Mesedez, errebisatu zure \"Gainidatzi UUID antzematea\" ezarpena, adituentzako LDAP konfigurazioan, eta erabili \"occ ldap:update-uuid\" eguneratu daitezen.", + "_%n group found_::_%n groups found_" : ["Talde %n aurkitu da","%n talde aurkitu dira"], + "> 1000 groups found" : "> 1000 talde aurkitu dira", + "> 1000 users found" : "> 1000 erabiltzaile aurkitu dira", + "_%n user found_::_%n users found_" : ["Erabiltzaile %n aurkitu da","%n erabiltzaile aurkitu dira"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Ezin izan da antzeman erabiltzailearen bistaratze izenaren atributua. Mesedez, zehaztu zeure burua LDAP ezarpen aurreratuetan.", "Could not find the desired feature" : "Ezin izan da nahi zen ezaugarria aurkitu", "Invalid Host" : "Baliogabeko ostalaria", "LDAP user and group backend" : "LDAP erabiltzaile eta taldeen atzealdea", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aplikazio honi esker administratzaileek Nextcloud konektatu dezakete LDAPn oinarritutako erabiltzaile direktorio batera.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aplikazio honek administratzaileei aukera ematen die Nextcloud LDAP oinarritutako erabiltzaile direktorio batera konektatzeko, erabiltzaile, talde eta erabiltzaile atributuak autentifikatzeko eta hornitzeko. Administratzaileek aplikazio hau konfiguratu dezakete LDAP direktorio edo direktorio aktibo batera edo gehiagora konektatzeko LDAP interfaze baten bidez. Erabiltzaileen kuota, posta elektronikoa, avatarren argazkiak, taldeko kidetasunak eta halako atributu gehiago Nextcloud-era atera daitezke kontsulta eta iragazki egokiak dituen direktorio batetik.\n\nErabiltzaile batek Nextcloud-en saioa hasten du bere LDAP edo AD egiaztagiriekin, eta sarbidea ematen zaio LDAP edo AD zerbitzariak kudeatzen duen autentifikazio eskaera oinarritzat hartuta. Nextcloud-ek ez ditu LDAP edo AD pasahitzak gordetzen, kredentzial hauek erabiltzaile bat autentifikatzeko erabiltzen dira eta ondoren Nextcloud-ek saio bat erabiltzen du erabiltzaile IDarentzat. Informazio gehiago eskuragarri dago LDAP Erabiltzaile eta Taldearen atzealdeko dokumentazioan.", "Test Configuration" : "Probatu konfigurazioa", "Help" : "Laguntza", "Groups meeting these criteria are available in %s:" : "Baldintza horiek betetzen dituzten taldeak bertan eskuragarri %s:", "Only these object classes:" : "Bakarrik objektu klase hauetakoak:", "Only from these groups:" : "Bakarrik talde hauetakoak:", "Search groups" : "Bilatu taldeak", - "Available groups" : "Eskuragarri dauden taldeak", + "Available groups" : "Talde erabilgarriak", "Selected groups" : "Hautatuko taldeak", "Edit LDAP Query" : "Editatu LDAP kontsulta", "LDAP Filter:" : "LDAP Iragazkia:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Iragazkiak zehazten du ze LDAP taldek izango duten sarrera %s instantziara:", "Verify settings and count the groups" : "Egiaztatu ezarpetak eta zenbatu taldeak", "When logging in, %s will find the user based on the following attributes:" : "Saioa hastean, %s(e)k erabiltzailea bilatuko du atributu hauen arabera:", - "LDAP / AD Username:" : "LDAP / AD Erabiltzaile izena:", - "LDAP / AD Email Address:" : "LDAP / AD E-posta Helbidea:", + "LDAP/AD Username:" : "LDAP/AD erabiltzaile-izena:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/AD erabiltzaile izenarekin saioa hastea baimentzen du, hau da, \"uid\" edo \"sAMAccountName\", eta detektatu egingo da.", + "LDAP/AD Email Address:" : "LDAP/AD E-posta helbidea:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Posta elektronikoko atributu batekin saioa hastea baimentzen du. \"posta\" eta \"mailPrimaryAddress\" onartzen dira.", "Other Attributes:" : "Bestelako atributuak:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Saioa hasten denean aplikatu beharreko iragazkia definitzen du. \"%% uid\" -ek erabiltzaile izena ordezkatzen du saio hasierako ekintzan. Adibidez: \"uid = %% uid\"", "Test Loginname" : "Egiaztatu Saioa hasteko izena", + "Attempts to receive a DN for the given loginname and the current login filter" : "Emandako saio-izenaren eta uneko saio-hasiera-iragazkiaren DN bat jasotzeko saiakera", "Verify settings" : "Egiaztatu ezarpenak", "%s. Server:" : "%s. Zerbitzaria:", "Add a new configuration" : "Gehitu konfigurazio berri bat", "Copy current configuration into new directory binding" : "Kopiatu uneko konfigurazioa direktorio lotura berrian", "Delete the current configuration" : "Ezabatu uneko konfigurazioa", "Host" : "Ostalaria", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Protokoloa kendu dezakezu, SSL behar ez baduzu. Hala bada, hasi ldaps://--ekin", "Port" : "Ataka", "Detect Port" : "Antzeman Ataka", "User DN" : "Erabiltzaile DN", @@ -94,7 +115,10 @@ OC.L10N.register( "You can specify Base DN for users and groups in the Advanced tab" : "Erabiltzaile eta taldeentzako oinarrizko DNa zehaztu dezakezu Aurreratua fitxan", "Detect Base DN" : "Antzeman oinarrizko DNa", "Test Base DN" : "Egiaztatu oinarrizko DNa", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "LDAP eskaera automatikoak galarazten ditu. Hobea instalazio handiagoentzat, baina LDAP jakintza apur bat behar da.", "Manually enter LDAP filters (recommended for large directories)" : "Eskuz sartu LDAP iragazkiak (direktorio handietarako gomendatuta)", + "Listing and searching for users is constrained by these criteria:" : "Erabiltzaileen zerrendatze eta bilaketa irizpide hauek mugatuta daude:", + "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." : "Objektu klase komunenak erabiltzaileentzat organizationalPerson, person, user, eta inetOrgPerson dira. Zein objektu klase hautatu behar duzun ziur ez bazaude, mesedez kontsultatu zure direktorioaren administratzailearekin.", "The filter specifies which LDAP users shall have access to the %s instance." : "Iragazkiak zehazten du ze LDAP erabiltzailek izango duten sarrera %s instantziara:", "Verify settings and count users" : "Egiaztatu ezarpetak eta zenbatu erabiltzaileak", "Saving" : "Gordetzen", @@ -136,6 +160,8 @@ OC.L10N.register( "One User Base DN per line" : "Erabiltzaile DN oinarri bat lerroko", "User Search Attributes" : "Erabili Bilaketa Atributuak ", "Optional; one attribute per line" : "Aukerakoa; atributu bat lerro bakoitzeko", + "Disable users missing from LDAP" : "Desgaitu LDAPean ez dauden erabiltzaileak", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Gaitzean, ez dauden LDAPetik inportatutako erabiltzaileak desgaituko dira", "Group Display Name Field" : "Taldeen bistaratzeko izena duen eremua", "The LDAP attribute to use to generate the groups's display name." : "Taldearen bistaratze izena sortzeko erabiliko den LDAP atributua.", "Base Group Tree" : "Oinarrizko talde-zuhaitza", @@ -143,25 +169,61 @@ OC.L10N.register( "Group Search Attributes" : "Taldekatu Bilaketa Atributuak ", "Group-Member association" : "Talde-Kide elkarketak", "Dynamic Group Member URL" : "Taldekide URL dinamikoa", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Talde-objektuetan LDAP atributua taldeko objektuak zehazten dituen LDAP bilaketa URLa duena. (Ezarpen huts batek talde dinamikoko kideen funtzionalitatea desgaitzen du.)", "Nested Groups" : "Talde habiaratuak", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Piztuta dagoenean, taldeak dauzkaten taldeak onartzen dira. (Bakarrik taldeko kideen atributuak DNak baditu).", "Paging chunksize" : "Orrikatze zati-tamaina", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Erabiltzaile edo talde enumerazioak bezalako bolumen handiko erantzunak bueltatu ditzakeen orrialdekatutako LDAP bilaketen zatien tamaina. (0 ezartzeak orrialdekatutako LDAP bilaketak desgaitzen ditu egoera horietan.)", "Enable LDAP password changes per user" : "Gaitu LDAP pasahitz aldaketak erabiltzaileko", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Baimendu LDAP erabiltzaileei pasahitza aldatzea eta super administratzaileei eta taldeko administratzaileei LDAP erabiltzaileen pasahitza aldatzea. Sarbide kontroleko gidalerroak LDAP zerbitzarian behar bezala konfiguratuta daudenean bakarrik funtzionatzen du. Pasahitzak LDAP zerbitzarira testu arruntean bidaltzen direnez, garraio enkriptatzea erabili behar da eta pasahitzen hash-a konfiguratu behar da LDAP zerbitzarian.", "(New password is sent as plain text to LDAP)" : "(Pasahitz berria testu arruntean bidaltzen da LDAPera)", + "Default password policy DN" : "Pasahitz-gidalerro lehenetsia DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Pasahitzaren iraungitze-tratamendurako erabiliko den pasahitz-politika lehenetsiaren DNa. Erabiltzaile bakoitzeko LDAP pasahitz aldaketak gaituta daudenean eta OpenLDAPek soilik onartzen duenean bakarrik funtzionatzen du. Utzi hutsik pasahitzaren iraungitze-tratamendua desgaitzeko.", "Special Attributes" : "Atributu Bereziak", "Quota Field" : "Kuota Eremua", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Utzi hutsik erabiltzailearen lehenetsitako kuotarako. Bestela, zehaztu LDAP / AD atributu bat.", "Quota Default" : "Kuota Lehenetsia", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Gainidatzi kuota eremuan kuotarik ez duten LDAP erabiltzaileentzako kuota lehenetsia.", "Email Field" : "Eposta eremua", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Ezarri erabiltzailearen posta elektronikoa LDAP atribututik. Utzi hutsik portaera lehenetsirako.", "User Home Folder Naming Rule" : "Erabiltzailearen Karpeta Nagusia Izendatzeko Patroia", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Utzi hutsik erabiltzaile izenarako (lehentsia). Bestela zehaztu LDAP/AD atributua.", + "\"$home\" Placeholder Field" : "\"$home\" Leku-markaren eremua", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home kanpoko biltegiratze konfigurazio batean zehaztutako atributuaren balioarekin ordezkatuko da", + "User Profile Attributes" : "Erabiltzaile-profilaren ezaugarriak", + "Phone Field" : "Telefono eremua", + "User profile Phone will be set from the specified attribute" : "Erabiltzailearen profilaren Telefonoa zehaztutako ezaugarritik ezarriko da", + "Website Field" : "Webgune eremua", + "User profile Website will be set from the specified attribute" : "Erabiltzailearen profilaren Webgunea zehaztutako ezaugarritik ezarriko da", + "Address Field" : "Helbide eremua", + "User profile Address will be set from the specified attribute" : "Erabiltzailearen profilaren Helbidea zehaztutako ezaugarritik ezarriko da", + "Twitter Field" : "Twitter eremua", + "User profile Twitter will be set from the specified attribute" : "Erabiltzailearen profilaren Twitter-a zehaztutako ezaugarritik ezarriko da", + "Fediverse Field" : "Fedibertso eremua", + "User profile Fediverse will be set from the specified attribute" : "Erabiltzailearen profilaren Fedibertsoa zehaztutako ezaugarritik ezarriko da", + "Organisation Field" : "Erakunde eremua", + "User profile Organisation will be set from the specified attribute" : "Erabiltzailearen profilaren Erakundea zehaztutako ezaugarritik ezarriko da", + "Role Field" : "Rol eremua", + "User profile Role will be set from the specified attribute" : "Erabiltzailearen profilaren Rola zehaztutako ezaugarritik ezarriko da", + "Headline Field" : "Titulu-eremua", + "User profile Headline will be set from the specified attribute" : "Erabiltzailearen profilaren Titulua zehaztutako ezaugarritik ezarriko da", + "Biography Field" : "Biografia-eremua", + "User profile Biography will be set from the specified attribute" : "Erabiltzailearen profilaren Biografia zehaztutako ezaugarritik ezarriko da", + "Birthdate Field" : "Jaiotze data eremua", + "User profile Date of birth will be set from the specified attribute" : "Erabiltzailearen profila Jaiotze data zehaztutako atribututik ezarriko da", + "Pronouns Field" : "Izenordainen eremua", + "User profile Pronouns will be set from the specified attribute" : "Erabiltzailearen profilaren Izenordaina zehaztutako ezaugarritik ezarriko da", "Internal Username" : "Barneko erabiltzaile izena", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Modu lehenetsian barneko erabiltzaile-izena UUID atribututik sortuko da. Honek erabiltzaile-izena bakarra dela eta karaktereak bihurtu behar ez direla ziurtatzen du. Barneko erabiltzaile-izenak karaktere hauek soilik izan ditzake: [ a-zA-Z0-9_.@- ]. Beste karaktereak haien ASCII karaktereekin bihurtu edo guztiz kentzen dira. Kolisioa gertatzen den kasuetan zenbaki bat gehitu edo handituko da. Barneko erabiltzaile-izena erabiltzaile bat barnean identifikatzeko erabiltzen da. Erabiltzailearen etxeko karpetaren izen lehenetsia ere da. Kanpoko URLen parte ere da, adibidez *DAV zerbitzu guztientzako. Ezarpen honekin, lehenetsitako portaera aldatu daiteke. Utzi hutsik lehenetsitako portaerarako. Aldaketek mapatutako (gehitutako) LDAP erabiltzaile berriengan soilik izango du efektua.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Modu lehenetsian barneko erabiltzaile-izena UUID atribututik sortuko da. Honek erabiltzaile-izena bakarra dela eta karaktereak bihurtu behar ez direla ziurtatzen du. Barneko erabiltzaile-izenak karaktere hauek soilik izan ditzake: [ a-zA-Z0-9_.@- ]. Beste karaktereak haien ASCII karaktereekin bihurtu edo guztiz kentzen dira. Kolisioa gertatzen den kasuetan zenbaki bat gehitu edo handituko da. Barneko erabiltzaile-izena erabiltzaile bat barnean identifikatzeko erabiltzen da. Erabiltzailearen etxeko karpetaren izen lehenetsia ere da. Kanpoko URLen parte ere da, adibidez DAV zerbitzu guztientzako. Ezarpen honekin, lehenetsitako portaera aldatu daiteke. Aldaketek mapatutako (gehitutako) LDAP erabiltzaile berriengan soilik izango du efektua. Utzi hutsik lehenetsitako portaerarako.", "Internal Username Attribute:" : "Baliogabeko Erabiltzaile Izen atributua", "Override UUID detection" : "Gainidatzi UUID antzematea", "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." : "Era lehenetsian, UUID atributua automatikoki atzematen da. UUID atributua LDAP erabiltzaleak eta taldeak dudik gabe identifikatzeko erabiltzen da. Gainera, barneko erabiltzaile-izena UUID atributuan oinarritua sortuko da bestelakorik zehazten ez bada. Ezarpenak alda daitezke eta bestelako atributua jar daiteke. Ziur egon behar duzu hautatzen duzun atributua erabiltzaile eta taldeek eskura dezaketela eta bakarra dela. Jokabide lehenetsi gisa utz ezazu hutsik. Aldaketok soilik LDAP-n mapeatuko (gehituko) diren erabiltzaile eta taldeei eragingo die.", "UUID Attribute for Users:" : "Erabiltzaileentzako UUID atributuak:", "UUID Attribute for Groups:" : "Taldeentzako UUID atributuak:", "Username-LDAP User Mapping" : "LDAP-erabiltzaile-izena erabiltzailearen mapeatzea", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Erabiltzaile izenak metadatuak gordetzeko eta esleitzeko erabiltzen dira. Erabiltzaileak zehazki identifikatu eta ezagutzeko, LDAP erabiltzaile bakoitzak barne erabiltzaile izena izango du. Horretarako, erabiltzaile izenetik LDAP erabiltzailearen mapaketa egin behar da. Sortutako erabiltzaile izena LDAP erabiltzailearen UUIDarekin mapatuta dago. Gainera, DNa cache-an gordetzen da LDAP elkarreragina murrizteko, baina ez da identifikaziorako erabiltzen. DNa aldatzen bada, aldaketak topatuko dira. Barne erabiltzaile izena toki guztietan erabiltzen da. Kartografiak garbitzeak hondarrak izango ditu nonahi. Kartografiak garbitzea ez da konfigurazioarekiko sentikorra, LDAP konfigurazio guztiei eragiten die! Ez garbitu inoiz mapak ekoizpen-ingurune batean, soilik proba edo fase esperimental batean.", "Clear Username-LDAP User Mapping" : "Garbitu LDAP-erabiltzaile-izenaren erabiltzaile mapaketa", - "Clear Groupname-LDAP Group Mapping" : "Garbitu LDAP-talde-izenaren talde mapaketa" + "Clear Groupname-LDAP Group Mapping" : "Garbitu LDAP-talde-izenaren talde mapaketa", + "Invalid configuration. Please have a look at the logs for further details." : "Baliogabeko konfigurazioa. Eman begirada bat egunkari-fitxategiei zehaztasun gehiagorako." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/eu.json b/apps/user_ldap/l10n/eu.json index 397027d7233..b8a002b2f71 100644 --- a/apps/user_ldap/l10n/eu.json +++ b/apps/user_ldap/l10n/eu.json @@ -4,11 +4,10 @@ "Invalid configuration: Anonymous binding is not allowed." : "Baliogabeko konfigurazioa. Lotura anonimoak ez dira onartzen.", "Valid configuration, connection established!" : "Baleko konfigurazioa, konexioa ezarri da!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Baleko konfigurazioa, baina lotura ez da ezarri. Egiaztatu zerbitzariaren ezarpenak eta kredentzialak.", - "Invalid configuration. Please have a look at the logs for further details." : "Baliogabeko konfigurazioa. Eman begirada bat egunkari-fitxategiei zehaztasun gehiagorako.", "No action specified" : "Ez da ekintzarik zehaztu", "No configuration specified" : "Ez da konfiguraziorik zehaztu", "No data specified" : "Ez da daturik zehaztu", - " Could not set configuration %s" : "Ezin izan da %s konfigurazioa ezarri", + "Invalid data specified" : "Zehaztutako datu baliogabeak", "Action does not exist" : "Ekintza ez da existitzen", "Renewing …" : "Berritzen ...", "Very weak password" : "Pasahitz oso ahula", @@ -39,48 +38,70 @@ "Anonymous bind is not allowed. Please provide a User DN and Password." : "Lotura anonimoak ez dira onartzen. Eman erabiltzaile DN bat eta pasahitz bat.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP eragiketa errorea. Lotura anonimoa ez dago onartuta.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Gordetzeak huts egin du. Mesedez ziurtatu datu-basea funtzionatzen ari dela. Freskatu jarraitu baino lehen.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Modua aldatzeak LDAP eskaera automatikoak gaituko ditu. Zure LDAParen tamainaren arabera eskaera hauek denbora luzea eraman dezakete. Modua aldatu nahi duzu?", "Mode switch" : "Modu aldaketa", "Select attributes" : "Hautatu atributuak", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Erabiltzailea ez da aurkitu. Egiaztatu saioa hasteko atributuak eta erabiltzaile izena. Iragazki eraginkorra (kopiatu eta itsasteko komando-lerroa baliozkotzeko):<br/>", "User found and settings verified." : "Erabiltzailea aurkituta eta ezarpenak egiaztatutak.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Zure bilaketa murriztu dezakezu, erabiltzaile asko barne hartzen dituenez, horietatik lehenengoak bakarrik sartu ahal izango du.", "An unspecified error occurred. Please check log and settings." : "Zehaztu gabeko errore bat gertatu da. Mesedez egiaztatu log fitxategiak eta ezarpenak.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD konexio errore bat gertatu da, mesedez egiaztatu ostalaria, ataka eta kredentzialak.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Bilaketa iragazia baliogabea da, ziurrenik sintaxi arazoengatik, irekitako eta itxitako kortxeteen arteko kopuru desberdinengatik adibidez. Egiaztatu mesedez.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP/AD konexio errore bat gertatu da, mesedez egiaztatu ostalaria, ataka eta kredentzialak.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"%u id\" leku-marka falta da. LDAP/AD kontsultatzerakoan saioa hasteko izenarekin ordezkatuko da.", "Please provide a login name to test against" : "Mesedez saioa hasteko izen bat eman probatu ahal izateko", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Taldeen sarrera desgaitu da, LDAP / AD zerbitzariak ez duelako memberOf onartzen.", - "Password change rejected. Hint: " : "Pasahitz aldaketa ukatu da. Aholkua:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Taldeen sarrera desgaitu da, LDAP/AD zerbitzariak ez duelako memberOf onartzen.", "Please login with the new password" : "Mesedez hasi saioa pasahitz berriarekin", "LDAP User backend" : "LDAP erabiltzaileen atzealdea", "Your password will expire tomorrow." : "Zure pasahitza bihar iraungiko da.", "Your password will expire today." : "Zure pasahitza gaur iraungiko da.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Zure pasahitza egun %nean iraungiko da.","Zure pasahitza %n egunetan iraungiko da."], - "LDAP / AD integration" : "LDAP / AD integrazioa", - "_%s group found_::_%s groups found_" : ["Talde %s aurkitu da","%s talde aurkitu dira"], - "_%s user found_::_%s users found_" : ["Erabiltzaile %s aurkitu da","%s erabiltzaile aurkitu dira"], + "LDAP/AD integration" : "LDAP/AD integrazioa", + "LDAP Connection" : "LDAP konexioa", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Lotura egiteak huts egin du LDAP konfigurazio honentzat: %s","Lotura egiteak huts egin du %n LDAP konfigurazioentzat: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Bilaketak huts egin du LDAP konfigurazio honentzat: %s","Bilaketak huts egin du %n LDAP konfigurazioentzat: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Honako LDAP konfigurazioa inaktibo dago: %s","Honako %n LDAP konfigurazioak inaktibo daude: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Loturak eta bilaketak konfiguratutako LDAP konexioan funtzionatzen du (%s)","Loturak eta bilaketak konfiguratutako %n LDAP konexioetan funtzionatzen du (%s)"], + "Invalid LDAP UUIDs" : "Baliogabeko LDAP UUIDak", + "None found" : "Ez da batere aurkitu", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAP kontu edo taldeen UUID baliogabeak aurkitu dira. Mesedez, errebisatu zure \"Gainidatzi UUID antzematea\" ezarpena, adituentzako LDAP konfigurazioan, eta erabili \"occ ldap:update-uuid\" eguneratu daitezen.", + "_%n group found_::_%n groups found_" : ["Talde %n aurkitu da","%n talde aurkitu dira"], + "> 1000 groups found" : "> 1000 talde aurkitu dira", + "> 1000 users found" : "> 1000 erabiltzaile aurkitu dira", + "_%n user found_::_%n users found_" : ["Erabiltzaile %n aurkitu da","%n erabiltzaile aurkitu dira"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Ezin izan da antzeman erabiltzailearen bistaratze izenaren atributua. Mesedez, zehaztu zeure burua LDAP ezarpen aurreratuetan.", "Could not find the desired feature" : "Ezin izan da nahi zen ezaugarria aurkitu", "Invalid Host" : "Baliogabeko ostalaria", "LDAP user and group backend" : "LDAP erabiltzaile eta taldeen atzealdea", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aplikazio honi esker administratzaileek Nextcloud konektatu dezakete LDAPn oinarritutako erabiltzaile direktorio batera.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aplikazio honek administratzaileei aukera ematen die Nextcloud LDAP oinarritutako erabiltzaile direktorio batera konektatzeko, erabiltzaile, talde eta erabiltzaile atributuak autentifikatzeko eta hornitzeko. Administratzaileek aplikazio hau konfiguratu dezakete LDAP direktorio edo direktorio aktibo batera edo gehiagora konektatzeko LDAP interfaze baten bidez. Erabiltzaileen kuota, posta elektronikoa, avatarren argazkiak, taldeko kidetasunak eta halako atributu gehiago Nextcloud-era atera daitezke kontsulta eta iragazki egokiak dituen direktorio batetik.\n\nErabiltzaile batek Nextcloud-en saioa hasten du bere LDAP edo AD egiaztagiriekin, eta sarbidea ematen zaio LDAP edo AD zerbitzariak kudeatzen duen autentifikazio eskaera oinarritzat hartuta. Nextcloud-ek ez ditu LDAP edo AD pasahitzak gordetzen, kredentzial hauek erabiltzaile bat autentifikatzeko erabiltzen dira eta ondoren Nextcloud-ek saio bat erabiltzen du erabiltzaile IDarentzat. Informazio gehiago eskuragarri dago LDAP Erabiltzaile eta Taldearen atzealdeko dokumentazioan.", "Test Configuration" : "Probatu konfigurazioa", "Help" : "Laguntza", "Groups meeting these criteria are available in %s:" : "Baldintza horiek betetzen dituzten taldeak bertan eskuragarri %s:", "Only these object classes:" : "Bakarrik objektu klase hauetakoak:", "Only from these groups:" : "Bakarrik talde hauetakoak:", "Search groups" : "Bilatu taldeak", - "Available groups" : "Eskuragarri dauden taldeak", + "Available groups" : "Talde erabilgarriak", "Selected groups" : "Hautatuko taldeak", "Edit LDAP Query" : "Editatu LDAP kontsulta", "LDAP Filter:" : "LDAP Iragazkia:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Iragazkiak zehazten du ze LDAP taldek izango duten sarrera %s instantziara:", "Verify settings and count the groups" : "Egiaztatu ezarpetak eta zenbatu taldeak", "When logging in, %s will find the user based on the following attributes:" : "Saioa hastean, %s(e)k erabiltzailea bilatuko du atributu hauen arabera:", - "LDAP / AD Username:" : "LDAP / AD Erabiltzaile izena:", - "LDAP / AD Email Address:" : "LDAP / AD E-posta Helbidea:", + "LDAP/AD Username:" : "LDAP/AD erabiltzaile-izena:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/AD erabiltzaile izenarekin saioa hastea baimentzen du, hau da, \"uid\" edo \"sAMAccountName\", eta detektatu egingo da.", + "LDAP/AD Email Address:" : "LDAP/AD E-posta helbidea:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Posta elektronikoko atributu batekin saioa hastea baimentzen du. \"posta\" eta \"mailPrimaryAddress\" onartzen dira.", "Other Attributes:" : "Bestelako atributuak:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Saioa hasten denean aplikatu beharreko iragazkia definitzen du. \"%% uid\" -ek erabiltzaile izena ordezkatzen du saio hasierako ekintzan. Adibidez: \"uid = %% uid\"", "Test Loginname" : "Egiaztatu Saioa hasteko izena", + "Attempts to receive a DN for the given loginname and the current login filter" : "Emandako saio-izenaren eta uneko saio-hasiera-iragazkiaren DN bat jasotzeko saiakera", "Verify settings" : "Egiaztatu ezarpenak", "%s. Server:" : "%s. Zerbitzaria:", "Add a new configuration" : "Gehitu konfigurazio berri bat", "Copy current configuration into new directory binding" : "Kopiatu uneko konfigurazioa direktorio lotura berrian", "Delete the current configuration" : "Ezabatu uneko konfigurazioa", "Host" : "Ostalaria", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Protokoloa kendu dezakezu, SSL behar ez baduzu. Hala bada, hasi ldaps://--ekin", "Port" : "Ataka", "Detect Port" : "Antzeman Ataka", "User DN" : "Erabiltzaile DN", @@ -92,7 +113,10 @@ "You can specify Base DN for users and groups in the Advanced tab" : "Erabiltzaile eta taldeentzako oinarrizko DNa zehaztu dezakezu Aurreratua fitxan", "Detect Base DN" : "Antzeman oinarrizko DNa", "Test Base DN" : "Egiaztatu oinarrizko DNa", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "LDAP eskaera automatikoak galarazten ditu. Hobea instalazio handiagoentzat, baina LDAP jakintza apur bat behar da.", "Manually enter LDAP filters (recommended for large directories)" : "Eskuz sartu LDAP iragazkiak (direktorio handietarako gomendatuta)", + "Listing and searching for users is constrained by these criteria:" : "Erabiltzaileen zerrendatze eta bilaketa irizpide hauek mugatuta daude:", + "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." : "Objektu klase komunenak erabiltzaileentzat organizationalPerson, person, user, eta inetOrgPerson dira. Zein objektu klase hautatu behar duzun ziur ez bazaude, mesedez kontsultatu zure direktorioaren administratzailearekin.", "The filter specifies which LDAP users shall have access to the %s instance." : "Iragazkiak zehazten du ze LDAP erabiltzailek izango duten sarrera %s instantziara:", "Verify settings and count users" : "Egiaztatu ezarpetak eta zenbatu erabiltzaileak", "Saving" : "Gordetzen", @@ -134,6 +158,8 @@ "One User Base DN per line" : "Erabiltzaile DN oinarri bat lerroko", "User Search Attributes" : "Erabili Bilaketa Atributuak ", "Optional; one attribute per line" : "Aukerakoa; atributu bat lerro bakoitzeko", + "Disable users missing from LDAP" : "Desgaitu LDAPean ez dauden erabiltzaileak", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Gaitzean, ez dauden LDAPetik inportatutako erabiltzaileak desgaituko dira", "Group Display Name Field" : "Taldeen bistaratzeko izena duen eremua", "The LDAP attribute to use to generate the groups's display name." : "Taldearen bistaratze izena sortzeko erabiliko den LDAP atributua.", "Base Group Tree" : "Oinarrizko talde-zuhaitza", @@ -141,25 +167,61 @@ "Group Search Attributes" : "Taldekatu Bilaketa Atributuak ", "Group-Member association" : "Talde-Kide elkarketak", "Dynamic Group Member URL" : "Taldekide URL dinamikoa", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Talde-objektuetan LDAP atributua taldeko objektuak zehazten dituen LDAP bilaketa URLa duena. (Ezarpen huts batek talde dinamikoko kideen funtzionalitatea desgaitzen du.)", "Nested Groups" : "Talde habiaratuak", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Piztuta dagoenean, taldeak dauzkaten taldeak onartzen dira. (Bakarrik taldeko kideen atributuak DNak baditu).", "Paging chunksize" : "Orrikatze zati-tamaina", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Erabiltzaile edo talde enumerazioak bezalako bolumen handiko erantzunak bueltatu ditzakeen orrialdekatutako LDAP bilaketen zatien tamaina. (0 ezartzeak orrialdekatutako LDAP bilaketak desgaitzen ditu egoera horietan.)", "Enable LDAP password changes per user" : "Gaitu LDAP pasahitz aldaketak erabiltzaileko", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Baimendu LDAP erabiltzaileei pasahitza aldatzea eta super administratzaileei eta taldeko administratzaileei LDAP erabiltzaileen pasahitza aldatzea. Sarbide kontroleko gidalerroak LDAP zerbitzarian behar bezala konfiguratuta daudenean bakarrik funtzionatzen du. Pasahitzak LDAP zerbitzarira testu arruntean bidaltzen direnez, garraio enkriptatzea erabili behar da eta pasahitzen hash-a konfiguratu behar da LDAP zerbitzarian.", "(New password is sent as plain text to LDAP)" : "(Pasahitz berria testu arruntean bidaltzen da LDAPera)", + "Default password policy DN" : "Pasahitz-gidalerro lehenetsia DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Pasahitzaren iraungitze-tratamendurako erabiliko den pasahitz-politika lehenetsiaren DNa. Erabiltzaile bakoitzeko LDAP pasahitz aldaketak gaituta daudenean eta OpenLDAPek soilik onartzen duenean bakarrik funtzionatzen du. Utzi hutsik pasahitzaren iraungitze-tratamendua desgaitzeko.", "Special Attributes" : "Atributu Bereziak", "Quota Field" : "Kuota Eremua", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Utzi hutsik erabiltzailearen lehenetsitako kuotarako. Bestela, zehaztu LDAP / AD atributu bat.", "Quota Default" : "Kuota Lehenetsia", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Gainidatzi kuota eremuan kuotarik ez duten LDAP erabiltzaileentzako kuota lehenetsia.", "Email Field" : "Eposta eremua", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Ezarri erabiltzailearen posta elektronikoa LDAP atribututik. Utzi hutsik portaera lehenetsirako.", "User Home Folder Naming Rule" : "Erabiltzailearen Karpeta Nagusia Izendatzeko Patroia", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Utzi hutsik erabiltzaile izenarako (lehentsia). Bestela zehaztu LDAP/AD atributua.", + "\"$home\" Placeholder Field" : "\"$home\" Leku-markaren eremua", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home kanpoko biltegiratze konfigurazio batean zehaztutako atributuaren balioarekin ordezkatuko da", + "User Profile Attributes" : "Erabiltzaile-profilaren ezaugarriak", + "Phone Field" : "Telefono eremua", + "User profile Phone will be set from the specified attribute" : "Erabiltzailearen profilaren Telefonoa zehaztutako ezaugarritik ezarriko da", + "Website Field" : "Webgune eremua", + "User profile Website will be set from the specified attribute" : "Erabiltzailearen profilaren Webgunea zehaztutako ezaugarritik ezarriko da", + "Address Field" : "Helbide eremua", + "User profile Address will be set from the specified attribute" : "Erabiltzailearen profilaren Helbidea zehaztutako ezaugarritik ezarriko da", + "Twitter Field" : "Twitter eremua", + "User profile Twitter will be set from the specified attribute" : "Erabiltzailearen profilaren Twitter-a zehaztutako ezaugarritik ezarriko da", + "Fediverse Field" : "Fedibertso eremua", + "User profile Fediverse will be set from the specified attribute" : "Erabiltzailearen profilaren Fedibertsoa zehaztutako ezaugarritik ezarriko da", + "Organisation Field" : "Erakunde eremua", + "User profile Organisation will be set from the specified attribute" : "Erabiltzailearen profilaren Erakundea zehaztutako ezaugarritik ezarriko da", + "Role Field" : "Rol eremua", + "User profile Role will be set from the specified attribute" : "Erabiltzailearen profilaren Rola zehaztutako ezaugarritik ezarriko da", + "Headline Field" : "Titulu-eremua", + "User profile Headline will be set from the specified attribute" : "Erabiltzailearen profilaren Titulua zehaztutako ezaugarritik ezarriko da", + "Biography Field" : "Biografia-eremua", + "User profile Biography will be set from the specified attribute" : "Erabiltzailearen profilaren Biografia zehaztutako ezaugarritik ezarriko da", + "Birthdate Field" : "Jaiotze data eremua", + "User profile Date of birth will be set from the specified attribute" : "Erabiltzailearen profila Jaiotze data zehaztutako atribututik ezarriko da", + "Pronouns Field" : "Izenordainen eremua", + "User profile Pronouns will be set from the specified attribute" : "Erabiltzailearen profilaren Izenordaina zehaztutako ezaugarritik ezarriko da", "Internal Username" : "Barneko erabiltzaile izena", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Modu lehenetsian barneko erabiltzaile-izena UUID atribututik sortuko da. Honek erabiltzaile-izena bakarra dela eta karaktereak bihurtu behar ez direla ziurtatzen du. Barneko erabiltzaile-izenak karaktere hauek soilik izan ditzake: [ a-zA-Z0-9_.@- ]. Beste karaktereak haien ASCII karaktereekin bihurtu edo guztiz kentzen dira. Kolisioa gertatzen den kasuetan zenbaki bat gehitu edo handituko da. Barneko erabiltzaile-izena erabiltzaile bat barnean identifikatzeko erabiltzen da. Erabiltzailearen etxeko karpetaren izen lehenetsia ere da. Kanpoko URLen parte ere da, adibidez *DAV zerbitzu guztientzako. Ezarpen honekin, lehenetsitako portaera aldatu daiteke. Utzi hutsik lehenetsitako portaerarako. Aldaketek mapatutako (gehitutako) LDAP erabiltzaile berriengan soilik izango du efektua.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Modu lehenetsian barneko erabiltzaile-izena UUID atribututik sortuko da. Honek erabiltzaile-izena bakarra dela eta karaktereak bihurtu behar ez direla ziurtatzen du. Barneko erabiltzaile-izenak karaktere hauek soilik izan ditzake: [ a-zA-Z0-9_.@- ]. Beste karaktereak haien ASCII karaktereekin bihurtu edo guztiz kentzen dira. Kolisioa gertatzen den kasuetan zenbaki bat gehitu edo handituko da. Barneko erabiltzaile-izena erabiltzaile bat barnean identifikatzeko erabiltzen da. Erabiltzailearen etxeko karpetaren izen lehenetsia ere da. Kanpoko URLen parte ere da, adibidez DAV zerbitzu guztientzako. Ezarpen honekin, lehenetsitako portaera aldatu daiteke. Aldaketek mapatutako (gehitutako) LDAP erabiltzaile berriengan soilik izango du efektua. Utzi hutsik lehenetsitako portaerarako.", "Internal Username Attribute:" : "Baliogabeko Erabiltzaile Izen atributua", "Override UUID detection" : "Gainidatzi UUID antzematea", "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." : "Era lehenetsian, UUID atributua automatikoki atzematen da. UUID atributua LDAP erabiltzaleak eta taldeak dudik gabe identifikatzeko erabiltzen da. Gainera, barneko erabiltzaile-izena UUID atributuan oinarritua sortuko da bestelakorik zehazten ez bada. Ezarpenak alda daitezke eta bestelako atributua jar daiteke. Ziur egon behar duzu hautatzen duzun atributua erabiltzaile eta taldeek eskura dezaketela eta bakarra dela. Jokabide lehenetsi gisa utz ezazu hutsik. Aldaketok soilik LDAP-n mapeatuko (gehituko) diren erabiltzaile eta taldeei eragingo die.", "UUID Attribute for Users:" : "Erabiltzaileentzako UUID atributuak:", "UUID Attribute for Groups:" : "Taldeentzako UUID atributuak:", "Username-LDAP User Mapping" : "LDAP-erabiltzaile-izena erabiltzailearen mapeatzea", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Erabiltzaile izenak metadatuak gordetzeko eta esleitzeko erabiltzen dira. Erabiltzaileak zehazki identifikatu eta ezagutzeko, LDAP erabiltzaile bakoitzak barne erabiltzaile izena izango du. Horretarako, erabiltzaile izenetik LDAP erabiltzailearen mapaketa egin behar da. Sortutako erabiltzaile izena LDAP erabiltzailearen UUIDarekin mapatuta dago. Gainera, DNa cache-an gordetzen da LDAP elkarreragina murrizteko, baina ez da identifikaziorako erabiltzen. DNa aldatzen bada, aldaketak topatuko dira. Barne erabiltzaile izena toki guztietan erabiltzen da. Kartografiak garbitzeak hondarrak izango ditu nonahi. Kartografiak garbitzea ez da konfigurazioarekiko sentikorra, LDAP konfigurazio guztiei eragiten die! Ez garbitu inoiz mapak ekoizpen-ingurune batean, soilik proba edo fase esperimental batean.", "Clear Username-LDAP User Mapping" : "Garbitu LDAP-erabiltzaile-izenaren erabiltzaile mapaketa", - "Clear Groupname-LDAP Group Mapping" : "Garbitu LDAP-talde-izenaren talde mapaketa" + "Clear Groupname-LDAP Group Mapping" : "Garbitu LDAP-talde-izenaren talde mapaketa", + "Invalid configuration. Please have a look at the logs for further details." : "Baliogabeko konfigurazioa. Eman begirada bat egunkari-fitxategiei zehaztasun gehiagorako." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/fa.js b/apps/user_ldap/l10n/fa.js index 082f297f98f..6d0867258b1 100644 --- a/apps/user_ldap/l10n/fa.js +++ b/apps/user_ldap/l10n/fa.js @@ -3,88 +3,206 @@ OC.L10N.register( { "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." : "پیکربندی معتبراست، اما اتصال شکست خورد. لطفا تنظیمات و اعتبارهای سرور را بررسی کنید.", + "Invalid configuration: Anonymous binding is not allowed." : "Invalid configuration: Anonymous binding is not allowed.", + "Valid configuration, connection established!" : "Valid configuration, connection established!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Valid configuration, but binding failed. Please check the server settings and credentials.", "No action specified" : "فعالیتی مشخص نشده است", "No configuration specified" : "هیچ پیکربندی مشخص نشده است", "No data specified" : "داده ای مشخص نشده است", + "Invalid data specified" : "Invalid data specified", + "Action does not exist" : "Action does not exist", + "Renewing …" : "Renewing …", + "Very weak password" : "رمز عبور بسیار ضعیف", + "Weak password" : "رمز عبور ضعیف", + "So-so password" : "رمز عبور متوسط", + "Good password" : "رمز عبور خوب", + "Strong password" : "رمز عبور قوی", + "The Base DN appears to be wrong" : "The Base DN appears to be wrong", + "Testing configuration…" : "Testing configuration…", "Configuration incorrect" : "پیکربندی نادرست است", "Configuration incomplete" : "پیکربندی کامل نیست", "Configuration OK" : "پیکربندی صحیح است", "Select groups" : "انتخاب گروه ها", "Select object classes" : "انتخاب کلاس های اشیا", + "Please check the credentials, they seem to be wrong." : "Please check the credentials, they seem to be wrong.", "Please specify the port, it could not be auto-detected." : "لطفا پورت را مشخص کنید، امکان تعیین خودکار وجود ندارد.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN could not be auto-detected, please revise credentials, host and port.", "Could not detect Base DN, please enter it manually." : "امکان شناسایی Base DN, وجود ندارد، لطفا بصورت دستی آنرا وارد کنید.", "{nthServer}. Server" : "سرور {nthServer}.", + "No object found in the given Base DN. Please revise." : "No object found in the given Base DN. Please revise.", + "More than 1,000 directory entries available." : "More than 1,000 directory entries available.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entry available within the provided Base DN","{objectsFound} entries available within the provided Base DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "An error occurred. Please check the Base DN, as well as connection settings and credentials.", "Do you really want to delete the current Server Configuration?" : "آیا واقعا می خواهید پیکربندی کنونی سرور را حذف کنید؟", "Confirm Deletion" : "تایید حذف", + "Mappings cleared successfully!" : "Mappings cleared successfully!", + "Error while clearing the mappings." : "Error while clearing the mappings.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous bind is not allowed. Please provide a User DN and Password.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP Operations error. Anonymous bind might not be allowed.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Saving failed. Please make sure the database is in Operation. Reload before continuing.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?", + "Mode switch" : "Mode switch", "Select attributes" : "انتخاب مشخصه ها", - "_%s group found_::_%s groups found_" : ["%s گروه بافت شد"], - "_%s user found_::_%s users found_" : ["%s کاربر بافت شد"], + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>", + "User found and settings verified." : "User found and settings verified.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in.", + "An unspecified error occurred. Please check log and settings." : "An unspecified error occurred. Please check log and settings.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "A connection error to LDAP/AD occurred. Please check host, port and credentials.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.", + "Please provide a login name to test against" : "Please provide a login name to test against", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "The group box was disabled, because the LDAP/AD server does not support memberOf.", + "Please login with the new password" : "Please login with the new password", + "LDAP User backend" : "LDAP User backend", + "Your password will expire tomorrow." : "Your password will expire tomorrow.", + "Your password will expire today." : "Your password will expire today.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Your password will expire within %n day.","Your password will expire within %n days."], + "LDAP/AD integration" : "LDAP/AD integration", + "_%n group found_::_%n groups found_" : ["%n group found","%n groups found"], + "> 1000 groups found" : "> 1000 groups found", + "> 1000 users found" : "> 1000 users found", + "_%n user found_::_%n users found_" : ["%n user found","%n users found"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings.", + "Could not find the desired feature" : "Could not find the desired feature", "Invalid Host" : "هاست نامعتبر است", - "Server" : "سرور", - "Users" : "کاربران", - "Groups" : "گروه ها", + "LDAP user and group backend" : "LDAP user and group backend", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "This application enables administrators to connect Nextcloud to an LDAP-based user directory.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation.", "Test Configuration" : "امتحان پیکربندی", - "Help" : "راهنما", + "Help" : "کمک", + "Groups meeting these criteria are available in %s:" : "Groups meeting these criteria are available in %s:", + "Only these object classes:" : "Only these object classes:", "Only from these groups:" : "تنها از این گروهها:", "Search groups" : "جستجوی گروهها", "Available groups" : "گروههای موجود", "Selected groups" : "گروههای انتخاب شده", + "Edit LDAP Query" : "Edit LDAP Query", "LDAP Filter:" : "فیلتر LDAP:", - "LDAP / AD Username:" : "نامکاربری LDAP / AD :", - "LDAP / AD Email Address:" : " آدرس ایمیل LDAP / AD :", + "The filter specifies which LDAP groups shall have access to the %s instance." : "The filter specifies which LDAP groups shall have access to the %s instance.", + "Verify settings and count the groups" : "Verify settings and count the groups", + "When logging in, %s will find the user based on the following attributes:" : "When logging in, %s will find the user based on the following attributes:", + "LDAP/AD Username:" : "LDAP/AD Username:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected.", + "LDAP/AD Email Address:" : "LDAP/AD Email Address:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed.", "Other Attributes:" : "مشخصه های دیگر:", - "1. Server" : "1. سرور", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"", + "Test Loginname" : "Test Loginname", + "Attempts to receive a DN for the given loginname and the current login filter" : "Attempts to receive a DN for the given loginname and the current login filter", + "Verify settings" : "تایید تنظیمات", "%s. Server:" : "%s. سرور:", + "Add a new configuration" : "Add a new configuration", + "Copy current configuration into new directory binding" : "Copy current configuration into new directory binding", + "Delete the current configuration" : "Delete the current configuration", "Host" : "میزبانی", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "You can omit the protocol, unless you require SSL. If so, start with ldaps://", "Port" : "درگاه", "Detect 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." : "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.", "Password" : "گذرواژه", "For anonymous access, leave DN and Password empty." : "برای دسترسی ناشناس، DN را رها نموده و رمزعبور را خالی بگذارید.", + "Save Credentials" : "Save Credentials", "One Base DN per line" : "یک پایه DN در هر خط", "You can specify Base DN for users and groups in the Advanced tab" : "شما می توانید پایه DN را برای کاربران و گروه ها در زبانه Advanced مشخص کنید.", + "Detect Base DN" : "Detect Base DN", "Test Base DN" : "تست DN پایه", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.", + "Manually enter LDAP filters (recommended for large directories)" : "Manually enter LDAP filters (recommended for large directories)", + "Listing and searching for users is constrained by these criteria:" : "Listing and searching for users is constrained by these criteria:", + "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." : "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.", + "The filter specifies which LDAP users shall have access to the %s instance." : "The filter specifies which LDAP users shall have access to the %s instance.", + "Verify settings and count users" : "تایید تنظیمات و تعداد کاربران", "Saving" : "درحال ذخیره", "Back" : "بازگشت", "Continue" : "ادامه", - "LDAP" : "LDAP", + "Please renew your password." : "Please renew your password.", + "An internal error occurred." : "یک اشتباه داخلی رخ داد.", + "Please try again or contact your administrator." : "لطفا مجددا تلاش کنید یا با مدیر سیستم تماس بگیرید.", + "Current password" : "گذرواژه کنونی", + "New password" : "گذرواژه جدید", + "Renew password" : "Renew password", + "Wrong password." : "گذرواژه اشتباه.", + "Cancel" : "لغو", + "Server" : "سرور", + "Users" : "کاربران", + "Login Attributes" : "Login Attributes", + "Groups" : "گروه ها", "Expert" : "حرفه ای", "Advanced" : "پیشرفته", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.", "Connection Settings" : "تنظیمات اتصال", "Configuration Active" : "پیکربندی فعال", "When unchecked, this configuration will be skipped." : "زمانیکه انتخاب نشود، این پیکربندی نادیده گرفته خواهد شد.", "Backup (Replica) Host" : "پشتیبان گیری (بدل) میزبان", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Give an optional backup host. It must be a replica of the main LDAP/AD server.", "Backup (Replica) Port" : "پشتیبان گیری (بدل) پورت", "Disable Main Server" : "غیر فعال کردن سرور اصلی", + "Only connect to the replica server." : "Only connect to the replica server.", "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." : "توصیه نمی شود، از آن فقط برای آزمایش استفاده کنید! اگر اتصال فقط با این گزینه کار می کند، گواهی SSL سرور LDAP را در %sسرور خود وارد کنید.", "Cache Time-To-Live" : "مدت زمان کش", + "in seconds. A change empties the cache." : "در چند ثانیه یک تغییر حافظه پنهان را خالی می کند.", "Directory Settings" : "تنظیمات پوشه", "User Display Name Field" : "فیلد نام کاربر", + "The LDAP attribute to use to generate the user's display name." : "The LDAP attribute to use to generate the user's display name.", + "2nd User Display Name Field" : "2nd User Display Name Field", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.", "Base User Tree" : "کاربر درخت پایه", "One User Base DN per line" : "یک کاربر پایه DN در هر خط", "User Search Attributes" : "ویژگی های جستجوی کاربر", "Optional; one attribute per line" : "اختیاری؛ یک ویژگی در هر خط", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", "Group Display Name Field" : "فیلد نام گروه", + "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the groups's display name.", "Base Group Tree" : "گروه درخت پایه ", "One Group Base DN per line" : "یک گروه پایه DN در هر خط", "Group Search Attributes" : "گروه صفات جستجو", "Group-Member association" : "انجمن گروه کاربران", + "Dynamic Group Member URL" : "Dynamic Group Member URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)", "Nested Groups" : "گروههای زیرمجموعه", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)", + "Paging chunksize" : "Paging chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)", + "Enable LDAP password changes per user" : "Enable LDAP password changes per user", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.", + "(New password is sent as plain text to LDAP)" : "(New password is sent as plain text to LDAP)", + "Default password policy DN" : "Default password policy DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.", "Special Attributes" : "ویژگی های مخصوص", "Quota Field" : "سهمیه بندی انجام نشد.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute.", "Quota Default" : "سهمیه بندی پیش فرض", - "in bytes" : "در بایت", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Override default quota for LDAP users who do not have a quota set in the Quota Field.", "Email Field" : "ایمیل ارسال نشد.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Set the user's email from their LDAP attribute. Leave it empty for default behaviour.", "User Home Folder Naming Rule" : "قانون نامگذاری پوشه خانه کاربر", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "خالی گذاشتن برای نام کاربری (پیش فرض). در غیر این صورت، تعیین یک ویژگی LDAP/AD.", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.", + "\"$home\" Placeholder Field" : "\"$home\" Placeholder Field", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in an external storage configuration will be replaced with the value of the specified attribute", + "User Profile Attributes" : "خصوصیات نمایهٔ کاربر", + "Phone Field" : "Phone Field", + "Website Field" : "Website Field", + "Address Field" : "Address Field", + "Twitter Field" : "Twitter Field", + "Fediverse Field" : "Fediverse Field", + "Organisation Field" : "Organisation Field", + "Role Field" : "Role Field", + "Headline Field" : "Headline Field", + "Biography Field" : "Biography Field", "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.", "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." : "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.", "UUID Attribute for Users:" : "UUID ویژگی برای کاربران:", + "UUID Attribute for Groups:" : "UUID Attribute for Groups:", "Username-LDAP User Mapping" : "نام کاربری - نگاشت کاربر LDAP ", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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.", "Clear Username-LDAP User Mapping" : "پاک کردن نام کاربری- LDAP نگاشت کاربر ", - "Clear Groupname-LDAP Group Mapping" : "پاک کردن نام گروه -LDAP گروه نقشه برداری" + "Clear Groupname-LDAP Group Mapping" : "پاک کردن نام گروه -LDAP گروه نقشه برداری", + "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details." }, -"nplurals=1; plural=0;"); +"nplurals=2; plural=(n > 1);"); diff --git a/apps/user_ldap/l10n/fa.json b/apps/user_ldap/l10n/fa.json index 7a8b3e8212e..a49ee8313c3 100644 --- a/apps/user_ldap/l10n/fa.json +++ b/apps/user_ldap/l10n/fa.json @@ -1,88 +1,206 @@ { "translations": { "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." : "پیکربندی معتبراست، اما اتصال شکست خورد. لطفا تنظیمات و اعتبارهای سرور را بررسی کنید.", + "Invalid configuration: Anonymous binding is not allowed." : "Invalid configuration: Anonymous binding is not allowed.", + "Valid configuration, connection established!" : "Valid configuration, connection established!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Valid configuration, but binding failed. Please check the server settings and credentials.", "No action specified" : "فعالیتی مشخص نشده است", "No configuration specified" : "هیچ پیکربندی مشخص نشده است", "No data specified" : "داده ای مشخص نشده است", + "Invalid data specified" : "Invalid data specified", + "Action does not exist" : "Action does not exist", + "Renewing …" : "Renewing …", + "Very weak password" : "رمز عبور بسیار ضعیف", + "Weak password" : "رمز عبور ضعیف", + "So-so password" : "رمز عبور متوسط", + "Good password" : "رمز عبور خوب", + "Strong password" : "رمز عبور قوی", + "The Base DN appears to be wrong" : "The Base DN appears to be wrong", + "Testing configuration…" : "Testing configuration…", "Configuration incorrect" : "پیکربندی نادرست است", "Configuration incomplete" : "پیکربندی کامل نیست", "Configuration OK" : "پیکربندی صحیح است", "Select groups" : "انتخاب گروه ها", "Select object classes" : "انتخاب کلاس های اشیا", + "Please check the credentials, they seem to be wrong." : "Please check the credentials, they seem to be wrong.", "Please specify the port, it could not be auto-detected." : "لطفا پورت را مشخص کنید، امکان تعیین خودکار وجود ندارد.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN could not be auto-detected, please revise credentials, host and port.", "Could not detect Base DN, please enter it manually." : "امکان شناسایی Base DN, وجود ندارد، لطفا بصورت دستی آنرا وارد کنید.", "{nthServer}. Server" : "سرور {nthServer}.", + "No object found in the given Base DN. Please revise." : "No object found in the given Base DN. Please revise.", + "More than 1,000 directory entries available." : "More than 1,000 directory entries available.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entry available within the provided Base DN","{objectsFound} entries available within the provided Base DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "An error occurred. Please check the Base DN, as well as connection settings and credentials.", "Do you really want to delete the current Server Configuration?" : "آیا واقعا می خواهید پیکربندی کنونی سرور را حذف کنید؟", "Confirm Deletion" : "تایید حذف", + "Mappings cleared successfully!" : "Mappings cleared successfully!", + "Error while clearing the mappings." : "Error while clearing the mappings.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous bind is not allowed. Please provide a User DN and Password.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP Operations error. Anonymous bind might not be allowed.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Saving failed. Please make sure the database is in Operation. Reload before continuing.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?", + "Mode switch" : "Mode switch", "Select attributes" : "انتخاب مشخصه ها", - "_%s group found_::_%s groups found_" : ["%s گروه بافت شد"], - "_%s user found_::_%s users found_" : ["%s کاربر بافت شد"], + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>", + "User found and settings verified." : "User found and settings verified.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in.", + "An unspecified error occurred. Please check log and settings." : "An unspecified error occurred. Please check log and settings.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "A connection error to LDAP/AD occurred. Please check host, port and credentials.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.", + "Please provide a login name to test against" : "Please provide a login name to test against", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "The group box was disabled, because the LDAP/AD server does not support memberOf.", + "Please login with the new password" : "Please login with the new password", + "LDAP User backend" : "LDAP User backend", + "Your password will expire tomorrow." : "Your password will expire tomorrow.", + "Your password will expire today." : "Your password will expire today.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Your password will expire within %n day.","Your password will expire within %n days."], + "LDAP/AD integration" : "LDAP/AD integration", + "_%n group found_::_%n groups found_" : ["%n group found","%n groups found"], + "> 1000 groups found" : "> 1000 groups found", + "> 1000 users found" : "> 1000 users found", + "_%n user found_::_%n users found_" : ["%n user found","%n users found"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings.", + "Could not find the desired feature" : "Could not find the desired feature", "Invalid Host" : "هاست نامعتبر است", - "Server" : "سرور", - "Users" : "کاربران", - "Groups" : "گروه ها", + "LDAP user and group backend" : "LDAP user and group backend", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "This application enables administrators to connect Nextcloud to an LDAP-based user directory.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation.", "Test Configuration" : "امتحان پیکربندی", - "Help" : "راهنما", + "Help" : "کمک", + "Groups meeting these criteria are available in %s:" : "Groups meeting these criteria are available in %s:", + "Only these object classes:" : "Only these object classes:", "Only from these groups:" : "تنها از این گروهها:", "Search groups" : "جستجوی گروهها", "Available groups" : "گروههای موجود", "Selected groups" : "گروههای انتخاب شده", + "Edit LDAP Query" : "Edit LDAP Query", "LDAP Filter:" : "فیلتر LDAP:", - "LDAP / AD Username:" : "نامکاربری LDAP / AD :", - "LDAP / AD Email Address:" : " آدرس ایمیل LDAP / AD :", + "The filter specifies which LDAP groups shall have access to the %s instance." : "The filter specifies which LDAP groups shall have access to the %s instance.", + "Verify settings and count the groups" : "Verify settings and count the groups", + "When logging in, %s will find the user based on the following attributes:" : "When logging in, %s will find the user based on the following attributes:", + "LDAP/AD Username:" : "LDAP/AD Username:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected.", + "LDAP/AD Email Address:" : "LDAP/AD Email Address:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed.", "Other Attributes:" : "مشخصه های دیگر:", - "1. Server" : "1. سرور", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"", + "Test Loginname" : "Test Loginname", + "Attempts to receive a DN for the given loginname and the current login filter" : "Attempts to receive a DN for the given loginname and the current login filter", + "Verify settings" : "تایید تنظیمات", "%s. Server:" : "%s. سرور:", + "Add a new configuration" : "Add a new configuration", + "Copy current configuration into new directory binding" : "Copy current configuration into new directory binding", + "Delete the current configuration" : "Delete the current configuration", "Host" : "میزبانی", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "You can omit the protocol, unless you require SSL. If so, start with ldaps://", "Port" : "درگاه", "Detect 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." : "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.", "Password" : "گذرواژه", "For anonymous access, leave DN and Password empty." : "برای دسترسی ناشناس، DN را رها نموده و رمزعبور را خالی بگذارید.", + "Save Credentials" : "Save Credentials", "One Base DN per line" : "یک پایه DN در هر خط", "You can specify Base DN for users and groups in the Advanced tab" : "شما می توانید پایه DN را برای کاربران و گروه ها در زبانه Advanced مشخص کنید.", + "Detect Base DN" : "Detect Base DN", "Test Base DN" : "تست DN پایه", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.", + "Manually enter LDAP filters (recommended for large directories)" : "Manually enter LDAP filters (recommended for large directories)", + "Listing and searching for users is constrained by these criteria:" : "Listing and searching for users is constrained by these criteria:", + "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." : "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.", + "The filter specifies which LDAP users shall have access to the %s instance." : "The filter specifies which LDAP users shall have access to the %s instance.", + "Verify settings and count users" : "تایید تنظیمات و تعداد کاربران", "Saving" : "درحال ذخیره", "Back" : "بازگشت", "Continue" : "ادامه", - "LDAP" : "LDAP", + "Please renew your password." : "Please renew your password.", + "An internal error occurred." : "یک اشتباه داخلی رخ داد.", + "Please try again or contact your administrator." : "لطفا مجددا تلاش کنید یا با مدیر سیستم تماس بگیرید.", + "Current password" : "گذرواژه کنونی", + "New password" : "گذرواژه جدید", + "Renew password" : "Renew password", + "Wrong password." : "گذرواژه اشتباه.", + "Cancel" : "لغو", + "Server" : "سرور", + "Users" : "کاربران", + "Login Attributes" : "Login Attributes", + "Groups" : "گروه ها", "Expert" : "حرفه ای", "Advanced" : "پیشرفته", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.", "Connection Settings" : "تنظیمات اتصال", "Configuration Active" : "پیکربندی فعال", "When unchecked, this configuration will be skipped." : "زمانیکه انتخاب نشود، این پیکربندی نادیده گرفته خواهد شد.", "Backup (Replica) Host" : "پشتیبان گیری (بدل) میزبان", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Give an optional backup host. It must be a replica of the main LDAP/AD server.", "Backup (Replica) Port" : "پشتیبان گیری (بدل) پورت", "Disable Main Server" : "غیر فعال کردن سرور اصلی", + "Only connect to the replica server." : "Only connect to the replica server.", "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." : "توصیه نمی شود، از آن فقط برای آزمایش استفاده کنید! اگر اتصال فقط با این گزینه کار می کند، گواهی SSL سرور LDAP را در %sسرور خود وارد کنید.", "Cache Time-To-Live" : "مدت زمان کش", + "in seconds. A change empties the cache." : "در چند ثانیه یک تغییر حافظه پنهان را خالی می کند.", "Directory Settings" : "تنظیمات پوشه", "User Display Name Field" : "فیلد نام کاربر", + "The LDAP attribute to use to generate the user's display name." : "The LDAP attribute to use to generate the user's display name.", + "2nd User Display Name Field" : "2nd User Display Name Field", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.", "Base User Tree" : "کاربر درخت پایه", "One User Base DN per line" : "یک کاربر پایه DN در هر خط", "User Search Attributes" : "ویژگی های جستجوی کاربر", "Optional; one attribute per line" : "اختیاری؛ یک ویژگی در هر خط", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", "Group Display Name Field" : "فیلد نام گروه", + "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the groups's display name.", "Base Group Tree" : "گروه درخت پایه ", "One Group Base DN per line" : "یک گروه پایه DN در هر خط", "Group Search Attributes" : "گروه صفات جستجو", "Group-Member association" : "انجمن گروه کاربران", + "Dynamic Group Member URL" : "Dynamic Group Member URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)", "Nested Groups" : "گروههای زیرمجموعه", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)", + "Paging chunksize" : "Paging chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)", + "Enable LDAP password changes per user" : "Enable LDAP password changes per user", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.", + "(New password is sent as plain text to LDAP)" : "(New password is sent as plain text to LDAP)", + "Default password policy DN" : "Default password policy DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.", "Special Attributes" : "ویژگی های مخصوص", "Quota Field" : "سهمیه بندی انجام نشد.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute.", "Quota Default" : "سهمیه بندی پیش فرض", - "in bytes" : "در بایت", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Override default quota for LDAP users who do not have a quota set in the Quota Field.", "Email Field" : "ایمیل ارسال نشد.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Set the user's email from their LDAP attribute. Leave it empty for default behaviour.", "User Home Folder Naming Rule" : "قانون نامگذاری پوشه خانه کاربر", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "خالی گذاشتن برای نام کاربری (پیش فرض). در غیر این صورت، تعیین یک ویژگی LDAP/AD.", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.", + "\"$home\" Placeholder Field" : "\"$home\" Placeholder Field", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in an external storage configuration will be replaced with the value of the specified attribute", + "User Profile Attributes" : "خصوصیات نمایهٔ کاربر", + "Phone Field" : "Phone Field", + "Website Field" : "Website Field", + "Address Field" : "Address Field", + "Twitter Field" : "Twitter Field", + "Fediverse Field" : "Fediverse Field", + "Organisation Field" : "Organisation Field", + "Role Field" : "Role Field", + "Headline Field" : "Headline Field", + "Biography Field" : "Biography Field", "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.", "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." : "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.", "UUID Attribute for Users:" : "UUID ویژگی برای کاربران:", + "UUID Attribute for Groups:" : "UUID Attribute for Groups:", "Username-LDAP User Mapping" : "نام کاربری - نگاشت کاربر LDAP ", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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.", "Clear Username-LDAP User Mapping" : "پاک کردن نام کاربری- LDAP نگاشت کاربر ", - "Clear Groupname-LDAP Group Mapping" : "پاک کردن نام گروه -LDAP گروه نقشه برداری" -},"pluralForm" :"nplurals=1; plural=0;" + "Clear Groupname-LDAP Group Mapping" : "پاک کردن نام گروه -LDAP گروه نقشه برداری", + "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details." +},"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/fi_FI.js b/apps/user_ldap/l10n/fi_FI.js deleted file mode 100644 index e10a9f17559..00000000000 --- a/apps/user_ldap/l10n/fi_FI.js +++ /dev/null @@ -1,81 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to delete the server configuration" : "Palvelinmäärityksen poistaminen epäonnistui", - "The configuration is valid and the connection could be established!" : "Määritys on kelvollinen ja yhteys kyettiin muodostamaan!", - "The configuration is invalid. Please have a look at the logs for further details." : "Määritykset ovat väärin. Tarkista loki saadaksesi lisätietoja.", - "No action specified" : "Toimintoa ei määritetty", - "Action does not exist" : "Toimintoa ei ole olemassa.", - "Configuration incorrect" : "Määritykset väärin", - "Configuration incomplete" : "Määritykset puutteelliset", - "Configuration OK" : "Määritykset OK", - "Select groups" : "Valitse ryhmät", - "Please check the credentials, they seem to be wrong." : "Tarkista kirjautumistiedot, ne vaikuttavat olevan väärin.", - "Please specify the port, it could not be auto-detected." : "Määritä portti, sitä ei kyetty havaitsemaan automaattisesti.", - "More than 1,000 directory entries available." : "Yli 1000 hakemistotietuetta saatavilla.", - "Do you really want to delete the current Server Configuration?" : "Haluatko varmasti poistaa nykyisen palvelinmäärityksen?", - "Confirm Deletion" : "Vahvista poisto", - "User found and settings verified." : "Käyttäjä löytyi ja asetukset vahvistettiin.", - "An unspecified error occurred. Please check the settings and the log." : "Tapahtui määrittämätön virhe. Tarkista asetukset ja loki.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Yhteysvirhe LDAP:iin/AD:hen, tarkista palvelimen osoite, portti ja kirjautumistiedot.", - "_%s group found_::_%s groups found_" : ["%s ryhmä löytynyt","%s ryhmää löytynyt"], - "_%s user found_::_%s users found_" : ["%s käyttäjä löytynyt","%s käyttäjää löytynyt"], - "Server" : "Palvelin", - "Users" : "Käyttäjät", - "Groups" : "Ryhmät", - "Test Configuration" : "Testaa määritys", - "Help" : "Ohje", - "Search groups" : "Etsi ryhmiä", - "Available groups" : "Käytettävissä olevat ryhmät", - "Selected groups" : "Valitut ryhmät", - "Edit LDAP Query" : "Muokkaa LDAP-kyselyä", - "LDAP Filter:" : "LDAP-suodatin:", - "Verify settings and count groups" : "Vahvista asetukset ja laske ryhmät", - "LDAP / AD Username:" : "LDAP-/AD-käyttäjätunnus:", - "LDAP / AD Email Address:" : "LDAP-/AD-sähköpostiosoite:", - "Test Loginname" : "Testaa kirjautumisnimi", - "Verify settings" : "Vahvista asetukset", - "1. Server" : "1. Palvelin", - "%s. Server:" : "%s. Palvelin:", - "Add a new and blank configuration" : "Lisää uusi, tyhjä määritys", - "Delete the current configuration" : "Poista nykyinen määritys", - "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://", - "Port" : "Portti", - "Detect Port" : "Havaitse portti", - "User DN" : "Käyttäjän 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." : "Asiakasohjelman DN, jolla yhdistäminen tehdään, ts. uid=agent,dc=example,dc=com. Mahdollistaaksesi anonyymin yhteyden, jätä DN ja salasana tyhjäksi.", - "Password" : "Salasana", - "For anonymous access, leave DN and Password empty." : "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ", - "You can specify Base DN for users and groups in the Advanced tab" : "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset'-välilehdeltä ", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Välttää automaattisia LDAP-pyyntöjä. Sopiva suurille instansseille, mutta vaatii LDAP-tietoutta.", - "Manually enter LDAP filters (recommended for large directories)" : "Syötä LDAP-suodattimet manuaalisesti (suositeltu suurille hakemistoille)", - "Verify settings and count users" : "Vahvista asetukset ja laske käyttäjät", - "Saving" : "Tallennetaan", - "Back" : "Takaisin", - "Continue" : "Jatka", - "LDAP" : "LDAP", - "Advanced" : "Lisäasetukset", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varoitus:</b> PHP:n LDAP-moduulia ei ole asennettu, taustaosa ei toimi. Pyydä järjestelmän ylläpitäjää asentamaan se.", - "Connection Settings" : "Yhteysasetukset", - "Backup (Replica) Host" : "Varmuuskopioinnin (replikointi) palvelin", - "Backup (Replica) Port" : "Varmuuskopioinnin (replikoinnin) portti", - "Disable Main Server" : "Poista pääpalvelin käytöstä", - "Only connect to the replica server." : "Yhdistä vain replikointipalvelimeen.", - "Turn off SSL certificate validation." : "Poista käytöstä SSL-varmenteen vahvistus", - "in seconds. A change empties the cache." : "sekunneissa. Muutos tyhjentää välimuistin.", - "Directory Settings" : "Hakemistoasetukset", - "User Display Name Field" : "Käyttäjän näytettävän nimen kenttä", - "Base User Tree" : "Oletuskäyttäjäpuu", - "Group Display Name Field" : "Ryhmän \"näytettävä nimi\"-kenttä", - "Base Group Tree" : "Ryhmien juuri", - "Group-Member association" : "Ryhmän ja jäsenen assosiaatio (yhteys)", - "Quota Field" : "Kiintiökenttä", - "Quota Default" : "Oletuskiintiö", - "in bytes" : "tavuissa", - "Email Field" : "Sähköpostikenttä", - "User Home Folder Naming Rule" : "Käyttäjän kotihakemiston nimeämissääntö", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Jätä tyhjäksi käyttäjänimi (oletusasetus). Muutoin anna LDAP/AD-atribuutti.", - "Internal Username" : "Sisäinen käyttäjänimi" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/fi_FI.json b/apps/user_ldap/l10n/fi_FI.json deleted file mode 100644 index 8abef4f8585..00000000000 --- a/apps/user_ldap/l10n/fi_FI.json +++ /dev/null @@ -1,79 +0,0 @@ -{ "translations": { - "Failed to delete the server configuration" : "Palvelinmäärityksen poistaminen epäonnistui", - "The configuration is valid and the connection could be established!" : "Määritys on kelvollinen ja yhteys kyettiin muodostamaan!", - "The configuration is invalid. Please have a look at the logs for further details." : "Määritykset ovat väärin. Tarkista loki saadaksesi lisätietoja.", - "No action specified" : "Toimintoa ei määritetty", - "Action does not exist" : "Toimintoa ei ole olemassa.", - "Configuration incorrect" : "Määritykset väärin", - "Configuration incomplete" : "Määritykset puutteelliset", - "Configuration OK" : "Määritykset OK", - "Select groups" : "Valitse ryhmät", - "Please check the credentials, they seem to be wrong." : "Tarkista kirjautumistiedot, ne vaikuttavat olevan väärin.", - "Please specify the port, it could not be auto-detected." : "Määritä portti, sitä ei kyetty havaitsemaan automaattisesti.", - "More than 1,000 directory entries available." : "Yli 1000 hakemistotietuetta saatavilla.", - "Do you really want to delete the current Server Configuration?" : "Haluatko varmasti poistaa nykyisen palvelinmäärityksen?", - "Confirm Deletion" : "Vahvista poisto", - "User found and settings verified." : "Käyttäjä löytyi ja asetukset vahvistettiin.", - "An unspecified error occurred. Please check the settings and the log." : "Tapahtui määrittämätön virhe. Tarkista asetukset ja loki.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Yhteysvirhe LDAP:iin/AD:hen, tarkista palvelimen osoite, portti ja kirjautumistiedot.", - "_%s group found_::_%s groups found_" : ["%s ryhmä löytynyt","%s ryhmää löytynyt"], - "_%s user found_::_%s users found_" : ["%s käyttäjä löytynyt","%s käyttäjää löytynyt"], - "Server" : "Palvelin", - "Users" : "Käyttäjät", - "Groups" : "Ryhmät", - "Test Configuration" : "Testaa määritys", - "Help" : "Ohje", - "Search groups" : "Etsi ryhmiä", - "Available groups" : "Käytettävissä olevat ryhmät", - "Selected groups" : "Valitut ryhmät", - "Edit LDAP Query" : "Muokkaa LDAP-kyselyä", - "LDAP Filter:" : "LDAP-suodatin:", - "Verify settings and count groups" : "Vahvista asetukset ja laske ryhmät", - "LDAP / AD Username:" : "LDAP-/AD-käyttäjätunnus:", - "LDAP / AD Email Address:" : "LDAP-/AD-sähköpostiosoite:", - "Test Loginname" : "Testaa kirjautumisnimi", - "Verify settings" : "Vahvista asetukset", - "1. Server" : "1. Palvelin", - "%s. Server:" : "%s. Palvelin:", - "Add a new and blank configuration" : "Lisää uusi, tyhjä määritys", - "Delete the current configuration" : "Poista nykyinen määritys", - "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://", - "Port" : "Portti", - "Detect Port" : "Havaitse portti", - "User DN" : "Käyttäjän 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." : "Asiakasohjelman DN, jolla yhdistäminen tehdään, ts. uid=agent,dc=example,dc=com. Mahdollistaaksesi anonyymin yhteyden, jätä DN ja salasana tyhjäksi.", - "Password" : "Salasana", - "For anonymous access, leave DN and Password empty." : "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ", - "You can specify Base DN for users and groups in the Advanced tab" : "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset'-välilehdeltä ", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Välttää automaattisia LDAP-pyyntöjä. Sopiva suurille instansseille, mutta vaatii LDAP-tietoutta.", - "Manually enter LDAP filters (recommended for large directories)" : "Syötä LDAP-suodattimet manuaalisesti (suositeltu suurille hakemistoille)", - "Verify settings and count users" : "Vahvista asetukset ja laske käyttäjät", - "Saving" : "Tallennetaan", - "Back" : "Takaisin", - "Continue" : "Jatka", - "LDAP" : "LDAP", - "Advanced" : "Lisäasetukset", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varoitus:</b> PHP:n LDAP-moduulia ei ole asennettu, taustaosa ei toimi. Pyydä järjestelmän ylläpitäjää asentamaan se.", - "Connection Settings" : "Yhteysasetukset", - "Backup (Replica) Host" : "Varmuuskopioinnin (replikointi) palvelin", - "Backup (Replica) Port" : "Varmuuskopioinnin (replikoinnin) portti", - "Disable Main Server" : "Poista pääpalvelin käytöstä", - "Only connect to the replica server." : "Yhdistä vain replikointipalvelimeen.", - "Turn off SSL certificate validation." : "Poista käytöstä SSL-varmenteen vahvistus", - "in seconds. A change empties the cache." : "sekunneissa. Muutos tyhjentää välimuistin.", - "Directory Settings" : "Hakemistoasetukset", - "User Display Name Field" : "Käyttäjän näytettävän nimen kenttä", - "Base User Tree" : "Oletuskäyttäjäpuu", - "Group Display Name Field" : "Ryhmän \"näytettävä nimi\"-kenttä", - "Base Group Tree" : "Ryhmien juuri", - "Group-Member association" : "Ryhmän ja jäsenen assosiaatio (yhteys)", - "Quota Field" : "Kiintiökenttä", - "Quota Default" : "Oletuskiintiö", - "in bytes" : "tavuissa", - "Email Field" : "Sähköpostikenttä", - "User Home Folder Naming Rule" : "Käyttäjän kotihakemiston nimeämissääntö", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Jätä tyhjäksi käyttäjänimi (oletusasetus). Muutoin anna LDAP/AD-atribuutti.", - "Internal Username" : "Sisäinen käyttäjänimi" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/fil.js b/apps/user_ldap/l10n/fil.js deleted file mode 100644 index ef3eeaef0cf..00000000000 --- a/apps/user_ldap/l10n/fil.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Help" : "Tulong", - "Password" : "Password" -}, -"nplurals=2; plural=(n > 1);"); diff --git a/apps/user_ldap/l10n/fil.json b/apps/user_ldap/l10n/fil.json deleted file mode 100644 index d31ca17d01c..00000000000 --- a/apps/user_ldap/l10n/fil.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "Help" : "Tulong", - "Password" : "Password" -},"pluralForm" :"nplurals=2; plural=(n > 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js index b6278808b70..8f5aaf91239 100644 --- a/apps/user_ldap/l10n/fr.js +++ b/apps/user_ldap/l10n/fr.js @@ -6,11 +6,12 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuration non valable : Le lien anonyme n'est pas autorisé.", "Valid configuration, connection established!" : "Configuration valide, connexion établie !", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuration valide, mais le lien a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuration non valide. Veuillez consulter les logs pour plus de détails.", + "Invalid configuration: %s" : "Configuration non valide : %s", "No action specified" : "Aucune action spécifiée", "No configuration specified" : "Aucune configuration spécifiée", "No data specified" : "Aucune donnée spécifiée", - " Could not set configuration %s" : "Impossible d'appliquer la configuration %s", + "Invalid data specified" : "Données spécifiées invalides", + "Could not set configuration %1$s to %2$s" : "Impossible de changer la configuration %1$s pour %2$s", "Action does not exist" : "L'action n'existe pas", "Renewing …" : "Renouvellement en cours...", "Very weak password" : "Mot de passe très faible", @@ -18,7 +19,7 @@ OC.L10N.register( "So-so password" : "Mot de passe tout juste acceptable", "Good password" : "Mot de passe de sécurité suffisante", "Strong password" : "Mot de passe fort", - "The Base DN appears to be wrong" : "Le DN de base est erroné", + "The Base DN appears to be wrong" : "Le DN de base semble être erroné", "Testing configuration…" : "Test de configuration", "Configuration incorrect" : "Configuration incorrecte", "Configuration incomplete" : "Configuration incomplète", @@ -32,8 +33,8 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Serveur", "No object found in the given Base DN. Please revise." : "Aucun objet trouvé dans le DN de base spécifié. Veuillez le vérifier.", "More than 1,000 directory entries available." : "Il y a plus de 1 000 entrées de répertoire disponibles.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrée disponible dans le DN de base spécifié","{objectsFound} entrées disponibles dans le DN de base spécifié"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Une erreur est survenue. Veuillez vérifier le DN de base, ainsi que les paramètres de connexion et les informations d'identification", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrée disponible dans le DN de base spécifié","{objectsFound} entrées disponibles dans le DN de base spécifié","{objectsFound} entrées disponibles dans le DN de base spécifié"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Une erreur est survenue. Veuillez vérifier le DN de base, ainsi que les paramètres de connexion et les informations d'identification.", "Do you really want to delete the current Server Configuration?" : "Êtes-vous sûr de vouloir effacer la configuration serveur actuelle ?", "Confirm Deletion" : "Confirmer la suppression", "Mappings cleared successfully!" : "Associations supprimées avec succès !", @@ -49,30 +50,47 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Veuillez affiner votre recherche, car elle inclue de nombreux utilisateurs. Seul le premier de cette liste sera capable de se connecter.", "An unspecified error occurred. Please check log and settings." : "Une erreur inconnue s'est produite. Veuillez vérifier le log et les paramètres.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Le filtre de recherche n'est pas valide, probablement à cause de problèmes de syntaxe tels que des parenthèses manquantes. Veuillez le corriger.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Une erreur s'est produite lors de la connexion au LDAP / AD. Veuillez vérifier l'hôte, le port et les informations d'identification.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "La chaîne \"%uid\" est manquante. Cette chaîne est remplacée par l'identifiant de connexion lors des requêtes LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Une erreur s'est produite lors de la connexion au LDAP/AD. Veuillez vérifier l'hôte, le port et les informations d'identification.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "La chaîne \"%uid\" est manquante. Cette chaîne est remplacée par l'identifiant de connexion lors des requêtes LDAP/AD.", "Please provide a login name to test against" : "Veuillez indiquer un identifiant de connexion avec lequel tester.", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Les groupes sont désactivés car le serveur LDAP / AD ne prend pas en charge memberOf.", - "Password change rejected. Hint: " : "La modification du mot de passe a été rejetée. Indice :", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Les groupes sont désactivés car le serveur LDAP/AD ne prend pas en charge memberOf.", + "Password change rejected. Hint: %s" : "Changement du mot de passe rejetée. Astuce : %s", + "Mandatory field \"%s\" left empty" : "Le champ obligatoire \"%s\" n'est pas renseigné", + "A password is given, but not an LDAP agent" : "Un mot de passe est indiqué, mais pas un agent LDAP", + "No password is given for the user agent" : "Aucun mot de passe n'est indiqué pour l'agent utilisateur", + "No LDAP base DN was given" : "Aucun DN de base LDAP n'a été indiqué", + "User base DN is not a subnode of global base DN" : "Le DN de base utilisateur n'est pas un sous-noeud du DN de base global", + "Group base DN is not a subnode of global base DN" : "Le DN de base du groupe n'est pas un sous-noeud du DN de base global", + "Login filter does not contain %s placeholder." : "Le filtre de connexion ne doit pas contenir l'élément de substitution %s", "Please login with the new password" : "Veuillez vous connecter avec le nouveau mot de passe", "LDAP User backend" : "Infrastructure utilisateur LDAP", "Your password will expire tomorrow." : "Votre mot de passe expirera demain", "Your password will expire today." : "Votre mot de passe va expirer aujourd'hui.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Votre mot de passe va expirer dans %n jour.","Votre mot de passe va expirer dans %n jours."], - "LDAP / AD integration" : "Intégration LDAP/AD", - "_%s group found_::_%s groups found_" : ["%s groupe trouvé","%s groupes trouvés"], - "_%s user found_::_%s users found_" : ["%s utilisateur trouvé","%s utilisateurs trouvés"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Votre mot de passe va expirer dans %n jour.","Votre mot de passe va expirer dans %n jours.","Votre mot de passe va expirer dans %n jours."], + "LDAP/AD integration" : "Intégration LDAP/AD", + "LDAP Connection" : "Connexion LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["La liaison a échoué pour cette configuration LDAP: %s","Échec de la liaison pour %n les configurations LDAP: %s","Échec de la liaison pour %n les configurations LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["La recherche a échoué pour cette configuration LDAP: %s","La recherche a échoué pour %n des configurations LDAP: %s","La recherche a échoué pour %n des configurations LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Il existe une configuration LDAP inactive: %s","Il y a %n configurations LDAP inactives: %s","Il y a %n configurations LDAP inactives: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["La liaison et la recherche fonctionnent sur la connexion LDAP configurée (%s)","La liaison et la recherche fonctionnent sur toutes les %n connexions LDAP configurées (%s)","La liaison et la recherche fonctionnent sur toutes les %n connexions LDAP configurées (%s)"], + "Invalid LDAP UUIDs" : "UUID LDAP invalides", + "None found" : "Aucun trouvé", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Des UUID invalides pour les comptes LDAP ont été trouvés. Merci de vérifier votre paramètre « Passer outre la détection des UUID » dans la partie Expert de la configuration LDAP puis utiliser « occ ldap:update-uuid » pour les mettre à jour.", + "_%n group found_::_%n groups found_" : ["%n groupe trouvé","%n groupes trouvés","%n groupes trouvés"], + "> 1000 groups found" : "> 1000 groupes trouvés", + "> 1000 users found" : "> 1000 utilisateurs trouvés", + "_%n user found_::_%n users found_" : ["%n utilisateur trouvé","%n utilisateurs trouvés","%n utilisateurs trouvés"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Impossible de détecter l'attribut contenant le nom d'affichage des utilisateurs. Veuillez l'indiquer vous-même dans les paramètres LDAP avancés.", "Could not find the desired feature" : "Impossible de trouver la fonction souhaitée", "Invalid Host" : "Hôte non valide", "LDAP user and group backend" : "Utilisateur LDAP et infrastructure de groupe", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Cette application autorise les administrateurs à connecter Nextcloud à un annuaire LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Cette application permet aux administrateurs de connecter Nextcloud à un répertoire d'utilisateurs LDAP pour l'authentification et le provisionnement des utilisateurs, groupes et des attributs d'utilisateurs. Les administrateurs peuvent configurer cette application pour se connecter à un ou plusieurs répertoires LDAP ou Active Directories via une interface LDAP. Les attributs tels que le quota utilisateur, l'email, les images d'avatar, les adhésions de groupe et plus peuvent être envoyés sur Nextcloud à partir d'un répertoire avec les requêtes et les filtres appropriés.\n\nUn utilisateur se connecte à Nextcloud avec ses identifiants LDAP ou AD et obtient l'accès sur la base d'une demande d'authentification gérée par le serveur LDAP ou AD. Nextcloud ne stocke pas les mots de passe LDAP ou AD, mais ces informations d'identification sont utilisées pour authentifier un utilisateur et Nextcloud utilise ensuite une session pour l'ID utilisateur. De plus amples informations sont disponibles dans la documentation LDAP User and Group Backend.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Cette application permet aux administrateurs de connecter Nextcloud à un répertoire d'utilisateurs LDAP pour l'authentification et le provisionnement des utilisateurs, groupes et des attributs d'utilisateurs. Les administrateurs peuvent configurer cette application pour se connecter à un ou plusieurs répertoires LDAP ou Active Directories via une interface LDAP. Les attributs tels que le quota utilisateur, l'e-mail, les images d'avatar, les adhésions de groupe et plus peuvent être envoyés sur Nextcloud à partir d'un répertoire avec les requêtes et les filtres appropriés.\n\nUn utilisateur se connecte à Nextcloud avec ses identifiants LDAP ou AD et obtient l'accès sur la base d'une demande d'authentification gérée par le serveur LDAP ou AD. Nextcloud ne stocke pas les mots de passe LDAP ou AD, mais ces informations d'identification sont utilisées pour authentifier un utilisateur et Nextcloud utilise ensuite une session pour l'ID utilisateur. De plus amples informations sont disponibles dans la documentation LDAP User and Group Backend.", "Test Configuration" : "Tester la configuration", "Help" : "Aide", "Groups meeting these criteria are available in %s:" : "Les groupes respectant ces critères sont disponibles dans %s :", "Only these object classes:" : "Seulement ces classes d'objets :", - "Only from these groups:" : "Seulement dans ces groupes :", + "Only from these groups:" : "Seulement dans ces groupes :", "Search groups" : "Chercher dans les groupes", "Available groups" : "Groupes disponibles", "Selected groups" : "Groupes sélectionnés", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Le filtre spécifie quels groupes LDAP ont accès à l'instance %s.", "Verify settings and count the groups" : "Vérifier les paramètres et compter les groupes", "When logging in, %s will find the user based on the following attributes:" : "À la connexion, %s cherchera l'utilisateur sur la base des attributs suivant :", - "LDAP / AD Username:" : "Nom d'utilisateur LDAP / AD :", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Autorise l'authentification à partir du nom d'utilisateur LDAP / AD.Celui-ci sera détecté et pourra être soit \"uid\", soit \"sAMAccountName\".", - "LDAP / AD Email Address:" : "Adresse mail LDAP / AD :", + "LDAP/AD Username:" : "Nom d’utilisateur LDAP/AD :", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Autorise l'authentification à partir du nom d'utilisateur LDAP/AD.Celui-ci sera détecté et pourra être soit \"uid\", soit \"sAMAccountName\".", + "LDAP/AD Email Address:" : "Adresse e-mail LDAP/AD :", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Autorise l'authentification par adresse e-mail. \"mail\" et \"mailPrimaryAddress\" sont autorisés.", "Other Attributes:" : "Autres attributs :", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Définit le filtre à appliquer lors de la tentative de connexion. \"%%uid\" remplace le nom d'utilisateur lors de l'authentification. Exemple: \"uid=%%uid\"", "Test Loginname" : "Loginname de test", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tente de recevoir un DN pour l'identifiant de connexion donné et le filtre de connexion courant.", "Verify settings" : "Tester les paramètres", "%s. Server:" : "%s. Serveur :", "Add a new configuration" : "Ajouter une nouvelle configuration", @@ -97,10 +116,10 @@ OC.L10N.register( "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Vous pouvez omettre le protocole, sauf si vous avez besoin de SSL. Dans ce cas, préfixez avec ldaps://", "Port" : "Port", "Detect Port" : "Détecter le port", - "User DN" : "DN Utilisateur", + "User DN" : "Utilisateur 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 de l'utilisateur client pour lequel la liaison doit se faire, par exemple uid=agent,dc=example,dc=com. Pour un accès anonyme, laisser le DN et le mot de passe vides.", "Password" : "Mot de passe", - "For anonymous access, leave DN and Password empty." : "Pour un accès anonyme, laisser le DN utilisateur et le mot de passe vides.", + "For anonymous access, leave DN and Password empty." : "Pour un accès anonyme, laisser l'utilisateur DN et le mot de passe vides.", "Save Credentials" : "Sauvegarder les informations d'identification", "One Base DN per line" : "Un DN de base par ligne", "You can specify Base DN for users and groups in the Advanced tab" : "Vous pouvez indiquer le DN de base de vos utilisateurs et groupes via l'onglet Avancé", @@ -125,32 +144,34 @@ OC.L10N.register( "Cancel" : "Annuler", "Server" : "Serveur", "Users" : "Utilisateurs", - "Login Attributes" : "Attributs de login", + "Login Attributes" : "Attributs de connexion", "Groups" : "Groupes", "Expert" : "Expert", "Advanced" : "Avancé", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Attention :</b> Le module php LDAP n'est pas installé, par conséquent cette extension ne pourra fonctionner. Veuillez contacter votre administrateur système afin qu'il l'installe.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Attention :</b> Le module PHP LDAP n'est pas installé, par conséquent cette extension ne pourra pas fonctionner. Veuillez contacter votre administrateur système afin qu'il l'installe.", "Connection Settings" : "Paramètres de connexion", "Configuration Active" : "Configuration active", "When unchecked, this configuration will be skipped." : "Lorsque non cochée, la configuration sera ignorée.", "Backup (Replica) Host" : "Serveur de backup (réplique)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Fournir un serveur de backup optionnel. Il doit s'agir d'une réplique du serveur LDAP/AD principal.", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Fournir un serveur de secours optionnel. Il doit s'agir d'une réplique du serveur LDAP/AD principal.", "Backup (Replica) Port" : "Port du serveur de backup (réplique)", "Disable Main Server" : "Désactiver le serveur principal", - "Only connect to the replica server." : "Se connecter uniquement à la réplique", - "Turn off SSL certificate validation." : "Désactiver la validation des certificats SSL", + "Only connect to the replica server." : "Se connecter uniquement à la réplique.", + "Turn off SSL certificate validation." : "Désactiver la validation des certificats 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." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.", "Cache Time-To-Live" : "Durée de vie du cache (TTL)", "in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.", "Directory Settings" : "Paramètres du dossier", - "User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur", + "User Display Name Field" : "Champ « nom d'affichage » de l'utilisateur", "The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.", "2nd User Display Name Field" : "Second attribut pour le nom d'affichage", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optionnel. Attribut LDAP à ajouter au nom d'affichage, entre parenthèses. Cela donnera par exemple : \"John Doe (john.doe@example.com)\".", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optionnel. Attribut LDAP à ajouter au nom affiché, entre parenthèses. Cela donnera par exemple: »John Doe (john.doe@example.org)«.", "Base User Tree" : "DN racine de l'arbre utilisateurs", "One User Base DN per line" : "Un DN de base utilisateur par ligne", "User Search Attributes" : "Attributs de recherche utilisateurs", - "Optional; one attribute per line" : "Optionnel, un attribut par ligne", + "Optional; one attribute per line" : "Facultatif ; un attribut par ligne", + "Disable users missing from LDAP" : "Désactiver les utilisateurs absents du LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Si activé, les utilisateurs importés du LDAP absents seront désactivés", "Group Display Name Field" : "Champ \"nom d'affichage\" du groupe", "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.", "Base Group Tree" : "DN racine de l'arbre groupes", @@ -160,7 +181,7 @@ OC.L10N.register( "Dynamic Group Member URL" : "Dynamic Group Member URL", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'attribut LDAP des objets groupes qui contient l'URL de recherche LDAP déterminant quels objets appartiennent au groupe. (Un attribut vide désactive la fonctionnalité de groupes dynamiques)", "Nested Groups" : "Groupes imbriqués", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont pris en charge (fonctionne uniquement si l'attribut membre du groupe contient des DNs).", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont pris en charge (fonctionne uniquement si l'attribut membre du groupe contient des DN).", "Paging chunksize" : "Paging chunksize", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize utilisée pour les recherches LDAP paginées qui peuvent retourner des résultats par lots comme une énumération d'utilisateurs ou de groupes. (Configurer à 0 pour désactiver les recherches LDAP paginées)", "Enable LDAP password changes per user" : "Activer la modification du mot de passe LDAP par l'utilisateur", @@ -173,22 +194,46 @@ OC.L10N.register( "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Laissez vide pour appliquer le quota par défaut de l'utilisateur. Sinon, spécifiez un attribut LDAP / AD.", "Quota Default" : "Quota par défaut", "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Remplacez le quota par défaut des utilisateurs LDAP qui ne disposent pas d'un quota dans le champ Quota.", - "Email Field" : "Champ Email", + "Email Field" : "Champ E-mail", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Définissez le courrier électronique de l'utilisateur à partir de leur attribut LDAP. Laissez le champ vide pour appliquer le comportement par défaut.", "User Home Folder Naming Rule" : "Règle de nommage du répertoire utilisateur", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide pour le nom d’utilisateur (par défaut). Sinon, spécifiez un attribut LDAP/AD.", "\"$home\" Placeholder Field" : "\"$home\" Champ Placeholder", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home dans la configuration du stockage externe sera remplacé avec la valeur de l'attribut spécifié", + "User Profile Attributes" : "Attributs du profil utilisateur", + "Phone Field" : "Champ Téléphone", + "User profile Phone will be set from the specified attribute" : "Le téléphone du profil utilisateur va être défini depuis l'attribut spécifié", + "Website Field" : "Champ Site Web", + "User profile Website will be set from the specified attribute" : "Le Site Web du profil utilisateur va être défini depuis l'attribut spécifié", + "Address Field" : "Champ Adresse", + "User profile Address will be set from the specified attribute" : "L'adresse du profil utilisateur va être défini depuis l'attribut spécifié", + "Twitter Field" : "Champ Twitter", + "User profile Twitter will be set from the specified attribute" : "Le twitter du profil utilisateur va être défini depuis l'attribut spécifié", + "Fediverse Field" : "Champ Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Le Fediverse du profil utilisateur va être défini depuis l'attribut spécifié", + "Organisation Field" : "Champ Organisation", + "User profile Organisation will be set from the specified attribute" : "L'organisation du profil utilisateur va être défini depuis l'attribut spécifié", + "Role Field" : "Champ Rôle", + "User profile Role will be set from the specified attribute" : "Le rôle du profil utilisateur va être défini depuis l'attribut spécifié", + "Headline Field" : "Champ Titre", + "User profile Headline will be set from the specified attribute" : "Le titre du profil utilisateur va être défini depuis l'attribut spécifié", + "Biography Field" : "Champ Biographie", + "User profile Biography will be set from the specified attribute" : "La biographie du profil utilisateur va être défini depuis l'attribut spécifié", + "Birthdate Field" : "Champ de date de naissance", + "User profile Date of birth will be set from the specified attribute" : "La date de naissance du profil d'utilisateur sera définie à partir de l'attribut spécifié", + "Pronouns Field" : "Champ des pronoms", + "User profile Pronouns will be set from the specified attribute" : "Les pronoms du profil d'utilisateur seront définis à partir de l'attribut spécifié", "Internal Username" : "Nom d'utilisateur interne", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé depuis l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi parti des URLs distantes, par exemple pour tous les services *DAV. Avec ce paramètre, le comportement par défaut peut être écrasé. Laissez le vide pour utiliser le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés).", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [a-zA-Z0-9_.@-]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi partie des URLs distantes, pour tous les services DAV par exemple. Avec ce paramètre, le comportement par défaut peut être écrasé. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés). Laissez-le vide pour utiliser le comportement par défaut", "Internal Username Attribute:" : "Nom d'utilisateur interne :", "Override UUID detection" : "Passer outre la détection des 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." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.", + "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." : "Par défaut, l’attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d’utilisateur interne basé sur l’UUID sera automatiquement créé, sauf s’il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l’attribut de votre choix. Vous devez alors vous assurer que l’attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu’il soit unique. Laisser vide pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.", "UUID Attribute for Users:" : "Attribut UUID pour les Utilisateurs :", "UUID Attribute for Groups:" : "Attribut UUID pour les Groupes :", "Username-LDAP User Mapping" : "Association Nom d'utilisateur-Utilisateur LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Les noms d'utilisateurs sont utilisés pour le stockage et l'assignation de (meta) données. Pour identifier et reconnaître précisément les utilisateurs, chaque utilisateur LDAP aura un nom interne spécifique. Cela requiert l'association d'un nom d'utilisateur NextCloud à un nom d'utilisateur LDAP. Le nom d'utilisateur créé est associé à l'attribut UUID de l'utilisateur LDAP. Par ailleurs, le DN est mémorisé en cache pour limiter les interactions LDAP mais il n'est pas utilisé pour l'identification. Si le DN est modifié, ces modifications seront retrouvées. Seul le nom interne à NextCloud est utilisé au sein du produit. Supprimer les associations créera des orphelins et l'action affectera toutes les configurations LDAP. NE JAMAIS SUPPRIMER LES ASSOCIATIONS EN ENVIRONNEMENT DE PRODUCTION, mais uniquement sur des environnements de tests et d'expérimentations.", "Clear Username-LDAP User Mapping" : "Supprimer l'association utilisateur interne-utilisateur LDAP", - "Clear Groupname-LDAP Group Mapping" : "Supprimer l'association nom de groupe-groupe LDAP" + "Clear Groupname-LDAP Group Mapping" : "Supprimer l'association nom de groupe-groupe LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuration non valide. Veuillez consulter les logs pour plus de détails." }, -"nplurals=2; plural=(n > 1);"); +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json index 021091f5d12..666b4fac5b4 100644 --- a/apps/user_ldap/l10n/fr.json +++ b/apps/user_ldap/l10n/fr.json @@ -4,11 +4,12 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuration non valable : Le lien anonyme n'est pas autorisé.", "Valid configuration, connection established!" : "Configuration valide, connexion établie !", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuration valide, mais le lien a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuration non valide. Veuillez consulter les logs pour plus de détails.", + "Invalid configuration: %s" : "Configuration non valide : %s", "No action specified" : "Aucune action spécifiée", "No configuration specified" : "Aucune configuration spécifiée", "No data specified" : "Aucune donnée spécifiée", - " Could not set configuration %s" : "Impossible d'appliquer la configuration %s", + "Invalid data specified" : "Données spécifiées invalides", + "Could not set configuration %1$s to %2$s" : "Impossible de changer la configuration %1$s pour %2$s", "Action does not exist" : "L'action n'existe pas", "Renewing …" : "Renouvellement en cours...", "Very weak password" : "Mot de passe très faible", @@ -16,7 +17,7 @@ "So-so password" : "Mot de passe tout juste acceptable", "Good password" : "Mot de passe de sécurité suffisante", "Strong password" : "Mot de passe fort", - "The Base DN appears to be wrong" : "Le DN de base est erroné", + "The Base DN appears to be wrong" : "Le DN de base semble être erroné", "Testing configuration…" : "Test de configuration", "Configuration incorrect" : "Configuration incorrecte", "Configuration incomplete" : "Configuration incomplète", @@ -30,8 +31,8 @@ "{nthServer}. Server" : "{nthServer}. Serveur", "No object found in the given Base DN. Please revise." : "Aucun objet trouvé dans le DN de base spécifié. Veuillez le vérifier.", "More than 1,000 directory entries available." : "Il y a plus de 1 000 entrées de répertoire disponibles.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrée disponible dans le DN de base spécifié","{objectsFound} entrées disponibles dans le DN de base spécifié"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Une erreur est survenue. Veuillez vérifier le DN de base, ainsi que les paramètres de connexion et les informations d'identification", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrée disponible dans le DN de base spécifié","{objectsFound} entrées disponibles dans le DN de base spécifié","{objectsFound} entrées disponibles dans le DN de base spécifié"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Une erreur est survenue. Veuillez vérifier le DN de base, ainsi que les paramètres de connexion et les informations d'identification.", "Do you really want to delete the current Server Configuration?" : "Êtes-vous sûr de vouloir effacer la configuration serveur actuelle ?", "Confirm Deletion" : "Confirmer la suppression", "Mappings cleared successfully!" : "Associations supprimées avec succès !", @@ -47,30 +48,47 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Veuillez affiner votre recherche, car elle inclue de nombreux utilisateurs. Seul le premier de cette liste sera capable de se connecter.", "An unspecified error occurred. Please check log and settings." : "Une erreur inconnue s'est produite. Veuillez vérifier le log et les paramètres.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Le filtre de recherche n'est pas valide, probablement à cause de problèmes de syntaxe tels que des parenthèses manquantes. Veuillez le corriger.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Une erreur s'est produite lors de la connexion au LDAP / AD. Veuillez vérifier l'hôte, le port et les informations d'identification.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "La chaîne \"%uid\" est manquante. Cette chaîne est remplacée par l'identifiant de connexion lors des requêtes LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Une erreur s'est produite lors de la connexion au LDAP/AD. Veuillez vérifier l'hôte, le port et les informations d'identification.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "La chaîne \"%uid\" est manquante. Cette chaîne est remplacée par l'identifiant de connexion lors des requêtes LDAP/AD.", "Please provide a login name to test against" : "Veuillez indiquer un identifiant de connexion avec lequel tester.", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Les groupes sont désactivés car le serveur LDAP / AD ne prend pas en charge memberOf.", - "Password change rejected. Hint: " : "La modification du mot de passe a été rejetée. Indice :", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Les groupes sont désactivés car le serveur LDAP/AD ne prend pas en charge memberOf.", + "Password change rejected. Hint: %s" : "Changement du mot de passe rejetée. Astuce : %s", + "Mandatory field \"%s\" left empty" : "Le champ obligatoire \"%s\" n'est pas renseigné", + "A password is given, but not an LDAP agent" : "Un mot de passe est indiqué, mais pas un agent LDAP", + "No password is given for the user agent" : "Aucun mot de passe n'est indiqué pour l'agent utilisateur", + "No LDAP base DN was given" : "Aucun DN de base LDAP n'a été indiqué", + "User base DN is not a subnode of global base DN" : "Le DN de base utilisateur n'est pas un sous-noeud du DN de base global", + "Group base DN is not a subnode of global base DN" : "Le DN de base du groupe n'est pas un sous-noeud du DN de base global", + "Login filter does not contain %s placeholder." : "Le filtre de connexion ne doit pas contenir l'élément de substitution %s", "Please login with the new password" : "Veuillez vous connecter avec le nouveau mot de passe", "LDAP User backend" : "Infrastructure utilisateur LDAP", "Your password will expire tomorrow." : "Votre mot de passe expirera demain", "Your password will expire today." : "Votre mot de passe va expirer aujourd'hui.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Votre mot de passe va expirer dans %n jour.","Votre mot de passe va expirer dans %n jours."], - "LDAP / AD integration" : "Intégration LDAP/AD", - "_%s group found_::_%s groups found_" : ["%s groupe trouvé","%s groupes trouvés"], - "_%s user found_::_%s users found_" : ["%s utilisateur trouvé","%s utilisateurs trouvés"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Votre mot de passe va expirer dans %n jour.","Votre mot de passe va expirer dans %n jours.","Votre mot de passe va expirer dans %n jours."], + "LDAP/AD integration" : "Intégration LDAP/AD", + "LDAP Connection" : "Connexion LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["La liaison a échoué pour cette configuration LDAP: %s","Échec de la liaison pour %n les configurations LDAP: %s","Échec de la liaison pour %n les configurations LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["La recherche a échoué pour cette configuration LDAP: %s","La recherche a échoué pour %n des configurations LDAP: %s","La recherche a échoué pour %n des configurations LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Il existe une configuration LDAP inactive: %s","Il y a %n configurations LDAP inactives: %s","Il y a %n configurations LDAP inactives: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["La liaison et la recherche fonctionnent sur la connexion LDAP configurée (%s)","La liaison et la recherche fonctionnent sur toutes les %n connexions LDAP configurées (%s)","La liaison et la recherche fonctionnent sur toutes les %n connexions LDAP configurées (%s)"], + "Invalid LDAP UUIDs" : "UUID LDAP invalides", + "None found" : "Aucun trouvé", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Des UUID invalides pour les comptes LDAP ont été trouvés. Merci de vérifier votre paramètre « Passer outre la détection des UUID » dans la partie Expert de la configuration LDAP puis utiliser « occ ldap:update-uuid » pour les mettre à jour.", + "_%n group found_::_%n groups found_" : ["%n groupe trouvé","%n groupes trouvés","%n groupes trouvés"], + "> 1000 groups found" : "> 1000 groupes trouvés", + "> 1000 users found" : "> 1000 utilisateurs trouvés", + "_%n user found_::_%n users found_" : ["%n utilisateur trouvé","%n utilisateurs trouvés","%n utilisateurs trouvés"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Impossible de détecter l'attribut contenant le nom d'affichage des utilisateurs. Veuillez l'indiquer vous-même dans les paramètres LDAP avancés.", "Could not find the desired feature" : "Impossible de trouver la fonction souhaitée", "Invalid Host" : "Hôte non valide", "LDAP user and group backend" : "Utilisateur LDAP et infrastructure de groupe", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Cette application autorise les administrateurs à connecter Nextcloud à un annuaire LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Cette application permet aux administrateurs de connecter Nextcloud à un répertoire d'utilisateurs LDAP pour l'authentification et le provisionnement des utilisateurs, groupes et des attributs d'utilisateurs. Les administrateurs peuvent configurer cette application pour se connecter à un ou plusieurs répertoires LDAP ou Active Directories via une interface LDAP. Les attributs tels que le quota utilisateur, l'email, les images d'avatar, les adhésions de groupe et plus peuvent être envoyés sur Nextcloud à partir d'un répertoire avec les requêtes et les filtres appropriés.\n\nUn utilisateur se connecte à Nextcloud avec ses identifiants LDAP ou AD et obtient l'accès sur la base d'une demande d'authentification gérée par le serveur LDAP ou AD. Nextcloud ne stocke pas les mots de passe LDAP ou AD, mais ces informations d'identification sont utilisées pour authentifier un utilisateur et Nextcloud utilise ensuite une session pour l'ID utilisateur. De plus amples informations sont disponibles dans la documentation LDAP User and Group Backend.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Cette application permet aux administrateurs de connecter Nextcloud à un répertoire d'utilisateurs LDAP pour l'authentification et le provisionnement des utilisateurs, groupes et des attributs d'utilisateurs. Les administrateurs peuvent configurer cette application pour se connecter à un ou plusieurs répertoires LDAP ou Active Directories via une interface LDAP. Les attributs tels que le quota utilisateur, l'e-mail, les images d'avatar, les adhésions de groupe et plus peuvent être envoyés sur Nextcloud à partir d'un répertoire avec les requêtes et les filtres appropriés.\n\nUn utilisateur se connecte à Nextcloud avec ses identifiants LDAP ou AD et obtient l'accès sur la base d'une demande d'authentification gérée par le serveur LDAP ou AD. Nextcloud ne stocke pas les mots de passe LDAP ou AD, mais ces informations d'identification sont utilisées pour authentifier un utilisateur et Nextcloud utilise ensuite une session pour l'ID utilisateur. De plus amples informations sont disponibles dans la documentation LDAP User and Group Backend.", "Test Configuration" : "Tester la configuration", "Help" : "Aide", "Groups meeting these criteria are available in %s:" : "Les groupes respectant ces critères sont disponibles dans %s :", "Only these object classes:" : "Seulement ces classes d'objets :", - "Only from these groups:" : "Seulement dans ces groupes :", + "Only from these groups:" : "Seulement dans ces groupes :", "Search groups" : "Chercher dans les groupes", "Available groups" : "Groupes disponibles", "Selected groups" : "Groupes sélectionnés", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Le filtre spécifie quels groupes LDAP ont accès à l'instance %s.", "Verify settings and count the groups" : "Vérifier les paramètres et compter les groupes", "When logging in, %s will find the user based on the following attributes:" : "À la connexion, %s cherchera l'utilisateur sur la base des attributs suivant :", - "LDAP / AD Username:" : "Nom d'utilisateur LDAP / AD :", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Autorise l'authentification à partir du nom d'utilisateur LDAP / AD.Celui-ci sera détecté et pourra être soit \"uid\", soit \"sAMAccountName\".", - "LDAP / AD Email Address:" : "Adresse mail LDAP / AD :", + "LDAP/AD Username:" : "Nom d’utilisateur LDAP/AD :", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Autorise l'authentification à partir du nom d'utilisateur LDAP/AD.Celui-ci sera détecté et pourra être soit \"uid\", soit \"sAMAccountName\".", + "LDAP/AD Email Address:" : "Adresse e-mail LDAP/AD :", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Autorise l'authentification par adresse e-mail. \"mail\" et \"mailPrimaryAddress\" sont autorisés.", "Other Attributes:" : "Autres attributs :", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Définit le filtre à appliquer lors de la tentative de connexion. \"%%uid\" remplace le nom d'utilisateur lors de l'authentification. Exemple: \"uid=%%uid\"", "Test Loginname" : "Loginname de test", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tente de recevoir un DN pour l'identifiant de connexion donné et le filtre de connexion courant.", "Verify settings" : "Tester les paramètres", "%s. Server:" : "%s. Serveur :", "Add a new configuration" : "Ajouter une nouvelle configuration", @@ -95,10 +114,10 @@ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Vous pouvez omettre le protocole, sauf si vous avez besoin de SSL. Dans ce cas, préfixez avec ldaps://", "Port" : "Port", "Detect Port" : "Détecter le port", - "User DN" : "DN Utilisateur", + "User DN" : "Utilisateur 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 de l'utilisateur client pour lequel la liaison doit se faire, par exemple uid=agent,dc=example,dc=com. Pour un accès anonyme, laisser le DN et le mot de passe vides.", "Password" : "Mot de passe", - "For anonymous access, leave DN and Password empty." : "Pour un accès anonyme, laisser le DN utilisateur et le mot de passe vides.", + "For anonymous access, leave DN and Password empty." : "Pour un accès anonyme, laisser l'utilisateur DN et le mot de passe vides.", "Save Credentials" : "Sauvegarder les informations d'identification", "One Base DN per line" : "Un DN de base par ligne", "You can specify Base DN for users and groups in the Advanced tab" : "Vous pouvez indiquer le DN de base de vos utilisateurs et groupes via l'onglet Avancé", @@ -123,32 +142,34 @@ "Cancel" : "Annuler", "Server" : "Serveur", "Users" : "Utilisateurs", - "Login Attributes" : "Attributs de login", + "Login Attributes" : "Attributs de connexion", "Groups" : "Groupes", "Expert" : "Expert", "Advanced" : "Avancé", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Attention :</b> Le module php LDAP n'est pas installé, par conséquent cette extension ne pourra fonctionner. Veuillez contacter votre administrateur système afin qu'il l'installe.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Attention :</b> Le module PHP LDAP n'est pas installé, par conséquent cette extension ne pourra pas fonctionner. Veuillez contacter votre administrateur système afin qu'il l'installe.", "Connection Settings" : "Paramètres de connexion", "Configuration Active" : "Configuration active", "When unchecked, this configuration will be skipped." : "Lorsque non cochée, la configuration sera ignorée.", "Backup (Replica) Host" : "Serveur de backup (réplique)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Fournir un serveur de backup optionnel. Il doit s'agir d'une réplique du serveur LDAP/AD principal.", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Fournir un serveur de secours optionnel. Il doit s'agir d'une réplique du serveur LDAP/AD principal.", "Backup (Replica) Port" : "Port du serveur de backup (réplique)", "Disable Main Server" : "Désactiver le serveur principal", - "Only connect to the replica server." : "Se connecter uniquement à la réplique", - "Turn off SSL certificate validation." : "Désactiver la validation des certificats SSL", + "Only connect to the replica server." : "Se connecter uniquement à la réplique.", + "Turn off SSL certificate validation." : "Désactiver la validation des certificats 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." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.", "Cache Time-To-Live" : "Durée de vie du cache (TTL)", "in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.", "Directory Settings" : "Paramètres du dossier", - "User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur", + "User Display Name Field" : "Champ « nom d'affichage » de l'utilisateur", "The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.", "2nd User Display Name Field" : "Second attribut pour le nom d'affichage", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optionnel. Attribut LDAP à ajouter au nom d'affichage, entre parenthèses. Cela donnera par exemple : \"John Doe (john.doe@example.com)\".", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optionnel. Attribut LDAP à ajouter au nom affiché, entre parenthèses. Cela donnera par exemple: »John Doe (john.doe@example.org)«.", "Base User Tree" : "DN racine de l'arbre utilisateurs", "One User Base DN per line" : "Un DN de base utilisateur par ligne", "User Search Attributes" : "Attributs de recherche utilisateurs", - "Optional; one attribute per line" : "Optionnel, un attribut par ligne", + "Optional; one attribute per line" : "Facultatif ; un attribut par ligne", + "Disable users missing from LDAP" : "Désactiver les utilisateurs absents du LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Si activé, les utilisateurs importés du LDAP absents seront désactivés", "Group Display Name Field" : "Champ \"nom d'affichage\" du groupe", "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.", "Base Group Tree" : "DN racine de l'arbre groupes", @@ -158,7 +179,7 @@ "Dynamic Group Member URL" : "Dynamic Group Member URL", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'attribut LDAP des objets groupes qui contient l'URL de recherche LDAP déterminant quels objets appartiennent au groupe. (Un attribut vide désactive la fonctionnalité de groupes dynamiques)", "Nested Groups" : "Groupes imbriqués", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont pris en charge (fonctionne uniquement si l'attribut membre du groupe contient des DNs).", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont pris en charge (fonctionne uniquement si l'attribut membre du groupe contient des DN).", "Paging chunksize" : "Paging chunksize", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize utilisée pour les recherches LDAP paginées qui peuvent retourner des résultats par lots comme une énumération d'utilisateurs ou de groupes. (Configurer à 0 pour désactiver les recherches LDAP paginées)", "Enable LDAP password changes per user" : "Activer la modification du mot de passe LDAP par l'utilisateur", @@ -171,22 +192,46 @@ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Laissez vide pour appliquer le quota par défaut de l'utilisateur. Sinon, spécifiez un attribut LDAP / AD.", "Quota Default" : "Quota par défaut", "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Remplacez le quota par défaut des utilisateurs LDAP qui ne disposent pas d'un quota dans le champ Quota.", - "Email Field" : "Champ Email", + "Email Field" : "Champ E-mail", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Définissez le courrier électronique de l'utilisateur à partir de leur attribut LDAP. Laissez le champ vide pour appliquer le comportement par défaut.", "User Home Folder Naming Rule" : "Règle de nommage du répertoire utilisateur", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide pour le nom d’utilisateur (par défaut). Sinon, spécifiez un attribut LDAP/AD.", "\"$home\" Placeholder Field" : "\"$home\" Champ Placeholder", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home dans la configuration du stockage externe sera remplacé avec la valeur de l'attribut spécifié", + "User Profile Attributes" : "Attributs du profil utilisateur", + "Phone Field" : "Champ Téléphone", + "User profile Phone will be set from the specified attribute" : "Le téléphone du profil utilisateur va être défini depuis l'attribut spécifié", + "Website Field" : "Champ Site Web", + "User profile Website will be set from the specified attribute" : "Le Site Web du profil utilisateur va être défini depuis l'attribut spécifié", + "Address Field" : "Champ Adresse", + "User profile Address will be set from the specified attribute" : "L'adresse du profil utilisateur va être défini depuis l'attribut spécifié", + "Twitter Field" : "Champ Twitter", + "User profile Twitter will be set from the specified attribute" : "Le twitter du profil utilisateur va être défini depuis l'attribut spécifié", + "Fediverse Field" : "Champ Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Le Fediverse du profil utilisateur va être défini depuis l'attribut spécifié", + "Organisation Field" : "Champ Organisation", + "User profile Organisation will be set from the specified attribute" : "L'organisation du profil utilisateur va être défini depuis l'attribut spécifié", + "Role Field" : "Champ Rôle", + "User profile Role will be set from the specified attribute" : "Le rôle du profil utilisateur va être défini depuis l'attribut spécifié", + "Headline Field" : "Champ Titre", + "User profile Headline will be set from the specified attribute" : "Le titre du profil utilisateur va être défini depuis l'attribut spécifié", + "Biography Field" : "Champ Biographie", + "User profile Biography will be set from the specified attribute" : "La biographie du profil utilisateur va être défini depuis l'attribut spécifié", + "Birthdate Field" : "Champ de date de naissance", + "User profile Date of birth will be set from the specified attribute" : "La date de naissance du profil d'utilisateur sera définie à partir de l'attribut spécifié", + "Pronouns Field" : "Champ des pronoms", + "User profile Pronouns will be set from the specified attribute" : "Les pronoms du profil d'utilisateur seront définis à partir de l'attribut spécifié", "Internal Username" : "Nom d'utilisateur interne", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé depuis l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi parti des URLs distantes, par exemple pour tous les services *DAV. Avec ce paramètre, le comportement par défaut peut être écrasé. Laissez le vide pour utiliser le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés).", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [a-zA-Z0-9_.@-]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi partie des URLs distantes, pour tous les services DAV par exemple. Avec ce paramètre, le comportement par défaut peut être écrasé. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés). Laissez-le vide pour utiliser le comportement par défaut", "Internal Username Attribute:" : "Nom d'utilisateur interne :", "Override UUID detection" : "Passer outre la détection des 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." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.", + "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." : "Par défaut, l’attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d’utilisateur interne basé sur l’UUID sera automatiquement créé, sauf s’il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l’attribut de votre choix. Vous devez alors vous assurer que l’attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu’il soit unique. Laisser vide pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.", "UUID Attribute for Users:" : "Attribut UUID pour les Utilisateurs :", "UUID Attribute for Groups:" : "Attribut UUID pour les Groupes :", "Username-LDAP User Mapping" : "Association Nom d'utilisateur-Utilisateur LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Les noms d'utilisateurs sont utilisés pour le stockage et l'assignation de (meta) données. Pour identifier et reconnaître précisément les utilisateurs, chaque utilisateur LDAP aura un nom interne spécifique. Cela requiert l'association d'un nom d'utilisateur NextCloud à un nom d'utilisateur LDAP. Le nom d'utilisateur créé est associé à l'attribut UUID de l'utilisateur LDAP. Par ailleurs, le DN est mémorisé en cache pour limiter les interactions LDAP mais il n'est pas utilisé pour l'identification. Si le DN est modifié, ces modifications seront retrouvées. Seul le nom interne à NextCloud est utilisé au sein du produit. Supprimer les associations créera des orphelins et l'action affectera toutes les configurations LDAP. NE JAMAIS SUPPRIMER LES ASSOCIATIONS EN ENVIRONNEMENT DE PRODUCTION, mais uniquement sur des environnements de tests et d'expérimentations.", "Clear Username-LDAP User Mapping" : "Supprimer l'association utilisateur interne-utilisateur LDAP", - "Clear Groupname-LDAP Group Mapping" : "Supprimer l'association nom de groupe-groupe LDAP" -},"pluralForm" :"nplurals=2; plural=(n > 1);" + "Clear Groupname-LDAP Group Mapping" : "Supprimer l'association nom de groupe-groupe LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuration non valide. Veuillez consulter les logs pour plus de détails." +},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/fy_NL.js b/apps/user_ldap/l10n/fy_NL.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/fy_NL.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/fy_NL.json b/apps/user_ldap/l10n/fy_NL.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/fy_NL.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ga.js b/apps/user_ldap/l10n/ga.js new file mode 100644 index 00000000000..68b5c19e735 --- /dev/null +++ b/apps/user_ldap/l10n/ga.js @@ -0,0 +1,239 @@ +OC.L10N.register( + "user_ldap", + { + "Failed to clear the mappings." : "Theip ar na mapálacha a ghlanadh.", + "Failed to delete the server configuration" : "Theip ar chumraíocht an fhreastalaí a scriosadh", + "Invalid configuration: Anonymous binding is not allowed." : "Cumraíocht neamhbhailí: Ní cheadaítear ceangal gan ainm.", + "Valid configuration, connection established!" : "Cumraíocht bhailí, nasc bunaithe!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Cumraíocht bhailí, ach theip ar an gceangal. Seiceáil le do thoil socruithe agus dintiúir an fhreastalaí.", + "Invalid configuration: %s" : "Cumraíocht neamhbhailí: %s", + "No action specified" : "Níor sonraíodh aon ghníomh", + "No configuration specified" : "Níor sonraíodh cumraíocht ar bith", + "No data specified" : "Níor sonraíodh aon sonraí", + "Invalid data specified" : "Sonraí neamhbhailí", + "Could not set configuration %1$s to %2$s" : "Níorbh fhéidir cumraíocht %1$s a shocrú go %2$s", + "Action does not exist" : "Ní gníomh ann", + "Renewing …" : "Ag athnuachan…", + "Very weak password" : "Focal faire an-lag", + "Weak password" : "Pasfhocal lag", + "So-so password" : "mar sin-sin pasfhocal", + "Good password" : "pasfhocal maith", + "Strong password" : "Pasfhocal láidir", + "The Base DN appears to be wrong" : "Is cosúil go bhfuil an Base DN mícheart", + "Testing configuration…" : "Cumraíocht á thástáil…", + "Configuration incorrect" : "Cumraíocht mícheart", + "Configuration incomplete" : "Cumraíocht neamhiomlán", + "Configuration OK" : "Cumraíocht OK", + "Select groups" : "Roghnaigh grúpaí", + "Select object classes" : "Roghnaigh ranganna oibiachta", + "Please check the credentials, they seem to be wrong." : "Seiceáil na dintiúir, is cosúil go bhfuil siad mícheart le do thoil.", + "Please specify the port, it could not be auto-detected." : "Sonraigh an port le do thoil, níorbh fhéidir é a bhrath go huathoibríoch.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Níorbh fhéidir an bonn DN a bhrath go huathoibríoch, athbhreithnigh dintiúir, óstach agus port le do thoil.", + "Could not detect Base DN, please enter it manually." : "Níorbh fhéidir Bonn DN a bhrath, cuir isteach é de láimh le do thoil.", + "{nthServer}. Server" : "{nthServer}. Freastalaí", + "No object found in the given Base DN. Please revise." : "Níor aimsíodh aon réad sa Bhonn DN a thugtar. Athbhreithnigh le do thoil.", + "More than 1,000 directory entries available." : "Níos mó ná 1,000 iontráil eolaire ar fáil.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Tá iontráil {objectsFound} ar fáil laistigh den Bhunáit DN a soláthraíodh","{objectsFound} iontrálacha ar fáil laistigh den Bhunáit DN a soláthraíodh","{objectsFound} iontrálacha ar fáil laistigh den Bhunáit DN a soláthraíodh","{objectsFound} iontrálacha ar fáil laistigh den Bhunáit DN a soláthraíodh","{objectsFound} iontrálacha ar fáil laistigh den Bhunáit DN a soláthraíodh"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Tharla earráid. Seiceáil an Base DN, chomh maith le socruithe ceangail agus dintiúir le do thoil.", + "Do you really want to delete the current Server Configuration?" : "An bhfuil tú cinnte gur mhaith leat Cumraíocht an Fhreastalaí reatha a scriosadh?", + "Confirm Deletion" : "Deimhnigh Scriosadh", + "Mappings cleared successfully!" : "Mappings glanta go rathúil!", + "Error while clearing the mappings." : "Earráid agus na mapálacha á ghlanadh.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Ní cheadaítear ceangal gan ainm. Tabhair DN Úsáideora agus Pasfhocal le do thoil.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Earráid Oibríochtaí LDAP. Seans nach gceadófar ceangal gan ainm.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Theip ar shábháil. Cinntigh le do thoil go bhfuil an bunachar sonraí in Oibriú le do thoil. Athlódáil roimh leanúint ar aghaidh.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cumasóidh sé fiosruithe uathoibríocha LDAP má aistrítear an modh. Ag brath ar do mhéid LDAP féadfaidh siad tamall a ghlacadh. An bhfuil tú fós ag iarraidh an mód a athrú?", + "Mode switch" : "Athrú mód", + "Select attributes" : "Roghnaigh tréithe", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Úsáideoir gan aimsiú. Seiceáil do chuid tréithe logáil isteach agus ainm úsáideora le do thoil. Scagaire éifeachtach (le cóipeáil agus greamaigh le haghaidh bailíochtú na n-orduithe):<br/>", + "User found and settings verified." : "Fuarthas an t-úsáideoir agus fíoraíodh na socruithe.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Smaoinigh ar do chuardach a chaolú, mar gur chuimsigh sé go leor úsáideoirí, agus ní bheidh ach an chéad duine acu in ann logáil isteach.", + "An unspecified error occurred. Please check log and settings." : "Tharla earráid neamhshonraithe. Seiceáil le do thoil logáil agus socruithe le do thoil.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Tá an scagaire cuardaigh neamhbhailí, is dócha mar gheall ar cheisteanna comhréire amhail líon míchothrom na lúibíní oscailte agus dúnta. Athbhreithnigh le do thoil.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Tharla earráid cheangail le LDAP/AD. Seiceáil an t-óstach, an port agus na dintiúir le do thoil.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Tá coinneálaí an ionaid \"%uid\" ar iarraidh. Cuirfear an t-ainm logála isteach ina áit agus LDAP/AD á cheistiú.", + "Please provide a login name to test against" : "Tabhair ainm logáil isteach le tástáil ina choinne le do thoil", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Díchumasaíodh an bosca grúpa toisc nach dtacaíonn an freastalaí LDAP/AD le memberOf.", + "Password change rejected. Hint: %s" : "Diúltaíodh don athrú pasfhocal. Leid: %s", + "Mandatory field \"%s\" left empty" : "Réimse éigeantach \"%s\"fágtha folamh", + "A password is given, but not an LDAP agent" : "Tugtar pasfhocal, ach ní thugtar do ghníomhaire LDAP", + "No password is given for the user agent" : "Ní thugtar aon phasfhocal don ghníomhaire úsáideora", + "No LDAP base DN was given" : "Níor tugadh bonn LDAP DN", + "User base DN is not a subnode of global base DN" : "Ní fonód de bhonn domhanda DN é an bonn úsáideora DN", + "Group base DN is not a subnode of global base DN" : "Ní fonód de bhonn domhanda DN é bonnghrúpa DN", + "Login filter does not contain %s placeholder." : "Níl %s coinneálaí logála isteach sa scagaire logála isteach.", + "Please login with the new password" : "Logáil isteach leis an bpasfhocal nua le do thoil", + "LDAP User backend" : "Inneall Úsáideora LDAP", + "Your password will expire tomorrow." : "Rachaidh do phasfhocal in éag amárach.", + "Your password will expire today." : "Rachaidh do phasfhocal in éag inniu.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Rachaidh do phasfhocal in éag laistigh de %n lá.","Rachaidh do phasfhocal in éag laistigh de %n lá.","Rachaidh do phasfhocal in éag laistigh de %n lá.","Rachaidh do phasfhocal in éag laistigh de %n lá.","Rachaidh do phasfhocal in éag laistigh de %n lá."], + "LDAP/AD integration" : "Comhtháthú LDAP/AD", + "LDAP Connection" : "Ceangal LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Theip ar cheangal don chumraíocht LDAP seo: %s","Theip ar cheangal le haghaidh %n cumraíochtaí LDAP: %s","Theip ar cheangal le haghaidh %n cumraíochtaí LDAP: %s","Theip ar cheangal le haghaidh %n cumraíochtaí LDAP: %s","Theip ar cheangal le haghaidh %n cumraíochtaí LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Theip ar chuardach don chumraíocht LDAP seo: %s","Theip ar chuardach le haghaidh %n cumraíochtaí LDAP: %s","Theip ar chuardach le haghaidh %n cumraíochtaí LDAP: %s","Theip ar chuardach le haghaidh %n cumraíochtaí LDAP: %s","Theip ar chuardach le haghaidh %n cumraíochtaí LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Tá cumraíocht LDAP neamhghníomhach: %s","Tá %n cumraíocht LDAP neamhghníomhach: %s","Tá %n cumraíocht LDAP neamhghníomhach: %s","Tá %n cumraíocht LDAP neamhghníomhach: %s","Tá %n cumraíocht LDAP neamhghníomhach: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Oibríonn ceangal agus cuardach ar an gceangal LDAP cumraithe (%s)","Oibríonn ceangal agus cuardach ar na naisc LDAP go léir atá cumraithe %n (%s)","Oibríonn ceangal agus cuardach ar na naisc LDAP go léir atá cumraithe %n (%s)","Oibríonn ceangal agus cuardach ar na naisc LDAP go léir atá cumraithe %n (%s)","Oibríonn ceangal agus cuardach ar na naisc LDAP go léir atá cumraithe %n (%s)"], + "Invalid LDAP UUIDs" : "UUIDanna LDAP neamhbhailí", + "None found" : "Níor aimsíodh aon cheann", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Fuarthas UUIDanna neamhbhailí de chuntais nó de ghrúpaí LDAP. Athbhreithnigh do shocruithe \"Sáraigh braite UUID\" sa chuid Saineolaithe de chumraíocht LDAP agus úsáid \"occ ldap:update-uuid\" chun iad a nuashonrú le do thoil.", + "_%n group found_::_%n groups found_" : ["%n grúpa aimsithe","%n grúpaí aimsithe","%n grúpaí aimsithe","%n grúpaí aimsithe","%n grúpaí aimsithe"], + "> 1000 groups found" : "> Fuarthas 1000 grúpaí", + "> 1000 users found" : "> Fuarthas 1000 úsáideoirí", + "_%n user found_::_%n users found_" : ["%núsáideoir aimsithe","%núsáideoirí aimsithe","%n úsáideoirí aimsithe","%n úsáideoirí aimsithe","%n úsáideoirí aimsithe"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Níorbh fhéidir aitreabúid ainm taispeána úsáideora a bhrath. Sonraigh tú féin é i ardsocruithe LDAP le do thoil.", + "Could not find the desired feature" : "Níorbh fhéidir an ghné inmhianaithe a aimsiú", + "Invalid Host" : "Óstach Neamhbhailí", + "LDAP user and group backend" : "Úsáideoir LDAP agus inneall grúpa", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Cuireann an feidhmchlár seo ar chumas riarthóirí Nextcloud a nascadh le heolaire úsáideoirí atá bunaithe ar LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Cuireann an feidhmchlár seo ar chumas riarthóirí Nextcloud a nascadh le heolaire úsáideoirí atá bunaithe ar LDAP chun úsáideoirí, grúpaí agus tréithe úsáideoirí a fhíordheimhniú agus a sholáthar. Is féidir le riarthóirí an feidhmchlár seo a chumrú chun nascadh le heolaire LDAP amháin nó níos mó nó le hEolairí Gníomhacha trí chomhéadan LDAP. Is féidir tréithe ar nós cuóta úsáideora, ríomhphost, pictiúir avatar, ballraíocht ghrúpa agus níos mó a tharraingt isteach in Nextcloud ó eolaire leis na ceisteanna agus na scagairí cuí.\n\nLogálann úsáideoir isteach ar Nextcloud lena dintiúir LDAP nó AD, agus tugtar rochtain dó bunaithe ar iarratas fíordheimhnithe a láimhseálann an freastalaí LDAP nó AD. Ní stórálann Nextcloud pasfhocail LDAP nó AD, ach úsáidtear na dintiúir seo chun úsáideoir a fhíordheimhniú agus ansin úsáideann Nextcloud seisiún don ID úsáideora. Tá tuilleadh faisnéise ar fáil i gcáipéisíocht an LDAP Úsáideoir agus Inneall Grúpa.", + "Test Configuration" : "Cumraíocht Tástála", + "Help" : "Cabhrú", + "Groups meeting these criteria are available in %s:" : "Tá grúpaí a chomhlíonann na critéir seo ar fáil i %s:", + "Only these object classes:" : "Na haicmí oibiachta seo amháin:", + "Only from these groups:" : "Ó na grúpaí seo amháin:", + "Search groups" : "Cuardaigh grúpaí", + "Available groups" : "Grúpaí atá ar fáil", + "Selected groups" : "Grúpaí roghnaithe", + "Edit LDAP Query" : "Cuir Iarratas LDAP in eagar", + "LDAP Filter:" : "Scagaire LDAP:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Sonraíonn an scagaire na grúpaí LDAP a mbeidh rochtain acu ar an gcás %s.", + "Verify settings and count the groups" : "Fíoraigh socruithe agus comhaireamh na grúpaí", + "When logging in, %s will find the user based on the following attributes:" : "Nuair a bheidh tú ag logáil isteach, gheobhaidh %s an t-úsáideoir bunaithe ar na tréithe seo a leanas:", + "LDAP/AD Username:" : "Ainm Úsáideora LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Ligeann sé logáil isteach in aghaidh an ainm úsáideora LDAP/AD, arb é \"uid\" nó \"sAMAccountName\" é agus a bhraitear.", + "LDAP/AD Email Address:" : "Seoladh Ríomhphoist LDAP/AD:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Ligeann sé logáil isteach i gcoinne tréith ríomhphoist. \"mail\" agus \"mailPrimaryAddress\" ceadaithe.", + "Other Attributes:" : "Tréithe Eile:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Sainmhíníonn sé an scagaire le cur i bhfeidhm, nuair a dhéantar iarracht logáil isteach. Cuirtear \"%%uid\" in ionad an ainm úsáideora sa ghníomh logála isteach. Sampla: \"uid=%%uid\"", + "Test Loginname" : "Tástáil Ainm Logála", + "Attempts to receive a DN for the given loginname and the current login filter" : "Iarrachtaí ar DN a fháil don logainm tugtha agus don scagaire logála isteach reatha", + "Verify settings" : "Fíoraigh socruithe", + "%s. Server:" : "%s. Freastalaí:", + "Add a new configuration" : "Cuir cumraíocht nua leis", + "Copy current configuration into new directory binding" : "Cóipeáil an chumraíocht reatha i gceangal eolaire nua", + "Delete the current configuration" : "Scrios an chumraíocht reatha", + "Host" : "Óstach", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Is féidir leat an prótacal a fhágáil ar lár, mura dteastaíonn SSL uait. Más ea, cuir tús le ldaps://", + "Port" : "Port", + "Detect Port" : "Braith Port", + "User DN" : "Úsáideoir 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 an chliaint-úsáideoir lena ndéanfar an ceangal, e.g. uid=agent,dc=example,dc=com. Le rochtain gan ainm, fág DN agus Pasfhocal folamh.", + "Password" : "Pasfhocal", + "For anonymous access, leave DN and Password empty." : "Le rochtain gan ainm, fág DN agus Pasfhocal folamh.", + "Save Credentials" : "Sábháil Dintiúir", + "One Base DN per line" : "Bonn DN amháin in aghaidh an líne", + "You can specify Base DN for users and groups in the Advanced tab" : "Is féidir leat Bonn DN a shonrú d’úsáideoirí agus do ghrúpaí sa chluaisín Casta", + "Detect Base DN" : "Braith Bonn DN", + "Test Base DN" : "Bonn Tástála DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Seachnaíonn iarratais uathoibríocha LDAP. Níos fearr le haghaidh socruithe níos mó, ach teastaíonn roinnt eolais LDAP.", + "Manually enter LDAP filters (recommended for large directories)" : "Iontráil scagairí LDAP de láimh (molta le haghaidh eolairí móra)", + "Listing and searching for users is constrained by these criteria:" : "Tá liostú agus cuardach úsáideoirí srianta ag na critéir seo:", + "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." : "Is iad na haicmí oibiachta is coitianta d’úsáideoirí ná Duine eagraíochtúil, duine, úsáideoir, agus inetOrgPerson. Mura bhfuil tú cinnte cén aicme oibiachta le roghnú, téigh i gcomhairle le riarthóir do eolaire le do thoil.", + "The filter specifies which LDAP users shall have access to the %s instance." : "Sonraíonn an scagaire cé na húsáideoirí LDAP a mbeidh rochtain acu ar an gcás %s.", + "Verify settings and count users" : "Fíoraigh socruithe agus comhaireamh úsáideoirí", + "Saving" : "Shábháil", + "Back" : "Ar ais", + "Continue" : "Leanúint ar aghaidh", + "Please renew your password." : "Athnuaigh do phasfhocal le do thoil.", + "An internal error occurred." : "Tharla earráid inmheánach.", + "Please try again or contact your administrator." : "Bain triail eile as nó déan teagmháil le do riarthóir.", + "Current password" : "Pasfhocal reatha", + "New password" : "Focal Faire Nua", + "Renew password" : "Athnuaigh pasfhocal", + "Wrong password." : "Pasfhocal mícheart.", + "Cancel" : "Cealaigh", + "Server" : "Freastalaí", + "Users" : "Úsáideoirí", + "Login Attributes" : "Tréithe Logála Isteach", + "Groups" : "Grúpaí", + "Expert" : "Saineolaí", + "Advanced" : "Casta", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Rabhadh:</b> Níl an modúl PHP LDAP suiteáilte, ní oibreoidh an t-inneall. Iarr ar do riarthóir córais é a shuiteáil le do thoil.", + "Connection Settings" : "Socruithe Ceangail", + "Configuration Active" : "Cumraíocht Ghníomhach", + "When unchecked, this configuration will be skipped." : "Nuair nach ndéantar í a sheiceáil, déanfar an chumraíocht seo a scipeáil.", + "Backup (Replica) Host" : "Cúltaca (Macasamhail) Óstach", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Tabhair óstach cúltaca roghnach. Caithfidh gur macasamhail é den phríomhfhreastalaí LDAP/AD.", + "Backup (Replica) Port" : "Cúltaca (Macasamhail) Port", + "Disable Main Server" : "Díchumasaigh Príomhfhreastalaí", + "Only connect to the replica server." : "Ná déan ach ceangal leis an bhfreastalaí macasamhail.", + "Turn off SSL certificate validation." : "Múch bailíochtú teastais 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." : "Ní mholtar é, bain úsáid as le haghaidh tástála amháin! Mura n-oibríonn an ceangal ach leis an rogha seo, iompórtáil teastas SSL an fhreastalaí LDAP i do fhreastalaí %s.", + "Cache Time-To-Live" : "Taisce Am-Chun-Beo", + "in seconds. A change empties the cache." : "i soicindí. Folaíonn athrú an taisce.", + "Directory Settings" : "Socruithe Eolaire", + "User Display Name Field" : "Réimse Ainm Taispeána Úsáideora", + "The LDAP attribute to use to generate the user's display name." : "An tréith LDAP le húsáid chun ainm taispeána an úsáideora a ghiniúint.", + "2nd User Display Name Field" : "2 Réimse Ainm Taispeána Úsáideora", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Roghnach. Aitreabúid LDAP le cur leis an ainm taispeána idir lúibíní. Torthaí i e.g. »John Doe (john.doe@example.org)«.", + "Base User Tree" : "Crann Úsáideora Bonn", + "One User Base DN per line" : "Bonn Úsáideora amháin DN in aghaidh na líne", + "User Search Attributes" : "Tréithe Cuardaigh Úsáideora", + "Optional; one attribute per line" : "Roghnach; tréith amháin in aghaidh an líne", + "Disable users missing from LDAP" : "Díchumasaigh úsáideoirí in easnamh ó LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Nuair a chuirtear ar siúl é, díchumasófar úsáideoirí a allmhairítear ó LDAP atá in easnamh ansin", + "Group Display Name Field" : "Réimse Ainm Taispeána Grúpa", + "The LDAP attribute to use to generate the groups's display name." : "An tréith LDAP le húsáid chun ainm taispeána an ghrúpaí a ghiniúint.", + "Base Group Tree" : "Crann Bun-ghrúpa", + "One Group Base DN per line" : "Bonn Grúpa amháin DN in aghaidh na líne", + "Group Search Attributes" : "Tréithe Cuardach Grúpa", + "Group-Member association" : "Comhlachas Grúpa-Ball", + "Dynamic Group Member URL" : "URL Ball Grúpa Dinimiciúla", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "An aitreabúid LDAP go bhfuil URL cuardaigh LDAP ar oibiachtaí grúpa a shocraíonn cad iad na réada a bhaineann leis an ngrúpa. (Díchumasaíonn socrú folamh feidhmiúlacht bhallraíocht ghrúpa dinimiciúil.)", + "Nested Groups" : "Grúpaí Neadaithe", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Nuair a chuirtear ar siúl é, tacaítear le grúpaí ina bhfuil grúpaí. (Ní oibríonn sé ach amháin má tá DNanna san aitreabúid bhall grúpa.)", + "Paging chunksize" : "Paging smután", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize a úsáidtear le haghaidh cuardaigh leathanaigh LDAP a d'fhéadfadh torthaí toirtiúla a fháil ar nós áirimh úsáideora nó grúpa. (Má shocraítear é 0, díchumasaítear cuardaigh leathanacháilte LDAP sna cásanna sin.)", + "Enable LDAP password changes per user" : "Cumasaigh athruithe pasfhocail LDAP in aghaidh an úsáideora", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Ceadaigh d’úsáideoirí LDAP a bpasfhocal a athrú agus cead a thabhairt d’Oll-Riarthóirí agus do Riarthóirí Grúpa pasfhocal a n-úsáideoirí LDAP a athrú. Ní oibríonn sé ach nuair a bhíonn polasaithe rialaithe rochtana cumraithe dá réir ar an bhfreastalaí LDAP. Toisc go seoltar pasfhocail i ngnáth-théacs chuig an bhfreastalaí LDAP, ní mór criptiú iompair a úsáid agus ba cheart hash pasfhocail a chumrú ar an bhfreastalaí LDAP.", + "(New password is sent as plain text to LDAP)" : "(Seoltar pasfhocal nua mar ghnáth-théacs chuig LDAP)", + "Default password policy DN" : "Beartas réamhshocraithe pasfhocail DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "An DN de pholasaí réamhshocraithe pasfhocail a úsáidfear chun pasfhocal a láimhseáil as feidhm. Ní oibríonn sé ach amháin nuair a chumasaítear athruithe pasfhocail LDAP in aghaidh an úsáideora agus nuair nach dtacaítear leis ach ó OpenLDAP. Fág folamh chun láimhseáil pasfhocal éaga a dhíchumasú.", + "Special Attributes" : "Tréithe Speisialta", + "Quota Field" : "Réimse Cuóta", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Fág folamh le haghaidh cuóta réamhshocraithe an úsáideora. Seachas sin, sonraigh tréith LDAP/AD.", + "Quota Default" : "Réamhshocrú Cuóta", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sáraigh cuóta réamhshocraithe d’úsáideoirí LDAP nach bhfuil cuóta socraithe acu sa Réimse Cuóta.", + "Email Field" : "Réimse Ríomhphost", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Socraigh ríomhphost an úsáideora óna tréith LDAP. Fág folamh é le haghaidh iompair réamhshocraithe.", + "User Home Folder Naming Rule" : "Riail Ainmnithe Fillteán Baile an Úsáideora", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Fág folamh le haghaidh ainm úsáideora (réamhshocraithe). Seachas sin, sonraigh tréith LDAP/AD.", + "\"$home\" Placeholder Field" : "Réimse Sealbhóir Áite \"$home\".", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Cuirfear luach na haitreabúide sonraithe in ionad $home i gcumraíocht stórála seachtrach", + "User Profile Attributes" : "Tréithe Próifíl Úsáideora", + "Phone Field" : "Réimse Fón", + "User profile Phone will be set from the specified attribute" : "Socrófar fón próifíl úsáideora ón tréith shonraithe", + "Website Field" : "Réimse Gréasáin", + "User profile Website will be set from the specified attribute" : "Próifíl úsáideora Socrófar suíomh Gréasáin ón tréith shonraithe", + "Address Field" : "Réimse Seoladh", + "User profile Address will be set from the specified attribute" : "Socrófar Seoladh phróifíl úsáideora ón tréith shonraithe", + "Twitter Field" : "Réimse Twitter", + "User profile Twitter will be set from the specified attribute" : "Socrófar próifíl úsáideora Twitter ón tréith shonraithe", + "Fediverse Field" : "Réimse Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Socrófar próifíl úsáideora Fediverse ón tréith shonraithe", + "Organisation Field" : "Réimse Eagrúcháin", + "User profile Organisation will be set from the specified attribute" : "Próifíl úsáideora Socrófar Eagraíocht ón tréith shonraithe", + "Role Field" : "Réimse Ról", + "User profile Role will be set from the specified attribute" : "Próifíl úsáideora Socrófar Ról ón tréith shonraithe", + "Headline Field" : "Réimse Ceannlíne", + "User profile Headline will be set from the specified attribute" : "Socrófar Ceannlíne próifíle úsáideora ón tréith shonraithe", + "Biography Field" : "Réimse Beathaisnéis", + "User profile Biography will be set from the specified attribute" : "Socrófar Beathaisnéis phróifíl úsáideora ón tréith shonraithe", + "Birthdate Field" : "Réimse Breithlá", + "User profile Date of birth will be set from the specified attribute" : "Próifíl úsáideora Socrófar dáta breithe ón tréith shonraithe", + "Pronouns Field" : "Réimse Forainmneacha", + "User profile Pronouns will be set from the specified attribute" : "Socrófar Forainmneacha próifíle úsáideora ón aitreabúid sonraithe", + "Internal Username" : "Ainm Úsáideora Inmheánach", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De réir réamhshocraithe cruthófar an t-ainm úsáideora inmheánach ón aitreabúid UUID. Cinntíonn sé go bhfuil an t-ainm úsáideora uathúil agus ní gá carachtair a thiontú. Tá an srian ar an ainm úsáideora inmheánach nach gceadaítear ach na carachtair seo: [a-zA-Z0-9_.@-]. Cuirtear a gcomhfhreagras ASCII in ionad carachtair eile nó fágtar ar lár iad. Nuair a bhíonn imbhuailtí cuirfear uimhir leis/méadófar é. Úsáidtear an t-ainm úsáideora inmheánach chun úsáideoir a aithint go hinmheánach. Is é an t-ainm réamhshocraithe é freisin don fhillteán baile úsáideora. Is cuid de URLanna cianda é freisin, mar shampla do gach seirbhís DAV. Leis an socrú seo, is féidir an t-iompar réamhshocraithe a shárú. Ní bheidh éifeacht ag athruithe ach ar úsáideoirí LDAP nua-mhapáilte (curtha leis). Fág é folamh le haghaidh iompar réamhshocraithe.", + "Internal Username Attribute:" : "Tréith Ainm Úsáideora Inmheánach:", + "Override UUID detection" : "Sáraigh brath 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." : "De réir réamhshocraithe, braitear an aitreabúid UUID go huathoibríoch. Úsáidtear an tréith UUID chun úsáideoirí agus grúpaí LDAP a shainaithint gan amhras. Chomh maith leis sin, cruthófar an t-ainm úsáideora inmheánach bunaithe ar an UUID, mura sonraítear a mhalairt thuas. Is féidir leat an socrú a shárú agus tréith de do rogha a chur ar aghaidh. Ní mór duit a chinntiú gur féidir an tréith is rogha leat a fháil d’úsáideoirí agus do ghrúpaí araon agus go bhfuil sé uathúil. Fág é folamh le haghaidh iompar réamhshocraithe. Ní bheidh éifeacht ag athruithe ach ar úsáideoirí agus grúpaí LDAP nua-mhapáilte (curtha leis).", + "UUID Attribute for Users:" : "Tréith UUID d'Úsáideoirí:", + "UUID Attribute for Groups:" : "Tréith UUID do Ghrúpaí:", + "Username-LDAP User Mapping" : "Mapáil Úsáideora Ainm Úsáideora-LDAP", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Úsáidtear ainmneacha úsáideoirí chun meiteashonraí a stóráil agus a shannadh. Chun úsáideoirí a shainaithint agus a aithint go beacht, beidh ainm úsáideora inmheánach ag gach úsáideoir LDAP. Teastaíonn mapáil ón ainm úsáideora go dtí an t-úsáideoir LDAP chuige seo. Tá an t-ainm úsáideora cruthaithe mapáilte chuig UUID an úsáideora LDAP. Ina theannta sin tá an DN i dtaisce freisin chun idirghníomhaíocht LDAP a laghdú, ach ní úsáidtear é le haghaidh aitheantais. Má athraíonn an DN, beidh na hathruithe le fáil. Úsáidtear an t-ainm úsáideora inmheánach ar fad. Beidh rudaí fágtha i ngach áit chun na mapálacha a ghlanadh. Ní íogair don chumraíocht é na mapálacha a ghlanadh, bíonn tionchar aige ar gach cumraíocht LDAP! Ná glan na mapálacha riamh i dtimpeallacht táirgthe, ach amháin ag céim tástála nó turgnamhach.", + "Clear Username-LDAP User Mapping" : "Glan Léarscáiliú Úsáideora Ainm Úsáideora-LDAP", + "Clear Groupname-LDAP Group Mapping" : "Glan Léarscáiliú Grúpa Ainm an Ghrúpa-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Cumraíocht neamhbhailí. Féach ar na logaí le haghaidh tuilleadh sonraí le do thoil." +}, +"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"); diff --git a/apps/user_ldap/l10n/ga.json b/apps/user_ldap/l10n/ga.json new file mode 100644 index 00000000000..4bd89e1f0e6 --- /dev/null +++ b/apps/user_ldap/l10n/ga.json @@ -0,0 +1,237 @@ +{ "translations": { + "Failed to clear the mappings." : "Theip ar na mapálacha a ghlanadh.", + "Failed to delete the server configuration" : "Theip ar chumraíocht an fhreastalaí a scriosadh", + "Invalid configuration: Anonymous binding is not allowed." : "Cumraíocht neamhbhailí: Ní cheadaítear ceangal gan ainm.", + "Valid configuration, connection established!" : "Cumraíocht bhailí, nasc bunaithe!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Cumraíocht bhailí, ach theip ar an gceangal. Seiceáil le do thoil socruithe agus dintiúir an fhreastalaí.", + "Invalid configuration: %s" : "Cumraíocht neamhbhailí: %s", + "No action specified" : "Níor sonraíodh aon ghníomh", + "No configuration specified" : "Níor sonraíodh cumraíocht ar bith", + "No data specified" : "Níor sonraíodh aon sonraí", + "Invalid data specified" : "Sonraí neamhbhailí", + "Could not set configuration %1$s to %2$s" : "Níorbh fhéidir cumraíocht %1$s a shocrú go %2$s", + "Action does not exist" : "Ní gníomh ann", + "Renewing …" : "Ag athnuachan…", + "Very weak password" : "Focal faire an-lag", + "Weak password" : "Pasfhocal lag", + "So-so password" : "mar sin-sin pasfhocal", + "Good password" : "pasfhocal maith", + "Strong password" : "Pasfhocal láidir", + "The Base DN appears to be wrong" : "Is cosúil go bhfuil an Base DN mícheart", + "Testing configuration…" : "Cumraíocht á thástáil…", + "Configuration incorrect" : "Cumraíocht mícheart", + "Configuration incomplete" : "Cumraíocht neamhiomlán", + "Configuration OK" : "Cumraíocht OK", + "Select groups" : "Roghnaigh grúpaí", + "Select object classes" : "Roghnaigh ranganna oibiachta", + "Please check the credentials, they seem to be wrong." : "Seiceáil na dintiúir, is cosúil go bhfuil siad mícheart le do thoil.", + "Please specify the port, it could not be auto-detected." : "Sonraigh an port le do thoil, níorbh fhéidir é a bhrath go huathoibríoch.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Níorbh fhéidir an bonn DN a bhrath go huathoibríoch, athbhreithnigh dintiúir, óstach agus port le do thoil.", + "Could not detect Base DN, please enter it manually." : "Níorbh fhéidir Bonn DN a bhrath, cuir isteach é de láimh le do thoil.", + "{nthServer}. Server" : "{nthServer}. Freastalaí", + "No object found in the given Base DN. Please revise." : "Níor aimsíodh aon réad sa Bhonn DN a thugtar. Athbhreithnigh le do thoil.", + "More than 1,000 directory entries available." : "Níos mó ná 1,000 iontráil eolaire ar fáil.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Tá iontráil {objectsFound} ar fáil laistigh den Bhunáit DN a soláthraíodh","{objectsFound} iontrálacha ar fáil laistigh den Bhunáit DN a soláthraíodh","{objectsFound} iontrálacha ar fáil laistigh den Bhunáit DN a soláthraíodh","{objectsFound} iontrálacha ar fáil laistigh den Bhunáit DN a soláthraíodh","{objectsFound} iontrálacha ar fáil laistigh den Bhunáit DN a soláthraíodh"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Tharla earráid. Seiceáil an Base DN, chomh maith le socruithe ceangail agus dintiúir le do thoil.", + "Do you really want to delete the current Server Configuration?" : "An bhfuil tú cinnte gur mhaith leat Cumraíocht an Fhreastalaí reatha a scriosadh?", + "Confirm Deletion" : "Deimhnigh Scriosadh", + "Mappings cleared successfully!" : "Mappings glanta go rathúil!", + "Error while clearing the mappings." : "Earráid agus na mapálacha á ghlanadh.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Ní cheadaítear ceangal gan ainm. Tabhair DN Úsáideora agus Pasfhocal le do thoil.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Earráid Oibríochtaí LDAP. Seans nach gceadófar ceangal gan ainm.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Theip ar shábháil. Cinntigh le do thoil go bhfuil an bunachar sonraí in Oibriú le do thoil. Athlódáil roimh leanúint ar aghaidh.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cumasóidh sé fiosruithe uathoibríocha LDAP má aistrítear an modh. Ag brath ar do mhéid LDAP féadfaidh siad tamall a ghlacadh. An bhfuil tú fós ag iarraidh an mód a athrú?", + "Mode switch" : "Athrú mód", + "Select attributes" : "Roghnaigh tréithe", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Úsáideoir gan aimsiú. Seiceáil do chuid tréithe logáil isteach agus ainm úsáideora le do thoil. Scagaire éifeachtach (le cóipeáil agus greamaigh le haghaidh bailíochtú na n-orduithe):<br/>", + "User found and settings verified." : "Fuarthas an t-úsáideoir agus fíoraíodh na socruithe.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Smaoinigh ar do chuardach a chaolú, mar gur chuimsigh sé go leor úsáideoirí, agus ní bheidh ach an chéad duine acu in ann logáil isteach.", + "An unspecified error occurred. Please check log and settings." : "Tharla earráid neamhshonraithe. Seiceáil le do thoil logáil agus socruithe le do thoil.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Tá an scagaire cuardaigh neamhbhailí, is dócha mar gheall ar cheisteanna comhréire amhail líon míchothrom na lúibíní oscailte agus dúnta. Athbhreithnigh le do thoil.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Tharla earráid cheangail le LDAP/AD. Seiceáil an t-óstach, an port agus na dintiúir le do thoil.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Tá coinneálaí an ionaid \"%uid\" ar iarraidh. Cuirfear an t-ainm logála isteach ina áit agus LDAP/AD á cheistiú.", + "Please provide a login name to test against" : "Tabhair ainm logáil isteach le tástáil ina choinne le do thoil", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Díchumasaíodh an bosca grúpa toisc nach dtacaíonn an freastalaí LDAP/AD le memberOf.", + "Password change rejected. Hint: %s" : "Diúltaíodh don athrú pasfhocal. Leid: %s", + "Mandatory field \"%s\" left empty" : "Réimse éigeantach \"%s\"fágtha folamh", + "A password is given, but not an LDAP agent" : "Tugtar pasfhocal, ach ní thugtar do ghníomhaire LDAP", + "No password is given for the user agent" : "Ní thugtar aon phasfhocal don ghníomhaire úsáideora", + "No LDAP base DN was given" : "Níor tugadh bonn LDAP DN", + "User base DN is not a subnode of global base DN" : "Ní fonód de bhonn domhanda DN é an bonn úsáideora DN", + "Group base DN is not a subnode of global base DN" : "Ní fonód de bhonn domhanda DN é bonnghrúpa DN", + "Login filter does not contain %s placeholder." : "Níl %s coinneálaí logála isteach sa scagaire logála isteach.", + "Please login with the new password" : "Logáil isteach leis an bpasfhocal nua le do thoil", + "LDAP User backend" : "Inneall Úsáideora LDAP", + "Your password will expire tomorrow." : "Rachaidh do phasfhocal in éag amárach.", + "Your password will expire today." : "Rachaidh do phasfhocal in éag inniu.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Rachaidh do phasfhocal in éag laistigh de %n lá.","Rachaidh do phasfhocal in éag laistigh de %n lá.","Rachaidh do phasfhocal in éag laistigh de %n lá.","Rachaidh do phasfhocal in éag laistigh de %n lá.","Rachaidh do phasfhocal in éag laistigh de %n lá."], + "LDAP/AD integration" : "Comhtháthú LDAP/AD", + "LDAP Connection" : "Ceangal LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Theip ar cheangal don chumraíocht LDAP seo: %s","Theip ar cheangal le haghaidh %n cumraíochtaí LDAP: %s","Theip ar cheangal le haghaidh %n cumraíochtaí LDAP: %s","Theip ar cheangal le haghaidh %n cumraíochtaí LDAP: %s","Theip ar cheangal le haghaidh %n cumraíochtaí LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Theip ar chuardach don chumraíocht LDAP seo: %s","Theip ar chuardach le haghaidh %n cumraíochtaí LDAP: %s","Theip ar chuardach le haghaidh %n cumraíochtaí LDAP: %s","Theip ar chuardach le haghaidh %n cumraíochtaí LDAP: %s","Theip ar chuardach le haghaidh %n cumraíochtaí LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Tá cumraíocht LDAP neamhghníomhach: %s","Tá %n cumraíocht LDAP neamhghníomhach: %s","Tá %n cumraíocht LDAP neamhghníomhach: %s","Tá %n cumraíocht LDAP neamhghníomhach: %s","Tá %n cumraíocht LDAP neamhghníomhach: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Oibríonn ceangal agus cuardach ar an gceangal LDAP cumraithe (%s)","Oibríonn ceangal agus cuardach ar na naisc LDAP go léir atá cumraithe %n (%s)","Oibríonn ceangal agus cuardach ar na naisc LDAP go léir atá cumraithe %n (%s)","Oibríonn ceangal agus cuardach ar na naisc LDAP go léir atá cumraithe %n (%s)","Oibríonn ceangal agus cuardach ar na naisc LDAP go léir atá cumraithe %n (%s)"], + "Invalid LDAP UUIDs" : "UUIDanna LDAP neamhbhailí", + "None found" : "Níor aimsíodh aon cheann", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Fuarthas UUIDanna neamhbhailí de chuntais nó de ghrúpaí LDAP. Athbhreithnigh do shocruithe \"Sáraigh braite UUID\" sa chuid Saineolaithe de chumraíocht LDAP agus úsáid \"occ ldap:update-uuid\" chun iad a nuashonrú le do thoil.", + "_%n group found_::_%n groups found_" : ["%n grúpa aimsithe","%n grúpaí aimsithe","%n grúpaí aimsithe","%n grúpaí aimsithe","%n grúpaí aimsithe"], + "> 1000 groups found" : "> Fuarthas 1000 grúpaí", + "> 1000 users found" : "> Fuarthas 1000 úsáideoirí", + "_%n user found_::_%n users found_" : ["%núsáideoir aimsithe","%núsáideoirí aimsithe","%n úsáideoirí aimsithe","%n úsáideoirí aimsithe","%n úsáideoirí aimsithe"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Níorbh fhéidir aitreabúid ainm taispeána úsáideora a bhrath. Sonraigh tú féin é i ardsocruithe LDAP le do thoil.", + "Could not find the desired feature" : "Níorbh fhéidir an ghné inmhianaithe a aimsiú", + "Invalid Host" : "Óstach Neamhbhailí", + "LDAP user and group backend" : "Úsáideoir LDAP agus inneall grúpa", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Cuireann an feidhmchlár seo ar chumas riarthóirí Nextcloud a nascadh le heolaire úsáideoirí atá bunaithe ar LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Cuireann an feidhmchlár seo ar chumas riarthóirí Nextcloud a nascadh le heolaire úsáideoirí atá bunaithe ar LDAP chun úsáideoirí, grúpaí agus tréithe úsáideoirí a fhíordheimhniú agus a sholáthar. Is féidir le riarthóirí an feidhmchlár seo a chumrú chun nascadh le heolaire LDAP amháin nó níos mó nó le hEolairí Gníomhacha trí chomhéadan LDAP. Is féidir tréithe ar nós cuóta úsáideora, ríomhphost, pictiúir avatar, ballraíocht ghrúpa agus níos mó a tharraingt isteach in Nextcloud ó eolaire leis na ceisteanna agus na scagairí cuí.\n\nLogálann úsáideoir isteach ar Nextcloud lena dintiúir LDAP nó AD, agus tugtar rochtain dó bunaithe ar iarratas fíordheimhnithe a láimhseálann an freastalaí LDAP nó AD. Ní stórálann Nextcloud pasfhocail LDAP nó AD, ach úsáidtear na dintiúir seo chun úsáideoir a fhíordheimhniú agus ansin úsáideann Nextcloud seisiún don ID úsáideora. Tá tuilleadh faisnéise ar fáil i gcáipéisíocht an LDAP Úsáideoir agus Inneall Grúpa.", + "Test Configuration" : "Cumraíocht Tástála", + "Help" : "Cabhrú", + "Groups meeting these criteria are available in %s:" : "Tá grúpaí a chomhlíonann na critéir seo ar fáil i %s:", + "Only these object classes:" : "Na haicmí oibiachta seo amháin:", + "Only from these groups:" : "Ó na grúpaí seo amháin:", + "Search groups" : "Cuardaigh grúpaí", + "Available groups" : "Grúpaí atá ar fáil", + "Selected groups" : "Grúpaí roghnaithe", + "Edit LDAP Query" : "Cuir Iarratas LDAP in eagar", + "LDAP Filter:" : "Scagaire LDAP:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Sonraíonn an scagaire na grúpaí LDAP a mbeidh rochtain acu ar an gcás %s.", + "Verify settings and count the groups" : "Fíoraigh socruithe agus comhaireamh na grúpaí", + "When logging in, %s will find the user based on the following attributes:" : "Nuair a bheidh tú ag logáil isteach, gheobhaidh %s an t-úsáideoir bunaithe ar na tréithe seo a leanas:", + "LDAP/AD Username:" : "Ainm Úsáideora LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Ligeann sé logáil isteach in aghaidh an ainm úsáideora LDAP/AD, arb é \"uid\" nó \"sAMAccountName\" é agus a bhraitear.", + "LDAP/AD Email Address:" : "Seoladh Ríomhphoist LDAP/AD:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Ligeann sé logáil isteach i gcoinne tréith ríomhphoist. \"mail\" agus \"mailPrimaryAddress\" ceadaithe.", + "Other Attributes:" : "Tréithe Eile:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Sainmhíníonn sé an scagaire le cur i bhfeidhm, nuair a dhéantar iarracht logáil isteach. Cuirtear \"%%uid\" in ionad an ainm úsáideora sa ghníomh logála isteach. Sampla: \"uid=%%uid\"", + "Test Loginname" : "Tástáil Ainm Logála", + "Attempts to receive a DN for the given loginname and the current login filter" : "Iarrachtaí ar DN a fháil don logainm tugtha agus don scagaire logála isteach reatha", + "Verify settings" : "Fíoraigh socruithe", + "%s. Server:" : "%s. Freastalaí:", + "Add a new configuration" : "Cuir cumraíocht nua leis", + "Copy current configuration into new directory binding" : "Cóipeáil an chumraíocht reatha i gceangal eolaire nua", + "Delete the current configuration" : "Scrios an chumraíocht reatha", + "Host" : "Óstach", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Is féidir leat an prótacal a fhágáil ar lár, mura dteastaíonn SSL uait. Más ea, cuir tús le ldaps://", + "Port" : "Port", + "Detect Port" : "Braith Port", + "User DN" : "Úsáideoir 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 an chliaint-úsáideoir lena ndéanfar an ceangal, e.g. uid=agent,dc=example,dc=com. Le rochtain gan ainm, fág DN agus Pasfhocal folamh.", + "Password" : "Pasfhocal", + "For anonymous access, leave DN and Password empty." : "Le rochtain gan ainm, fág DN agus Pasfhocal folamh.", + "Save Credentials" : "Sábháil Dintiúir", + "One Base DN per line" : "Bonn DN amháin in aghaidh an líne", + "You can specify Base DN for users and groups in the Advanced tab" : "Is féidir leat Bonn DN a shonrú d’úsáideoirí agus do ghrúpaí sa chluaisín Casta", + "Detect Base DN" : "Braith Bonn DN", + "Test Base DN" : "Bonn Tástála DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Seachnaíonn iarratais uathoibríocha LDAP. Níos fearr le haghaidh socruithe níos mó, ach teastaíonn roinnt eolais LDAP.", + "Manually enter LDAP filters (recommended for large directories)" : "Iontráil scagairí LDAP de láimh (molta le haghaidh eolairí móra)", + "Listing and searching for users is constrained by these criteria:" : "Tá liostú agus cuardach úsáideoirí srianta ag na critéir seo:", + "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." : "Is iad na haicmí oibiachta is coitianta d’úsáideoirí ná Duine eagraíochtúil, duine, úsáideoir, agus inetOrgPerson. Mura bhfuil tú cinnte cén aicme oibiachta le roghnú, téigh i gcomhairle le riarthóir do eolaire le do thoil.", + "The filter specifies which LDAP users shall have access to the %s instance." : "Sonraíonn an scagaire cé na húsáideoirí LDAP a mbeidh rochtain acu ar an gcás %s.", + "Verify settings and count users" : "Fíoraigh socruithe agus comhaireamh úsáideoirí", + "Saving" : "Shábháil", + "Back" : "Ar ais", + "Continue" : "Leanúint ar aghaidh", + "Please renew your password." : "Athnuaigh do phasfhocal le do thoil.", + "An internal error occurred." : "Tharla earráid inmheánach.", + "Please try again or contact your administrator." : "Bain triail eile as nó déan teagmháil le do riarthóir.", + "Current password" : "Pasfhocal reatha", + "New password" : "Focal Faire Nua", + "Renew password" : "Athnuaigh pasfhocal", + "Wrong password." : "Pasfhocal mícheart.", + "Cancel" : "Cealaigh", + "Server" : "Freastalaí", + "Users" : "Úsáideoirí", + "Login Attributes" : "Tréithe Logála Isteach", + "Groups" : "Grúpaí", + "Expert" : "Saineolaí", + "Advanced" : "Casta", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Rabhadh:</b> Níl an modúl PHP LDAP suiteáilte, ní oibreoidh an t-inneall. Iarr ar do riarthóir córais é a shuiteáil le do thoil.", + "Connection Settings" : "Socruithe Ceangail", + "Configuration Active" : "Cumraíocht Ghníomhach", + "When unchecked, this configuration will be skipped." : "Nuair nach ndéantar í a sheiceáil, déanfar an chumraíocht seo a scipeáil.", + "Backup (Replica) Host" : "Cúltaca (Macasamhail) Óstach", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Tabhair óstach cúltaca roghnach. Caithfidh gur macasamhail é den phríomhfhreastalaí LDAP/AD.", + "Backup (Replica) Port" : "Cúltaca (Macasamhail) Port", + "Disable Main Server" : "Díchumasaigh Príomhfhreastalaí", + "Only connect to the replica server." : "Ná déan ach ceangal leis an bhfreastalaí macasamhail.", + "Turn off SSL certificate validation." : "Múch bailíochtú teastais 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." : "Ní mholtar é, bain úsáid as le haghaidh tástála amháin! Mura n-oibríonn an ceangal ach leis an rogha seo, iompórtáil teastas SSL an fhreastalaí LDAP i do fhreastalaí %s.", + "Cache Time-To-Live" : "Taisce Am-Chun-Beo", + "in seconds. A change empties the cache." : "i soicindí. Folaíonn athrú an taisce.", + "Directory Settings" : "Socruithe Eolaire", + "User Display Name Field" : "Réimse Ainm Taispeána Úsáideora", + "The LDAP attribute to use to generate the user's display name." : "An tréith LDAP le húsáid chun ainm taispeána an úsáideora a ghiniúint.", + "2nd User Display Name Field" : "2 Réimse Ainm Taispeána Úsáideora", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Roghnach. Aitreabúid LDAP le cur leis an ainm taispeána idir lúibíní. Torthaí i e.g. »John Doe (john.doe@example.org)«.", + "Base User Tree" : "Crann Úsáideora Bonn", + "One User Base DN per line" : "Bonn Úsáideora amháin DN in aghaidh na líne", + "User Search Attributes" : "Tréithe Cuardaigh Úsáideora", + "Optional; one attribute per line" : "Roghnach; tréith amháin in aghaidh an líne", + "Disable users missing from LDAP" : "Díchumasaigh úsáideoirí in easnamh ó LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Nuair a chuirtear ar siúl é, díchumasófar úsáideoirí a allmhairítear ó LDAP atá in easnamh ansin", + "Group Display Name Field" : "Réimse Ainm Taispeána Grúpa", + "The LDAP attribute to use to generate the groups's display name." : "An tréith LDAP le húsáid chun ainm taispeána an ghrúpaí a ghiniúint.", + "Base Group Tree" : "Crann Bun-ghrúpa", + "One Group Base DN per line" : "Bonn Grúpa amháin DN in aghaidh na líne", + "Group Search Attributes" : "Tréithe Cuardach Grúpa", + "Group-Member association" : "Comhlachas Grúpa-Ball", + "Dynamic Group Member URL" : "URL Ball Grúpa Dinimiciúla", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "An aitreabúid LDAP go bhfuil URL cuardaigh LDAP ar oibiachtaí grúpa a shocraíonn cad iad na réada a bhaineann leis an ngrúpa. (Díchumasaíonn socrú folamh feidhmiúlacht bhallraíocht ghrúpa dinimiciúil.)", + "Nested Groups" : "Grúpaí Neadaithe", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Nuair a chuirtear ar siúl é, tacaítear le grúpaí ina bhfuil grúpaí. (Ní oibríonn sé ach amháin má tá DNanna san aitreabúid bhall grúpa.)", + "Paging chunksize" : "Paging smután", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize a úsáidtear le haghaidh cuardaigh leathanaigh LDAP a d'fhéadfadh torthaí toirtiúla a fháil ar nós áirimh úsáideora nó grúpa. (Má shocraítear é 0, díchumasaítear cuardaigh leathanacháilte LDAP sna cásanna sin.)", + "Enable LDAP password changes per user" : "Cumasaigh athruithe pasfhocail LDAP in aghaidh an úsáideora", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Ceadaigh d’úsáideoirí LDAP a bpasfhocal a athrú agus cead a thabhairt d’Oll-Riarthóirí agus do Riarthóirí Grúpa pasfhocal a n-úsáideoirí LDAP a athrú. Ní oibríonn sé ach nuair a bhíonn polasaithe rialaithe rochtana cumraithe dá réir ar an bhfreastalaí LDAP. Toisc go seoltar pasfhocail i ngnáth-théacs chuig an bhfreastalaí LDAP, ní mór criptiú iompair a úsáid agus ba cheart hash pasfhocail a chumrú ar an bhfreastalaí LDAP.", + "(New password is sent as plain text to LDAP)" : "(Seoltar pasfhocal nua mar ghnáth-théacs chuig LDAP)", + "Default password policy DN" : "Beartas réamhshocraithe pasfhocail DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "An DN de pholasaí réamhshocraithe pasfhocail a úsáidfear chun pasfhocal a láimhseáil as feidhm. Ní oibríonn sé ach amháin nuair a chumasaítear athruithe pasfhocail LDAP in aghaidh an úsáideora agus nuair nach dtacaítear leis ach ó OpenLDAP. Fág folamh chun láimhseáil pasfhocal éaga a dhíchumasú.", + "Special Attributes" : "Tréithe Speisialta", + "Quota Field" : "Réimse Cuóta", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Fág folamh le haghaidh cuóta réamhshocraithe an úsáideora. Seachas sin, sonraigh tréith LDAP/AD.", + "Quota Default" : "Réamhshocrú Cuóta", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sáraigh cuóta réamhshocraithe d’úsáideoirí LDAP nach bhfuil cuóta socraithe acu sa Réimse Cuóta.", + "Email Field" : "Réimse Ríomhphost", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Socraigh ríomhphost an úsáideora óna tréith LDAP. Fág folamh é le haghaidh iompair réamhshocraithe.", + "User Home Folder Naming Rule" : "Riail Ainmnithe Fillteán Baile an Úsáideora", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Fág folamh le haghaidh ainm úsáideora (réamhshocraithe). Seachas sin, sonraigh tréith LDAP/AD.", + "\"$home\" Placeholder Field" : "Réimse Sealbhóir Áite \"$home\".", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Cuirfear luach na haitreabúide sonraithe in ionad $home i gcumraíocht stórála seachtrach", + "User Profile Attributes" : "Tréithe Próifíl Úsáideora", + "Phone Field" : "Réimse Fón", + "User profile Phone will be set from the specified attribute" : "Socrófar fón próifíl úsáideora ón tréith shonraithe", + "Website Field" : "Réimse Gréasáin", + "User profile Website will be set from the specified attribute" : "Próifíl úsáideora Socrófar suíomh Gréasáin ón tréith shonraithe", + "Address Field" : "Réimse Seoladh", + "User profile Address will be set from the specified attribute" : "Socrófar Seoladh phróifíl úsáideora ón tréith shonraithe", + "Twitter Field" : "Réimse Twitter", + "User profile Twitter will be set from the specified attribute" : "Socrófar próifíl úsáideora Twitter ón tréith shonraithe", + "Fediverse Field" : "Réimse Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Socrófar próifíl úsáideora Fediverse ón tréith shonraithe", + "Organisation Field" : "Réimse Eagrúcháin", + "User profile Organisation will be set from the specified attribute" : "Próifíl úsáideora Socrófar Eagraíocht ón tréith shonraithe", + "Role Field" : "Réimse Ról", + "User profile Role will be set from the specified attribute" : "Próifíl úsáideora Socrófar Ról ón tréith shonraithe", + "Headline Field" : "Réimse Ceannlíne", + "User profile Headline will be set from the specified attribute" : "Socrófar Ceannlíne próifíle úsáideora ón tréith shonraithe", + "Biography Field" : "Réimse Beathaisnéis", + "User profile Biography will be set from the specified attribute" : "Socrófar Beathaisnéis phróifíl úsáideora ón tréith shonraithe", + "Birthdate Field" : "Réimse Breithlá", + "User profile Date of birth will be set from the specified attribute" : "Próifíl úsáideora Socrófar dáta breithe ón tréith shonraithe", + "Pronouns Field" : "Réimse Forainmneacha", + "User profile Pronouns will be set from the specified attribute" : "Socrófar Forainmneacha próifíle úsáideora ón aitreabúid sonraithe", + "Internal Username" : "Ainm Úsáideora Inmheánach", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De réir réamhshocraithe cruthófar an t-ainm úsáideora inmheánach ón aitreabúid UUID. Cinntíonn sé go bhfuil an t-ainm úsáideora uathúil agus ní gá carachtair a thiontú. Tá an srian ar an ainm úsáideora inmheánach nach gceadaítear ach na carachtair seo: [a-zA-Z0-9_.@-]. Cuirtear a gcomhfhreagras ASCII in ionad carachtair eile nó fágtar ar lár iad. Nuair a bhíonn imbhuailtí cuirfear uimhir leis/méadófar é. Úsáidtear an t-ainm úsáideora inmheánach chun úsáideoir a aithint go hinmheánach. Is é an t-ainm réamhshocraithe é freisin don fhillteán baile úsáideora. Is cuid de URLanna cianda é freisin, mar shampla do gach seirbhís DAV. Leis an socrú seo, is féidir an t-iompar réamhshocraithe a shárú. Ní bheidh éifeacht ag athruithe ach ar úsáideoirí LDAP nua-mhapáilte (curtha leis). Fág é folamh le haghaidh iompar réamhshocraithe.", + "Internal Username Attribute:" : "Tréith Ainm Úsáideora Inmheánach:", + "Override UUID detection" : "Sáraigh brath 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." : "De réir réamhshocraithe, braitear an aitreabúid UUID go huathoibríoch. Úsáidtear an tréith UUID chun úsáideoirí agus grúpaí LDAP a shainaithint gan amhras. Chomh maith leis sin, cruthófar an t-ainm úsáideora inmheánach bunaithe ar an UUID, mura sonraítear a mhalairt thuas. Is féidir leat an socrú a shárú agus tréith de do rogha a chur ar aghaidh. Ní mór duit a chinntiú gur féidir an tréith is rogha leat a fháil d’úsáideoirí agus do ghrúpaí araon agus go bhfuil sé uathúil. Fág é folamh le haghaidh iompar réamhshocraithe. Ní bheidh éifeacht ag athruithe ach ar úsáideoirí agus grúpaí LDAP nua-mhapáilte (curtha leis).", + "UUID Attribute for Users:" : "Tréith UUID d'Úsáideoirí:", + "UUID Attribute for Groups:" : "Tréith UUID do Ghrúpaí:", + "Username-LDAP User Mapping" : "Mapáil Úsáideora Ainm Úsáideora-LDAP", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Úsáidtear ainmneacha úsáideoirí chun meiteashonraí a stóráil agus a shannadh. Chun úsáideoirí a shainaithint agus a aithint go beacht, beidh ainm úsáideora inmheánach ag gach úsáideoir LDAP. Teastaíonn mapáil ón ainm úsáideora go dtí an t-úsáideoir LDAP chuige seo. Tá an t-ainm úsáideora cruthaithe mapáilte chuig UUID an úsáideora LDAP. Ina theannta sin tá an DN i dtaisce freisin chun idirghníomhaíocht LDAP a laghdú, ach ní úsáidtear é le haghaidh aitheantais. Má athraíonn an DN, beidh na hathruithe le fáil. Úsáidtear an t-ainm úsáideora inmheánach ar fad. Beidh rudaí fágtha i ngach áit chun na mapálacha a ghlanadh. Ní íogair don chumraíocht é na mapálacha a ghlanadh, bíonn tionchar aige ar gach cumraíocht LDAP! Ná glan na mapálacha riamh i dtimpeallacht táirgthe, ach amháin ag céim tástála nó turgnamhach.", + "Clear Username-LDAP User Mapping" : "Glan Léarscáiliú Úsáideora Ainm Úsáideora-LDAP", + "Clear Groupname-LDAP Group Mapping" : "Glan Léarscáiliú Grúpa Ainm an Ghrúpa-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Cumraíocht neamhbhailí. Féach ar na logaí le haghaidh tuilleadh sonraí le do thoil." +},"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);" +}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js index bf91efe6c6a..a39e92ab1f8 100644 --- a/apps/user_ldap/l10n/gl.js +++ b/apps/user_ldap/l10n/gl.js @@ -3,14 +3,15 @@ OC.L10N.register( { "Failed to clear the mappings." : "Non foi posíbel limpar as asignacións.", "Failed to delete the server configuration" : "Non foi posíbel eliminar a configuración do servidor", - "Invalid configuration: Anonymous binding is not allowed." : "A configuración non é correcta: o vínculo anónimo non está permitido.", + "Invalid configuration: Anonymous binding is not allowed." : "A configuración non é correcta: a vinculación non está permitida.", "Valid configuration, connection established!" : "A configuración é correcta, estabeleceuse a conexión!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "A configuración é correcta, mais o vínculo falla. Comprobe os axustes do servidor e as credenciais.", - "Invalid configuration. Please have a look at the logs for further details." : "A configuración non é correcta. Bótelle unha ollada aos rexistros para obter máis detalles.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "A configuración é correcta, mais fallou a vinculación. Comprobe os axustes do servidor e as credenciais.", + "Invalid configuration: %s" : "Configuración incorrecta: %s", "No action specified" : "Non se especificou unha acción", "No configuration specified" : "Non se especificou unha configuración", "No data specified" : "Non se especificaron datos", - " Could not set configuration %s" : "Non foi posíbel estabelecer a configuración %s", + "Invalid data specified" : "Datos especificados non válidos", + "Could not set configuration %1$s to %2$s" : "Non foi posíbel definir a configuración %1$s a %2$s", "Action does not exist" : "Non existe esta acción", "Renewing …" : "Renovando…", "Very weak password" : "Contrasinal moi feble", @@ -19,13 +20,13 @@ OC.L10N.register( "Good password" : "Bo contrasinal", "Strong password" : "Contrasinal forte", "The Base DN appears to be wrong" : "O DN base semella ser erróneo", - "Testing configuration…" : "Probando a configuración...", + "Testing configuration…" : "Probando a configuración…", "Configuration incorrect" : "Configuración incorrecta", "Configuration incomplete" : "Configuración incompleta", "Configuration OK" : "Configuración correcta", "Select groups" : "Seleccionar grupos", "Select object classes" : "Seleccione as clases de obxectos", - "Please check the credentials, they seem to be wrong." : "Comprobe as credenciais, semella que son incorrectas.", + "Please check the credentials, they seem to be wrong." : "Comprobe as credenciais, semella que son erróneas.", "Please specify the port, it could not be auto-detected." : "Especifique o porto, non foi posíbel detectalo automaticamente.", "Base DN could not be auto-detected, please revise credentials, host and port." : "Non foi posíbel detectar automaticamente o DN base, revise as credenciais, a máquina e o porto.", "Could not detect Base DN, please enter it manually." : "Non foi posíbel detectar o DN base, introdúzao manualmente.", @@ -46,28 +47,45 @@ OC.L10N.register( "Select attributes" : "Seleccione os atributos", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Non se atopou o usuario. Recomendase consultar os atributos de acceso e o nome de usuario. Filtro eficaz (copiar e pegar para a validación en liña de ordes): <br/>", "User found and settings verified." : "Atopouse o usuario e verificáronse os axustes.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrange moitos usuarios, apenas o primeiro deles poderá acceder.\n", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrangue moitos usuarios, apenas o primeiro deles poderá acceder.", "An unspecified error occurred. Please check log and settings." : "Produciuse un erro non especificado. Comprobe o rexistro e os axustes.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de busca é incorrecto, probabelmente por mor de erros de sintaxe como un número impar de chaves de apertura/peche. Revíseo.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Produciuse un erro de conexión no LDAP / AD, comprobe a máquina o porto e as credenciais.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Non se atopou o «%u ID» do marcador de posición. Vai ser substituído co nome de acceso cando se consulta LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Produciuse un erro de conexión a LDAP/AD. Verifique a máquina, o porto e as credenciais.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta o marcador de substitución «%uid». Substitúese polo nome de acceso ao consultar LDAP/AD.", "Please provide a login name to test against" : "Forneza o nome de acceso para facer a proba", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "A caixa de grupo está desactivada, o servidor LDAP / AD non admite «memberOf».", - "Password change rejected. Hint: " : "Contrasinal rexeitado. Consello:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Desactivouse a caixa de grupo porque o servidor LDAP/AD non admite memberOf.", + "Password change rejected. Hint: %s" : "Contrasinal rexeitado. Consello: %s", + "Mandatory field \"%s\" left empty" : "Deixou baleiro o campo obrigatorio «%s»", + "A password is given, but not an LDAP agent" : "Indicou un contrasinal, mais non un axente LDAP", + "No password is given for the user agent" : "Non indicou un contrasinal para este axente de usuario", + "No LDAP base DN was given" : "Non se indicou un DN base de LDAP", + "User base DN is not a subnode of global base DN" : "O DN base do usuario non é un subnodo do DN base global", + "Group base DN is not a subnode of global base DN" : "O DN base de grupo non é un subnodo do DN base global", + "Login filter does not contain %s placeholder." : "O filtro de inicio de sesión non contén o marcador de substitución %s.", "Please login with the new password" : "Acceda co novo contrasinal", "LDAP User backend" : "Infraestrutura do usuario LDAP", "Your password will expire tomorrow." : "O seu contrasinal caduca mañá.", "Your password will expire today." : "O seu contrasinal caducará hoxe.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["O seu contrasinal caducará en %n día.","O seu contrasinal caducará en %n días."], - "LDAP / AD integration" : "Integración LDAP / AD", - "_%s group found_::_%s groups found_" : ["Atopouse %s grupo","Atopáronse %s grupos"], - "_%s user found_::_%s users found_" : ["Atopouse %s usuario","Atopáronse %s usuarios"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo vostede mesmo nos axustes avanzados de LDAP. ", + "LDAP/AD integration" : "Integración de LDAP/AD", + "LDAP Connection" : "Conexión LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Produciuse un fallo na vinculación desta configuración LDAP: %s","Produciuse un fallo na vinculación de %n configuracións LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Produciuse un fallo ao buscar esta configuración LDAP: %s","Produciuse un fallo ao buscar %n configuracións LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Hai unha configuración LDAP inactiva: %s","Hai %n configuracións LDAP inactivas: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["A vinculación e a busca funcionan na conexión LDAP configurada (%s)","A vinculación e a busca funciona en todas as %n conexións LDAP configuradas (%s)"], + "Invalid LDAP UUIDs" : "UUID de LDAP incorrectos", + "None found" : "Non se atopou ningún", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Atopáronse UUID incorrectos de contas ou grupos LDAP. Revise a súa configuración de «Anular a detección de UUID» na parte Experto da configuración LDAP e utilice «occ ldap:update-uuid» para actualizalos.", + "_%n group found_::_%n groups found_" : ["Atopouse %n grupo","Atopáronse %n grupos"], + "> 1000 groups found" : "> 1000 grupos atopados", + "> 1000 users found" : "> 1000 usuarios atopados", + "_%n user found_::_%n users found_" : ["%n usuario atopado","%n usuarios atopados"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo Vde. mesmo nos axustes avanzados de LDAP. ", "Could not find the desired feature" : "Non foi posíbel atopar a función desexada", "Invalid Host" : "Máquina incorrecta", "LDAP user and group backend" : "Infraestrutura de usuarios e grupos LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Esta aplicación permitelle aos administradores conectar Nextcloud a un directorio de usuarios baseado en LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Esta aplicación permítelle aos administradores conectar Nextcloud cun directorio de usuarios baseado en LDAP para a autenticación e aprovisionamento de usuarios, grupos e atributos de usuario. Os administradores poden configurar esta aplicación para conectarse a un ou máis directorios LDAP ou Active Directory mediante unha interface LDAP. Os atributos como cota de usuario, correo, imaxes de avatar, pertenza a grupos e máis poden incorporarse ao Nextcloud dende un directorio coas peticións e filtros axeitados.\n\nUn usuario rexistrase no Nextcloud coas súa credenciais LDAP ou AD e se lle concede acceso baseandose nunha petición de autenticación manexada polo servidor LDAP ou AD.Nexttcloud non almacen os contrasinais LDAP ou AD, senon que estas credenciais usanse para autenticar un usuario e após o Nextcloud emprega unha sesión para O ID do usuario. Ten dispoñíbel máis información na documentación da infraestrutura de usuarios e grupos LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Esta aplicación permítelle aos administradores conectar Nextcloud cun directorio de usuarios baseado en LDAP para a autenticación e aprovisionamento de usuarios, grupos e atributos de usuario. Os administradores poden configurar esta aplicación para conectarse a un ou máis directorios LDAP ou Active Directory mediante unha interface LDAP. Os atributos como cota de usuario, correo, imaxes de avatar, pertenza a grupos e máis poden incorporarse a Nextcloud desde un directorio coas peticións e filtros axeitados.\n\nUn usuario rexistrase en Nextcloud coas súa credenciais LDAP ou AD e se lle concede acceso baseandose nunha petición de autenticación manexada polo servidor LDAP ou AD.Nexttcloud non almacen os contrasinais LDAP ou AD, senon que estas credenciais usanse para autenticar un usuario e após Nextcloud emprega unha sesión para O ID do usuario. Ten dispoñíbel máis información na documentación da infraestrutura de usuarios e grupos LDAP.", "Test Configuration" : "Probar a configuración", "Help" : "Axuda", "Groups meeting these criteria are available in %s:" : "Os grupos que cumpren estes criterios están dispoñíbeis en %s:", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica que grupos LDAP teñen acceso á instancia %s.", "Verify settings and count the groups" : "Verificar os axustes e contar os grupos", "When logging in, %s will find the user based on the following attributes:" : "Ao acceder, %s atopa o usuario en función dos seguintes atributos:", - "LDAP / AD Username:" : "Nome de usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite o acceso co nome de usuario LDAP / AD, sexa «uid» ou «sAMAccountName« e será detectado.", - "LDAP / AD Email Address:" : "Enderezo de correo LDAP / AD:", + "LDAP/AD Username:" : "Nome de usuario LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite acceder co nome de usuario LDAP/AD, que é «uid» ou «sAMAccountName» e será detectado.", + "LDAP/AD Email Address:" : "Enderezo de correo LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite o acceso contra un atributo de correo-e. Permitirase «mail» e «mailPrimaryAddress».", "Other Attributes:" : "Outros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define o filtro que se aplica cando se intenta o acceso. «%%uid» substitúe o nome de usuario e a acción de acceso. Exemplo: «uid=%%uid» ", "Test Loginname" : "Probar o nome de acceso", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta recibir un DN para o nome de acceso indicado e o filtro de acceso actual", "Verify settings" : "Verificar os axustes", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Engadir unha configuración nova", @@ -98,7 +117,7 @@ OC.L10N.register( "Port" : "Porto", "Detect Port" : "Detectar o porto", "User DN" : "DN do usuario", - "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." : "O DN do cliente do usuario co que hai que estabelecer unha conexión, p.ex uid=axente, dc=exemplo, dc=com. Para o acceso anónimo deixe o DN e o contrasinal baleiros.", + "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." : "O DN do cliente do usuario co que realizará o vínculo, p. ex. uid=axente, dc=exemplo, dc=com. Para o acceso anónimo deixe o DN e o contrasinal baleiros.", "Password" : "Contrasinal", "For anonymous access, leave DN and Password empty." : "Para o acceso anónimo deixe o DN e o contrasinal baleiros.", "Save Credentials" : "Gardar as credenciais", @@ -106,7 +125,7 @@ OC.L10N.register( "You can specify Base DN for users and groups in the Advanced tab" : "Pode especificar o DN base para usuarios e grupos na lapela de «Avanzado»", "Detect Base DN" : "Detectar o DN base", "Test Base DN" : "Probar o DN base", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as solicitudes LDAP automáticas. E o mellor para as configuracións máis grandes, mais require algúns coñecementos de LDAP.", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as solicitudes LDAP automáticas. E o mellor para as configuracións máis grandes, mais precisa algúns coñecementos de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introduza manualmente os filtros LDAP (recomendado para directorios grandes)", "Listing and searching for users is constrained by these criteria:" : "A listaxe e a busca de usuarios están restrinxidos por estes criterios:", "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." : "As clases de obxecto máis comúns para os usuarios son «organizationalPerson», «person», «user» e «inetOrgPerson». Se non está seguro de que clase de obxecto ten que seleccionar, consulte co administrador de directorios.", @@ -117,11 +136,11 @@ OC.L10N.register( "Continue" : "Continuar", "Please renew your password." : "Renove o seu contrasinal.", "An internal error occurred." : "Produciuse un erro interno.", - "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", + "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto coa administración desta instancia.", "Current password" : "Contrasinal actual", "New password" : "Contrasinal novo", "Renew password" : "Renovar o contrasinal", - "Wrong password." : "Contrasinal incorrecto.", + "Wrong password." : "Contrasinal erróneo", "Cancel" : "Cancelar", "Server" : "Servidor", "Users" : "Usuarios", @@ -129,29 +148,31 @@ OC.L10N.register( "Groups" : "Grupos", "Expert" : "Experto", "Advanced" : "Avanzado", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Aviso:</b> O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte co administrador do sistema para instalalo.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte coa administración do sistema para instalalo.", "Connection Settings" : "Axustes da conexión", "Configuration Active" : "Configuración activa", "When unchecked, this configuration will be skipped." : "Se está sen marcar, omítese esta configuración.", - "Backup (Replica) Host" : "Servidor da copia de seguridade (réplica)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Indicar un servidor de copia de seguridade opcional. Debe ser unha réplica do servidor principal LDAP/AD.", - "Backup (Replica) Port" : "Porto da copia de seguridade (réplica)", + "Backup (Replica) Host" : "Servidor da copia de seguranza (réplica)", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Indicar un servidor de copia de seguranza opcional. Debe ser unha réplica do servidor principal LDAP/AD.", + "Backup (Replica) Port" : "Porto da copia de seguranza (réplica)", "Disable Main Server" : "Desactivar o servidor principal", "Only connect to the replica server." : "Conectar só co servidor de réplica.", "Turn off SSL certificate validation." : "Desactiva a validación do certificado 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." : "Non recomendado, utilizar só para probas! Se a conexión só funciona con esta opción importa o certificado SSL do servidor LDAP no seu servidor %s.", - "Cache Time-To-Live" : "Tempo de persistencia da caché", - "in seconds. A change empties the cache." : "en segundos. Calquera cambio baleira a caché.", + "Cache Time-To-Live" : "Tempo de persistencia da memoria tobo", + "in seconds. A change empties the cache." : "en segundos. Calquera cambio baleira a memoria tobo.", "Directory Settings" : "Axustes do directorio", "User Display Name Field" : "Campo de nome de usuario para amosar", "The LDAP attribute to use to generate the user's display name." : "O atributo LDAP a empregar para xerar o nome de usuario para amosar.", - "2nd User Display Name Field" : "2º campo de nome de usuario para amosar", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemple.org)».", + "2nd User Display Name Field" : "2.º campo de nome de usuario para amosar", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p. ex. «Xan Carallás (xan.carallas@example.org)».", "Base User Tree" : "Base da árbore de usuarios", "One User Base DN per line" : "Un DN base de usuario por liña", "User Search Attributes" : "Atributos de busca do usuario", "Optional; one attribute per line" : "Opcional; un atributo por liña", - "Group Display Name Field" : "Campo de mostra do nome de grupo", + "Disable users missing from LDAP" : "Desactivar usuarios que faltan en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cando estea activado, desactivaranse os usuarios importados de LDAP e que logo faltan", + "Group Display Name Field" : "Campo de nome de grupo para amosar", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP úsase para xerar os nomes dos grupos que amosar.", "Base Group Tree" : "Base da árbore de grupo", "One Group Base DN per line" : "Un DN base de grupo por liña", @@ -160,11 +181,11 @@ OC.L10N.register( "Dynamic Group Member URL" : "URL dinámico do membro do grupo", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "O atributo LDAP que nos obxectos de grupo contén un URL de busca LDAP que determina que obxectos pertencen ao grupo. (Un escenario baleiro desactiva a funcionalidade dinámica de pertenza ao grupo.)", "Nested Groups" : "Grupos aniñados", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Se está activado, admítense grupos que conteñen grupos. (Só funciona se o atributo de membro no grupo contén os DN.)", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Se está activado, admítense grupos que conteñen grupos. (Só funciona se o atributo de membros do grupo contén os DN.)", "Paging chunksize" : "Tamaño dos fragmentos paxinados", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamaño dos fragmentos utilizados para as buscas LDAP paxinadas, que poden devolver resultados voluminosos como usuario ou enumeración de grupo. (Se se estabelece a 0, desactívanse as buscas LDAP paxinadas nesas situacións.)", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamaño dos fragmentos utilizados para as buscas LDAP paxinadas, que poden devolver resultados voluminosos como usuario ou enumeración de grupo. (Se se axusta a 0, desactívanse as buscas LDAP paxinadas nesas situacións.)", "Enable LDAP password changes per user" : "Activar os cambios no contrasinal LDAP polo usuario", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permítelle aos usuarios LDAP cambiar o seu contrasinal e permite que os administradores e administradores de grupos, cambiar o contrasinal dos seus usuarios LDAP. Só funciona cando as directivas de control de acceso están configuradas conforme coas do servidor LDAP. Xa que os contrasinais son enviados en texto simple ao servidor, LDAP, debe empregarse o cifrado no transporte e o «hash» dos contrasinais debe ser configurado no servidor LDAP.", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permítelle aos usuarios LDAP cambiar o seu contrasinal e permite que os administradores e administradores de grupos, cambiar o contrasinal dos seus usuarios LDAP. Só funciona cando as directivas de control de acceso están configuradas conforme coas do servidor LDAP. Xa que os contrasinais son enviados en texto simple ao servidor, LDAP, debe empregarse o cifrado no transporte e o «resumo criptográfico dos contrasinais debe ser configurado no servidor LDAP.", "(New password is sent as plain text to LDAP)" : "(O novo contrasinal envíase como un texto simple para LDAP)", "Default password policy DN" : "DN da directiva de contrasinal predeterminado", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "O DN dunha directiva de contrasinais predeterminados que será usado para o control da caducidade dos contrasinais. Só funciona cando está activado o cambio do contrasinal LDAP polos usuarios e só está aceptado por OpenLDAP. Déixea baleira para desactivar o control da caducidade dos contrasinais.", @@ -172,23 +193,47 @@ OC.L10N.register( "Quota Field" : "Campo de cota", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para a cota predeterminada do usuario. Noutro caso, especifique un atributo LDAP/AD.", "Quota Default" : "Cota predeterminada", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobrescribir a cota predeterminada para usuarios LDAP que non teñen unha cota configurada no campo Cota.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular a cota predeterminada para usuarios LDAP que non teñen unha cota definida no campo Cota.", "Email Field" : "Campo do correo", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Axustar o correo do usuario dende un atributo LDAP. Déixeo baleiro para un comportamento predeterminado.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Definir o correo do usuario desde un atributo LDAP. Déixeo baleiro para un comportamento predeterminado.", "User Home Folder Naming Rule" : "Regra de nomeado do cartafol do usuario", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD.", - "\"$home\" Placeholder Field" : "Campo de marcador de posición «$home»", + "\"$home\" Placeholder Field" : "Campo de marcador de substitución «$home»", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Nunha configuración de almacenamento externo substituirase $home polo valor do atributo especificado", + "User Profile Attributes" : "Atributos do perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "O teléfono do perfil de usuario definirase a partir do atributo especificado", + "Website Field" : "Campo do sitio web", + "User profile Website will be set from the specified attribute" : "O sitio web do perfil de usuario definirase a partir do atributo especificado", + "Address Field" : "Campo de enderezo", + "User profile Address will be set from the specified attribute" : "O enderezo do perfil de usuario definirase a partir do atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "O perfil de usuario en Twitter definirase a partir do atributo especificado", + "Fediverse Field" : "Campo do Fediverso", + "User profile Fediverse will be set from the specified attribute" : "O perfil de usuario no Fediverso definirase a partir do atributo especificado", + "Organisation Field" : "Campo da organización", + "User profile Organisation will be set from the specified attribute" : "A organización do perfil de usuario definirase a partir do atributo especificado", + "Role Field" : "Campo de rol", + "User profile Role will be set from the specified attribute" : "O rol do perfil de usuario definirase a partir do atributo especificado", + "Headline Field" : "Campo de titular", + "User profile Headline will be set from the specified attribute" : "O título do perfil de usuario definirase a partir do atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "A biografía no perfil de usuario definirase a partir do atributo especificado", + "Birthdate Field" : "Campo de data de nacemento", + "User profile Date of birth will be set from the specified attribute" : "A data de nacemento no perfil do usuario definirase a partir do atributo especificado", + "Pronouns Field" : "Campo de pronomes", + "User profile Pronouns will be set from the specified attribute" : "Os pronomes no perfil de usuario definiranse a partir do atributo especificado", "Internal Username" : "Nome interno de usuario", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por omisión, o nome interno de usuario crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e non é necesario converter os caracteres. O nome interno de usuario ten a restrición de que só se admiten estes caracteres: [ a-zA-Z0-9_.@- ]. Outros caracteres son substituídos pola súa correspondencia ASCII ou simplemente omitidos. En caso de colisións engadirase/incrementarase un número. O nome interno de usuario usase para identificar internamente a un usuario. É tamén o nome predeterminado do cartafol de inicio do usuario. Tamén é parte dos URL remotos, por exemplo para todos os servizos *DAV. Con esta configuración, pódese anular o comportamento predeterminado. Déixeo baleiro para usar o comportamento predeterminado. Os cambios terán efecto só nos usuarios LDAP signados (engadidos) após os cambios.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De xeito predeterminado, o nome de usuario interno crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e que non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nos casos de colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén asignados (engadidos). Déixeo baleiro para o comportamento predeterminado.", "Internal Username Attribute:" : "Atributo do nome interno de usuario:", - "Override UUID detection" : "Ignorar a detección do 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." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vostede debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", + "Override UUID detection" : "Anular a detección do 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." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular o axuste e pasar un atributo da súa escolla. Asegúrese de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", "UUID Attribute for Users:" : "Atributo do UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo do UUID para grupos:", "Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario LDAP»", - "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Os nomes de usuario empréganse para almacenar e asignar metadatos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome interno de usuario. Isto require unha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun contorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Os nomes de usuario empréganse para almacenar e asignar metadatos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome interno de usuario. Isto precisa dunha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na memoria tobo, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun contorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", "Clear Username-LDAP User Mapping" : "Limpar a asignación do usuario ao «nome de usuario LDAP»", - "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»" + "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»", + "Invalid configuration. Please have a look at the logs for further details." : "A configuración non é correcta. Bótelle unha ollada aos rexistros para obter máis detalles." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json index 6cfeaca9824..58b0658ebf0 100644 --- a/apps/user_ldap/l10n/gl.json +++ b/apps/user_ldap/l10n/gl.json @@ -1,14 +1,15 @@ { "translations": { "Failed to clear the mappings." : "Non foi posíbel limpar as asignacións.", "Failed to delete the server configuration" : "Non foi posíbel eliminar a configuración do servidor", - "Invalid configuration: Anonymous binding is not allowed." : "A configuración non é correcta: o vínculo anónimo non está permitido.", + "Invalid configuration: Anonymous binding is not allowed." : "A configuración non é correcta: a vinculación non está permitida.", "Valid configuration, connection established!" : "A configuración é correcta, estabeleceuse a conexión!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "A configuración é correcta, mais o vínculo falla. Comprobe os axustes do servidor e as credenciais.", - "Invalid configuration. Please have a look at the logs for further details." : "A configuración non é correcta. Bótelle unha ollada aos rexistros para obter máis detalles.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "A configuración é correcta, mais fallou a vinculación. Comprobe os axustes do servidor e as credenciais.", + "Invalid configuration: %s" : "Configuración incorrecta: %s", "No action specified" : "Non se especificou unha acción", "No configuration specified" : "Non se especificou unha configuración", "No data specified" : "Non se especificaron datos", - " Could not set configuration %s" : "Non foi posíbel estabelecer a configuración %s", + "Invalid data specified" : "Datos especificados non válidos", + "Could not set configuration %1$s to %2$s" : "Non foi posíbel definir a configuración %1$s a %2$s", "Action does not exist" : "Non existe esta acción", "Renewing …" : "Renovando…", "Very weak password" : "Contrasinal moi feble", @@ -17,13 +18,13 @@ "Good password" : "Bo contrasinal", "Strong password" : "Contrasinal forte", "The Base DN appears to be wrong" : "O DN base semella ser erróneo", - "Testing configuration…" : "Probando a configuración...", + "Testing configuration…" : "Probando a configuración…", "Configuration incorrect" : "Configuración incorrecta", "Configuration incomplete" : "Configuración incompleta", "Configuration OK" : "Configuración correcta", "Select groups" : "Seleccionar grupos", "Select object classes" : "Seleccione as clases de obxectos", - "Please check the credentials, they seem to be wrong." : "Comprobe as credenciais, semella que son incorrectas.", + "Please check the credentials, they seem to be wrong." : "Comprobe as credenciais, semella que son erróneas.", "Please specify the port, it could not be auto-detected." : "Especifique o porto, non foi posíbel detectalo automaticamente.", "Base DN could not be auto-detected, please revise credentials, host and port." : "Non foi posíbel detectar automaticamente o DN base, revise as credenciais, a máquina e o porto.", "Could not detect Base DN, please enter it manually." : "Non foi posíbel detectar o DN base, introdúzao manualmente.", @@ -44,28 +45,45 @@ "Select attributes" : "Seleccione os atributos", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Non se atopou o usuario. Recomendase consultar os atributos de acceso e o nome de usuario. Filtro eficaz (copiar e pegar para a validación en liña de ordes): <br/>", "User found and settings verified." : "Atopouse o usuario e verificáronse os axustes.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrange moitos usuarios, apenas o primeiro deles poderá acceder.\n", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrangue moitos usuarios, apenas o primeiro deles poderá acceder.", "An unspecified error occurred. Please check log and settings." : "Produciuse un erro non especificado. Comprobe o rexistro e os axustes.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de busca é incorrecto, probabelmente por mor de erros de sintaxe como un número impar de chaves de apertura/peche. Revíseo.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Produciuse un erro de conexión no LDAP / AD, comprobe a máquina o porto e as credenciais.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Non se atopou o «%u ID» do marcador de posición. Vai ser substituído co nome de acceso cando se consulta LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Produciuse un erro de conexión a LDAP/AD. Verifique a máquina, o porto e as credenciais.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta o marcador de substitución «%uid». Substitúese polo nome de acceso ao consultar LDAP/AD.", "Please provide a login name to test against" : "Forneza o nome de acceso para facer a proba", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "A caixa de grupo está desactivada, o servidor LDAP / AD non admite «memberOf».", - "Password change rejected. Hint: " : "Contrasinal rexeitado. Consello:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Desactivouse a caixa de grupo porque o servidor LDAP/AD non admite memberOf.", + "Password change rejected. Hint: %s" : "Contrasinal rexeitado. Consello: %s", + "Mandatory field \"%s\" left empty" : "Deixou baleiro o campo obrigatorio «%s»", + "A password is given, but not an LDAP agent" : "Indicou un contrasinal, mais non un axente LDAP", + "No password is given for the user agent" : "Non indicou un contrasinal para este axente de usuario", + "No LDAP base DN was given" : "Non se indicou un DN base de LDAP", + "User base DN is not a subnode of global base DN" : "O DN base do usuario non é un subnodo do DN base global", + "Group base DN is not a subnode of global base DN" : "O DN base de grupo non é un subnodo do DN base global", + "Login filter does not contain %s placeholder." : "O filtro de inicio de sesión non contén o marcador de substitución %s.", "Please login with the new password" : "Acceda co novo contrasinal", "LDAP User backend" : "Infraestrutura do usuario LDAP", "Your password will expire tomorrow." : "O seu contrasinal caduca mañá.", "Your password will expire today." : "O seu contrasinal caducará hoxe.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["O seu contrasinal caducará en %n día.","O seu contrasinal caducará en %n días."], - "LDAP / AD integration" : "Integración LDAP / AD", - "_%s group found_::_%s groups found_" : ["Atopouse %s grupo","Atopáronse %s grupos"], - "_%s user found_::_%s users found_" : ["Atopouse %s usuario","Atopáronse %s usuarios"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo vostede mesmo nos axustes avanzados de LDAP. ", + "LDAP/AD integration" : "Integración de LDAP/AD", + "LDAP Connection" : "Conexión LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Produciuse un fallo na vinculación desta configuración LDAP: %s","Produciuse un fallo na vinculación de %n configuracións LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Produciuse un fallo ao buscar esta configuración LDAP: %s","Produciuse un fallo ao buscar %n configuracións LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Hai unha configuración LDAP inactiva: %s","Hai %n configuracións LDAP inactivas: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["A vinculación e a busca funcionan na conexión LDAP configurada (%s)","A vinculación e a busca funciona en todas as %n conexións LDAP configuradas (%s)"], + "Invalid LDAP UUIDs" : "UUID de LDAP incorrectos", + "None found" : "Non se atopou ningún", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Atopáronse UUID incorrectos de contas ou grupos LDAP. Revise a súa configuración de «Anular a detección de UUID» na parte Experto da configuración LDAP e utilice «occ ldap:update-uuid» para actualizalos.", + "_%n group found_::_%n groups found_" : ["Atopouse %n grupo","Atopáronse %n grupos"], + "> 1000 groups found" : "> 1000 grupos atopados", + "> 1000 users found" : "> 1000 usuarios atopados", + "_%n user found_::_%n users found_" : ["%n usuario atopado","%n usuarios atopados"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo Vde. mesmo nos axustes avanzados de LDAP. ", "Could not find the desired feature" : "Non foi posíbel atopar a función desexada", "Invalid Host" : "Máquina incorrecta", "LDAP user and group backend" : "Infraestrutura de usuarios e grupos LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Esta aplicación permitelle aos administradores conectar Nextcloud a un directorio de usuarios baseado en LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Esta aplicación permítelle aos administradores conectar Nextcloud cun directorio de usuarios baseado en LDAP para a autenticación e aprovisionamento de usuarios, grupos e atributos de usuario. Os administradores poden configurar esta aplicación para conectarse a un ou máis directorios LDAP ou Active Directory mediante unha interface LDAP. Os atributos como cota de usuario, correo, imaxes de avatar, pertenza a grupos e máis poden incorporarse ao Nextcloud dende un directorio coas peticións e filtros axeitados.\n\nUn usuario rexistrase no Nextcloud coas súa credenciais LDAP ou AD e se lle concede acceso baseandose nunha petición de autenticación manexada polo servidor LDAP ou AD.Nexttcloud non almacen os contrasinais LDAP ou AD, senon que estas credenciais usanse para autenticar un usuario e após o Nextcloud emprega unha sesión para O ID do usuario. Ten dispoñíbel máis información na documentación da infraestrutura de usuarios e grupos LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Esta aplicación permítelle aos administradores conectar Nextcloud cun directorio de usuarios baseado en LDAP para a autenticación e aprovisionamento de usuarios, grupos e atributos de usuario. Os administradores poden configurar esta aplicación para conectarse a un ou máis directorios LDAP ou Active Directory mediante unha interface LDAP. Os atributos como cota de usuario, correo, imaxes de avatar, pertenza a grupos e máis poden incorporarse a Nextcloud desde un directorio coas peticións e filtros axeitados.\n\nUn usuario rexistrase en Nextcloud coas súa credenciais LDAP ou AD e se lle concede acceso baseandose nunha petición de autenticación manexada polo servidor LDAP ou AD.Nexttcloud non almacen os contrasinais LDAP ou AD, senon que estas credenciais usanse para autenticar un usuario e após Nextcloud emprega unha sesión para O ID do usuario. Ten dispoñíbel máis información na documentación da infraestrutura de usuarios e grupos LDAP.", "Test Configuration" : "Probar a configuración", "Help" : "Axuda", "Groups meeting these criteria are available in %s:" : "Os grupos que cumpren estes criterios están dispoñíbeis en %s:", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica que grupos LDAP teñen acceso á instancia %s.", "Verify settings and count the groups" : "Verificar os axustes e contar os grupos", "When logging in, %s will find the user based on the following attributes:" : "Ao acceder, %s atopa o usuario en función dos seguintes atributos:", - "LDAP / AD Username:" : "Nome de usuario LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite o acceso co nome de usuario LDAP / AD, sexa «uid» ou «sAMAccountName« e será detectado.", - "LDAP / AD Email Address:" : "Enderezo de correo LDAP / AD:", + "LDAP/AD Username:" : "Nome de usuario LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite acceder co nome de usuario LDAP/AD, que é «uid» ou «sAMAccountName» e será detectado.", + "LDAP/AD Email Address:" : "Enderezo de correo LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite o acceso contra un atributo de correo-e. Permitirase «mail» e «mailPrimaryAddress».", "Other Attributes:" : "Outros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define o filtro que se aplica cando se intenta o acceso. «%%uid» substitúe o nome de usuario e a acción de acceso. Exemplo: «uid=%%uid» ", "Test Loginname" : "Probar o nome de acceso", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta recibir un DN para o nome de acceso indicado e o filtro de acceso actual", "Verify settings" : "Verificar os axustes", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Engadir unha configuración nova", @@ -96,7 +115,7 @@ "Port" : "Porto", "Detect Port" : "Detectar o porto", "User DN" : "DN do usuario", - "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." : "O DN do cliente do usuario co que hai que estabelecer unha conexión, p.ex uid=axente, dc=exemplo, dc=com. Para o acceso anónimo deixe o DN e o contrasinal baleiros.", + "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." : "O DN do cliente do usuario co que realizará o vínculo, p. ex. uid=axente, dc=exemplo, dc=com. Para o acceso anónimo deixe o DN e o contrasinal baleiros.", "Password" : "Contrasinal", "For anonymous access, leave DN and Password empty." : "Para o acceso anónimo deixe o DN e o contrasinal baleiros.", "Save Credentials" : "Gardar as credenciais", @@ -104,7 +123,7 @@ "You can specify Base DN for users and groups in the Advanced tab" : "Pode especificar o DN base para usuarios e grupos na lapela de «Avanzado»", "Detect Base DN" : "Detectar o DN base", "Test Base DN" : "Probar o DN base", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as solicitudes LDAP automáticas. E o mellor para as configuracións máis grandes, mais require algúns coñecementos de LDAP.", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as solicitudes LDAP automáticas. E o mellor para as configuracións máis grandes, mais precisa algúns coñecementos de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introduza manualmente os filtros LDAP (recomendado para directorios grandes)", "Listing and searching for users is constrained by these criteria:" : "A listaxe e a busca de usuarios están restrinxidos por estes criterios:", "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." : "As clases de obxecto máis comúns para os usuarios son «organizationalPerson», «person», «user» e «inetOrgPerson». Se non está seguro de que clase de obxecto ten que seleccionar, consulte co administrador de directorios.", @@ -115,11 +134,11 @@ "Continue" : "Continuar", "Please renew your password." : "Renove o seu contrasinal.", "An internal error occurred." : "Produciuse un erro interno.", - "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", + "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto coa administración desta instancia.", "Current password" : "Contrasinal actual", "New password" : "Contrasinal novo", "Renew password" : "Renovar o contrasinal", - "Wrong password." : "Contrasinal incorrecto.", + "Wrong password." : "Contrasinal erróneo", "Cancel" : "Cancelar", "Server" : "Servidor", "Users" : "Usuarios", @@ -127,29 +146,31 @@ "Groups" : "Grupos", "Expert" : "Experto", "Advanced" : "Avanzado", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Aviso:</b> O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte co administrador do sistema para instalalo.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> O módulo PHP LDAP non está instalado, o servidor non funcionará. Consulte coa administración do sistema para instalalo.", "Connection Settings" : "Axustes da conexión", "Configuration Active" : "Configuración activa", "When unchecked, this configuration will be skipped." : "Se está sen marcar, omítese esta configuración.", - "Backup (Replica) Host" : "Servidor da copia de seguridade (réplica)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Indicar un servidor de copia de seguridade opcional. Debe ser unha réplica do servidor principal LDAP/AD.", - "Backup (Replica) Port" : "Porto da copia de seguridade (réplica)", + "Backup (Replica) Host" : "Servidor da copia de seguranza (réplica)", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Indicar un servidor de copia de seguranza opcional. Debe ser unha réplica do servidor principal LDAP/AD.", + "Backup (Replica) Port" : "Porto da copia de seguranza (réplica)", "Disable Main Server" : "Desactivar o servidor principal", "Only connect to the replica server." : "Conectar só co servidor de réplica.", "Turn off SSL certificate validation." : "Desactiva a validación do certificado 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." : "Non recomendado, utilizar só para probas! Se a conexión só funciona con esta opción importa o certificado SSL do servidor LDAP no seu servidor %s.", - "Cache Time-To-Live" : "Tempo de persistencia da caché", - "in seconds. A change empties the cache." : "en segundos. Calquera cambio baleira a caché.", + "Cache Time-To-Live" : "Tempo de persistencia da memoria tobo", + "in seconds. A change empties the cache." : "en segundos. Calquera cambio baleira a memoria tobo.", "Directory Settings" : "Axustes do directorio", "User Display Name Field" : "Campo de nome de usuario para amosar", "The LDAP attribute to use to generate the user's display name." : "O atributo LDAP a empregar para xerar o nome de usuario para amosar.", - "2nd User Display Name Field" : "2º campo de nome de usuario para amosar", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemple.org)».", + "2nd User Display Name Field" : "2.º campo de nome de usuario para amosar", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p. ex. «Xan Carallás (xan.carallas@example.org)».", "Base User Tree" : "Base da árbore de usuarios", "One User Base DN per line" : "Un DN base de usuario por liña", "User Search Attributes" : "Atributos de busca do usuario", "Optional; one attribute per line" : "Opcional; un atributo por liña", - "Group Display Name Field" : "Campo de mostra do nome de grupo", + "Disable users missing from LDAP" : "Desactivar usuarios que faltan en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cando estea activado, desactivaranse os usuarios importados de LDAP e que logo faltan", + "Group Display Name Field" : "Campo de nome de grupo para amosar", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP úsase para xerar os nomes dos grupos que amosar.", "Base Group Tree" : "Base da árbore de grupo", "One Group Base DN per line" : "Un DN base de grupo por liña", @@ -158,11 +179,11 @@ "Dynamic Group Member URL" : "URL dinámico do membro do grupo", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "O atributo LDAP que nos obxectos de grupo contén un URL de busca LDAP que determina que obxectos pertencen ao grupo. (Un escenario baleiro desactiva a funcionalidade dinámica de pertenza ao grupo.)", "Nested Groups" : "Grupos aniñados", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Se está activado, admítense grupos que conteñen grupos. (Só funciona se o atributo de membro no grupo contén os DN.)", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Se está activado, admítense grupos que conteñen grupos. (Só funciona se o atributo de membros do grupo contén os DN.)", "Paging chunksize" : "Tamaño dos fragmentos paxinados", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamaño dos fragmentos utilizados para as buscas LDAP paxinadas, que poden devolver resultados voluminosos como usuario ou enumeración de grupo. (Se se estabelece a 0, desactívanse as buscas LDAP paxinadas nesas situacións.)", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamaño dos fragmentos utilizados para as buscas LDAP paxinadas, que poden devolver resultados voluminosos como usuario ou enumeración de grupo. (Se se axusta a 0, desactívanse as buscas LDAP paxinadas nesas situacións.)", "Enable LDAP password changes per user" : "Activar os cambios no contrasinal LDAP polo usuario", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permítelle aos usuarios LDAP cambiar o seu contrasinal e permite que os administradores e administradores de grupos, cambiar o contrasinal dos seus usuarios LDAP. Só funciona cando as directivas de control de acceso están configuradas conforme coas do servidor LDAP. Xa que os contrasinais son enviados en texto simple ao servidor, LDAP, debe empregarse o cifrado no transporte e o «hash» dos contrasinais debe ser configurado no servidor LDAP.", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permítelle aos usuarios LDAP cambiar o seu contrasinal e permite que os administradores e administradores de grupos, cambiar o contrasinal dos seus usuarios LDAP. Só funciona cando as directivas de control de acceso están configuradas conforme coas do servidor LDAP. Xa que os contrasinais son enviados en texto simple ao servidor, LDAP, debe empregarse o cifrado no transporte e o «resumo criptográfico dos contrasinais debe ser configurado no servidor LDAP.", "(New password is sent as plain text to LDAP)" : "(O novo contrasinal envíase como un texto simple para LDAP)", "Default password policy DN" : "DN da directiva de contrasinal predeterminado", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "O DN dunha directiva de contrasinais predeterminados que será usado para o control da caducidade dos contrasinais. Só funciona cando está activado o cambio do contrasinal LDAP polos usuarios e só está aceptado por OpenLDAP. Déixea baleira para desactivar o control da caducidade dos contrasinais.", @@ -170,23 +191,47 @@ "Quota Field" : "Campo de cota", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para a cota predeterminada do usuario. Noutro caso, especifique un atributo LDAP/AD.", "Quota Default" : "Cota predeterminada", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Sobrescribir a cota predeterminada para usuarios LDAP que non teñen unha cota configurada no campo Cota.", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular a cota predeterminada para usuarios LDAP que non teñen unha cota definida no campo Cota.", "Email Field" : "Campo do correo", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Axustar o correo do usuario dende un atributo LDAP. Déixeo baleiro para un comportamento predeterminado.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Definir o correo do usuario desde un atributo LDAP. Déixeo baleiro para un comportamento predeterminado.", "User Home Folder Naming Rule" : "Regra de nomeado do cartafol do usuario", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD.", - "\"$home\" Placeholder Field" : "Campo de marcador de posición «$home»", + "\"$home\" Placeholder Field" : "Campo de marcador de substitución «$home»", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Nunha configuración de almacenamento externo substituirase $home polo valor do atributo especificado", + "User Profile Attributes" : "Atributos do perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "O teléfono do perfil de usuario definirase a partir do atributo especificado", + "Website Field" : "Campo do sitio web", + "User profile Website will be set from the specified attribute" : "O sitio web do perfil de usuario definirase a partir do atributo especificado", + "Address Field" : "Campo de enderezo", + "User profile Address will be set from the specified attribute" : "O enderezo do perfil de usuario definirase a partir do atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "O perfil de usuario en Twitter definirase a partir do atributo especificado", + "Fediverse Field" : "Campo do Fediverso", + "User profile Fediverse will be set from the specified attribute" : "O perfil de usuario no Fediverso definirase a partir do atributo especificado", + "Organisation Field" : "Campo da organización", + "User profile Organisation will be set from the specified attribute" : "A organización do perfil de usuario definirase a partir do atributo especificado", + "Role Field" : "Campo de rol", + "User profile Role will be set from the specified attribute" : "O rol do perfil de usuario definirase a partir do atributo especificado", + "Headline Field" : "Campo de titular", + "User profile Headline will be set from the specified attribute" : "O título do perfil de usuario definirase a partir do atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "A biografía no perfil de usuario definirase a partir do atributo especificado", + "Birthdate Field" : "Campo de data de nacemento", + "User profile Date of birth will be set from the specified attribute" : "A data de nacemento no perfil do usuario definirase a partir do atributo especificado", + "Pronouns Field" : "Campo de pronomes", + "User profile Pronouns will be set from the specified attribute" : "Os pronomes no perfil de usuario definiranse a partir do atributo especificado", "Internal Username" : "Nome interno de usuario", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por omisión, o nome interno de usuario crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e non é necesario converter os caracteres. O nome interno de usuario ten a restrición de que só se admiten estes caracteres: [ a-zA-Z0-9_.@- ]. Outros caracteres son substituídos pola súa correspondencia ASCII ou simplemente omitidos. En caso de colisións engadirase/incrementarase un número. O nome interno de usuario usase para identificar internamente a un usuario. É tamén o nome predeterminado do cartafol de inicio do usuario. Tamén é parte dos URL remotos, por exemplo para todos os servizos *DAV. Con esta configuración, pódese anular o comportamento predeterminado. Déixeo baleiro para usar o comportamento predeterminado. Os cambios terán efecto só nos usuarios LDAP signados (engadidos) após os cambios.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De xeito predeterminado, o nome de usuario interno crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e que non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nos casos de colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén asignados (engadidos). Déixeo baleiro para o comportamento predeterminado.", "Internal Username Attribute:" : "Atributo do nome interno de usuario:", - "Override UUID detection" : "Ignorar a detección do 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." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vostede debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", + "Override UUID detection" : "Anular a detección do 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." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular o axuste e pasar un atributo da súa escolla. Asegúrese de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", "UUID Attribute for Users:" : "Atributo do UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo do UUID para grupos:", "Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario LDAP»", - "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Os nomes de usuario empréganse para almacenar e asignar metadatos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome interno de usuario. Isto require unha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun contorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Os nomes de usuario empréganse para almacenar e asignar metadatos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome interno de usuario. Isto precisa dunha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na memoria tobo, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun contorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", "Clear Username-LDAP User Mapping" : "Limpar a asignación do usuario ao «nome de usuario LDAP»", - "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»" + "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»", + "Invalid configuration. Please have a look at the logs for further details." : "A configuración non é correcta. Bótelle unha ollada aos rexistros para obter máis detalles." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/gu.js b/apps/user_ldap/l10n/gu.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/gu.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/gu.json b/apps/user_ldap/l10n/gu.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/gu.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/he.js b/apps/user_ldap/l10n/he.js index 52b3d36a0f0..d695a6ca133 100644 --- a/apps/user_ldap/l10n/he.js +++ b/apps/user_ldap/l10n/he.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "תצורה שגויה: איגוד אלמוני אסור.", "Valid configuration, connection established!" : "התצורה תקפה, התבצע חיבור!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "התצורה תקפה, אך האיגוד נכשל. נא לבדוק את הגדרות השרת ואת פרטי הגישה.", - "Invalid configuration. Please have a look at the logs for further details." : "תצורה שגויה. נא לעיין ברישום לקבלת פרטים נוספים.", "No action specified" : "לא צויינה פעולה", "No configuration specified" : "לא הוגדרה תצורה", "No data specified" : "לא הוגדר מידע", - " Could not set configuration %s" : " לא ניתן היה לקבוע הגדרות %s", "Action does not exist" : "פעולה לא קיימת", "Renewing …" : "מתבצע חידוש…", "Very weak password" : "ססמה חלשה מאוד", @@ -47,17 +45,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "מוטב לשקול לצמצם את החיפוש שלך, כיוון שהוא מאגד בתוכו משתמשים רבים, רק הראשון מביניהם יוכל להיכנס.", "An unspecified error occurred. Please check log and settings." : "אירעה שגיאה בלתי מוגדרת. נא לבדוק את יומן הרישום וההגדרות.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "סינון החיפוש אינו חוקי. ככל הנראה בשל שיאה תחבירית כגון מספר לא שווה של פתח-סוגריים וסגור-סוגריים. יש לתקן.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "אירעה שגיאת חיבור ל- LDAP / AD, יש לבדוק את השרת, שער החיבור - פורט ופרטי הכניסה. ", "Please provide a login name to test against" : "יש לספק שם משתמש לבדיקה מולו", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "שדה הקבוצה נוטרל, כיוון ששרת ה- LDAP / AD לא תומך ב- memberOf.", - "Password change rejected. Hint: " : "שינוי הססמה נדחה. רמז:", "Please login with the new password" : "נא להיכנס עם הססמה החדשה", "Your password will expire tomorrow." : "הססמה שלך תפוג מחר.", "Your password will expire today." : "הססמה שלך תפוג היום.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["הססמה שלך תפוג בעוד יום.","הססמה שלך תפוג בעוד יומיים.","הססמה שלך תפוג בעוד %n ימים.","הססמה שלך תפוג בעוד %n ימים."], - "LDAP / AD integration" : "שילוב של LDAP / AD", - "_%s group found_::_%s groups found_" : ["אותרה %s קבוצה","אותרו %s קבוצות","אותרו %s קבוצות","אותרו %s קבוצות"], - "_%s user found_::_%s users found_" : ["אותר %s משתמש","אותרו %s משתמשים","אותרו %s משתמשים","אותרו %s משתמשים"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["הססמה שלך תפוג בעוד יום.","הססמה שלך תפוג בעוד יומיים.","הססמה שלך תפוג בעוד %n ימים."], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "לא ניתן לאתר את מאפיין שם תצוגת המשתמש. נא לציין אותו בעצמך בהגדרות ה־LDAP המתקדמות.", "Could not find the desired feature" : "לא אותרה התכונה הרצויה", "Invalid Host" : "מארח לא חוקי", @@ -76,8 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "המסנן הקובע לאיזו קבוצת LDAP תהיה יכולת כניסה למקרה %s.", "Verify settings and count the groups" : "אימות ההגדרות וספירת הקבוצות", "When logging in, %s will find the user based on the following attributes:" : "כאשר מתחברים, %s יחפש את המשתמש על פי המאפיינים הבאים:", - "LDAP / AD Username:" : "שם משתמש LDAP / AD:", - "LDAP / AD Email Address:" : "כתובת דואר אלקטרוני LDAP / AD:", "Other Attributes:" : "מאפיינים נוספים:", "Test Loginname" : "בדיקת שם התחברות", "Verify settings" : "מאמת הגדרות", @@ -165,6 +155,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "מאפייני UUID לקבוצות:", "Username-LDAP User Mapping" : "מיפוי שם משתמש LDAP:", "Clear Username-LDAP User Mapping" : "ניקוי מיפוי שם משתמש LDAP:", - "Clear Groupname-LDAP Group Mapping" : "ניקוי מיפוי שם משתמש קבוצה LDAP:" + "Clear Groupname-LDAP Group Mapping" : "ניקוי מיפוי שם משתמש קבוצה LDAP:", + "Invalid configuration. Please have a look at the logs for further details." : "תצורה שגויה. נא לעיין ברישום לקבלת פרטים נוספים." }, -"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"); +"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); diff --git a/apps/user_ldap/l10n/he.json b/apps/user_ldap/l10n/he.json index 54b4a183805..c892a8f17a1 100644 --- a/apps/user_ldap/l10n/he.json +++ b/apps/user_ldap/l10n/he.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "תצורה שגויה: איגוד אלמוני אסור.", "Valid configuration, connection established!" : "התצורה תקפה, התבצע חיבור!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "התצורה תקפה, אך האיגוד נכשל. נא לבדוק את הגדרות השרת ואת פרטי הגישה.", - "Invalid configuration. Please have a look at the logs for further details." : "תצורה שגויה. נא לעיין ברישום לקבלת פרטים נוספים.", "No action specified" : "לא צויינה פעולה", "No configuration specified" : "לא הוגדרה תצורה", "No data specified" : "לא הוגדר מידע", - " Could not set configuration %s" : " לא ניתן היה לקבוע הגדרות %s", "Action does not exist" : "פעולה לא קיימת", "Renewing …" : "מתבצע חידוש…", "Very weak password" : "ססמה חלשה מאוד", @@ -45,17 +43,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "מוטב לשקול לצמצם את החיפוש שלך, כיוון שהוא מאגד בתוכו משתמשים רבים, רק הראשון מביניהם יוכל להיכנס.", "An unspecified error occurred. Please check log and settings." : "אירעה שגיאה בלתי מוגדרת. נא לבדוק את יומן הרישום וההגדרות.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "סינון החיפוש אינו חוקי. ככל הנראה בשל שיאה תחבירית כגון מספר לא שווה של פתח-סוגריים וסגור-סוגריים. יש לתקן.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "אירעה שגיאת חיבור ל- LDAP / AD, יש לבדוק את השרת, שער החיבור - פורט ופרטי הכניסה. ", "Please provide a login name to test against" : "יש לספק שם משתמש לבדיקה מולו", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "שדה הקבוצה נוטרל, כיוון ששרת ה- LDAP / AD לא תומך ב- memberOf.", - "Password change rejected. Hint: " : "שינוי הססמה נדחה. רמז:", "Please login with the new password" : "נא להיכנס עם הססמה החדשה", "Your password will expire tomorrow." : "הססמה שלך תפוג מחר.", "Your password will expire today." : "הססמה שלך תפוג היום.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["הססמה שלך תפוג בעוד יום.","הססמה שלך תפוג בעוד יומיים.","הססמה שלך תפוג בעוד %n ימים.","הססמה שלך תפוג בעוד %n ימים."], - "LDAP / AD integration" : "שילוב של LDAP / AD", - "_%s group found_::_%s groups found_" : ["אותרה %s קבוצה","אותרו %s קבוצות","אותרו %s קבוצות","אותרו %s קבוצות"], - "_%s user found_::_%s users found_" : ["אותר %s משתמש","אותרו %s משתמשים","אותרו %s משתמשים","אותרו %s משתמשים"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["הססמה שלך תפוג בעוד יום.","הססמה שלך תפוג בעוד יומיים.","הססמה שלך תפוג בעוד %n ימים."], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "לא ניתן לאתר את מאפיין שם תצוגת המשתמש. נא לציין אותו בעצמך בהגדרות ה־LDAP המתקדמות.", "Could not find the desired feature" : "לא אותרה התכונה הרצויה", "Invalid Host" : "מארח לא חוקי", @@ -74,8 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "המסנן הקובע לאיזו קבוצת LDAP תהיה יכולת כניסה למקרה %s.", "Verify settings and count the groups" : "אימות ההגדרות וספירת הקבוצות", "When logging in, %s will find the user based on the following attributes:" : "כאשר מתחברים, %s יחפש את המשתמש על פי המאפיינים הבאים:", - "LDAP / AD Username:" : "שם משתמש LDAP / AD:", - "LDAP / AD Email Address:" : "כתובת דואר אלקטרוני LDAP / AD:", "Other Attributes:" : "מאפיינים נוספים:", "Test Loginname" : "בדיקת שם התחברות", "Verify settings" : "מאמת הגדרות", @@ -163,6 +153,7 @@ "UUID Attribute for Groups:" : "מאפייני UUID לקבוצות:", "Username-LDAP User Mapping" : "מיפוי שם משתמש LDAP:", "Clear Username-LDAP User Mapping" : "ניקוי מיפוי שם משתמש LDAP:", - "Clear Groupname-LDAP Group Mapping" : "ניקוי מיפוי שם משתמש קבוצה LDAP:" -},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;" + "Clear Groupname-LDAP Group Mapping" : "ניקוי מיפוי שם משתמש קבוצה LDAP:", + "Invalid configuration. Please have a look at the logs for further details." : "תצורה שגויה. נא לעיין ברישום לקבלת פרטים נוספים." +},"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/hi.js b/apps/user_ldap/l10n/hi.js deleted file mode 100644 index 5f9924248b3..00000000000 --- a/apps/user_ldap/l10n/hi.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "उपयोगकर्ता", - "Help" : "सहयोग", - "Password" : "पासवर्ड", - "Advanced" : "उन्नत" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/hi.json b/apps/user_ldap/l10n/hi.json deleted file mode 100644 index 2ea4feefc94..00000000000 --- a/apps/user_ldap/l10n/hi.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "Users" : "उपयोगकर्ता", - "Help" : "सहयोग", - "Password" : "पासवर्ड", - "Advanced" : "उन्नत" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/hr.js b/apps/user_ldap/l10n/hr.js index ad3feb0900f..e7379157dab 100644 --- a/apps/user_ldap/l10n/hr.js +++ b/apps/user_ldap/l10n/hr.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Nevažeća konfiguracija: nije dopušteno anonimno povezivanje.", "Valid configuration, connection established!" : "Važeća konfiguracija, veza je uspostavljena!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Važeća konfiguracija, ali povezivanje nije uspjelo. Provjerite postavke i vjerodajnice poslužitelja.", - "Invalid configuration. Please have a look at the logs for further details." : "Nevažeća konfiguracija. Pogledajte zapise za više informacija.", "No action specified" : "Nije navedena nijedna radnja", "No configuration specified" : "Nije navedena konfiguracija", "No data specified" : "Nema podataka", - " Could not set configuration %s" : " Konfiguraciju %s nije moguće postaviti", "Action does not exist" : "Radnja ne postoji", "Renewing …" : "Obnavljanje...", "Very weak password" : "Zaporka vrlo slaba", @@ -49,19 +47,16 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Razmislite o sužavanju pretraživanja jer obuhvaća puno korisnika od kojih će se moći prijaviti samo prvi.", "An unspecified error occurred. Please check log and settings." : "Došlo je do neodređene pogreške. Provjerite zapis i postavke.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Nevažeći filtar za pretraživanje, vjerojatno zbog problema sa sintaksom kao što je nejednak broj otvorenih i zatvorenih zagrada. Provjerite.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo je do pogreške s LDAP-om/AD-om, provjerite računalo, port i vjerodajnice.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Nedostaje „%uid”. Zamijenit će se imenom za prijavu kada se šalje upit LDAP-u/AD-u.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Došlo je do pogreške s LDAP-om/AD-om, provjerite računalo, port i vjerodajnice.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Nedostaje „%uid”. Zamijenit će se imenom za prijavu kada se šalje upit LDAP-u/AD-u.", "Please provide a login name to test against" : "Navedite ispitno ime za prijavu", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Okvir grupe je onemogućen jer LDAP/AD poslužitelj ne podržava memberOf.", - "Password change rejected. Hint: " : "Odbijena promjena zaporke. Savjet: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Okvir grupe je onemogućen jer LDAP/AD poslužitelj ne podržava memberOf.", "Please login with the new password" : "Prijavite se novom zaporkom", "LDAP User backend" : "LDAP korisnički pozadinski sustav", "Your password will expire tomorrow." : "Vaša zaporka istječe sutra.", "Your password will expire today." : "Vaša zaporka istječe danas.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Vaša zaporka istječe za %n dan.","Vaša zaporka istječe za %n dana.","Vaša zaporka istječe za %n dana."], - "LDAP / AD integration" : "Integracija LDAP-a/AD-a", - "_%s group found_::_%s groups found_" : ["Pronađena je %s grupa","Pronađeno je %s grupa","Pronađeno je %s grupa"], - "_%s user found_::_%s users found_" : ["Pronađen je %s korisnik","Pronađeno je %s korisnika","Pronađeno je %s korisnika"], + "LDAP/AD integration" : "Integracija LDAP-a/AD-a", "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Otkrivanje atributa imena za prikaz nije uspjelo. Navedite ga u naprednim postavkama LDAP-a.", "Could not find the desired feature" : "Željena značajka nije pronađena", "Invalid Host" : "Nevažeće računalo", @@ -81,9 +76,9 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtar određuje koje će LDAP grupe moći pristupiti instanci %s.", "Verify settings and count the groups" : "Provjerite postavke i prebrojite grupe", "When logging in, %s will find the user based on the following attributes:" : "Prilikom prijave, %s će pronaći korisnika prema sljedećim atributima:", - "LDAP / AD Username:" : "LDAP/AD korisničko ime:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Omogućuje prijavu provjerom LDAP/AD korisničkog imena sukladno postavkama „uid” ili „sAMAccountName”.", - "LDAP / AD Email Address:" : "LDAP/AD adresa e-pošte:", + "LDAP/AD Username:" : "LDAP/AD korisničko ime:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Omogućuje prijavu provjerom LDAP/AD korisničkog imena sukladno postavkama „uid” ili „sAMAccountName”.", + "LDAP/AD Email Address:" : "Adresa e-pošte za LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Omogućuje prijavu provjerom atributa adrese e-pošte. Dopušteni su „mail” i „mailPrimaryAddress”.", "Other Attributes:" : "Ostali atributi:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definira filtar koji se primjenjuje prilikom prijave. „%%uid” zamjenjuje korisničko tijekom prijave. Primjer: „uid=%%uid”", @@ -180,7 +175,6 @@ OC.L10N.register( "\"$home\" Placeholder Field" : "Polje rezerviranja „$home”", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home će se u konfiguraciji vanjske pohrane zamijeniti s vrijednosti navedenog atributa", "Internal Username" : "Unutarnje korisničko ime", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Sukladno zadanim postavkama, unutarnje korisničko stvara se iz atributa UUID. Time se osigurava da je korisničko ime jedinstveno i da ne treba pretvarati znakove. Unutarnje korisničko ime ograničeno je na sljedeće znakove: [a-zA-Z0-9_.@ -]. Ostali znakovi zamjenjuju se istovjetnim ASCII znakovima ili se jednostavno izostavljaju. Nepodudarni se brojevi dodaju/povećavaju. Unutarnje korisničko ime upotrebljava se za unutarnju identifikaciju korisnika. Također se upotrebljava kao zadano ime za početnu mapu korisnika. Dio je udaljenih URL-ova, primjerice, za sve *DAV servise. Ovom postavkom možete promijeniti zadano ponašanje. Ostavite je praznom ako želite zadržati zadano ponašanje. Promjene će se primijeniti samo na nove mapirane (dodane) LDAP korisnike.", "Internal Username Attribute:" : "Atribut unutarnjeg korisničkog imena:", "Override UUID detection" : "Premosti UUID otkrivanje", "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." : "Atribut UUID se prema zadanim postavkama automatski otkriva. Atribut UUID se upotrebljava za nedvosmislenu identifikaciju LDAP korisnika i grupa. Također će se stvoriti unutarnje korisničko ime na temelju UUID-a ako nije ručno navedeno. Možete aktivirati postavku i prenijeti atribut po vlastitom izboru. Morate biti sigurni da taj atribut može biti dostupan i za korisnike i za grupu i da je jedinstven. Ostavite prazno ako želite zadržati zadano ponašanje. Promjene će se primijeniti samo na nove mapirane (dodane) LDAP korisnike.", @@ -189,6 +183,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapiranje korisnika LDAP-korisničko ime", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Korisnička imena upotrebljavaju se za pohranu i dodjeljivanje metapodataka. Kako bi se precizno identificirali i prepoznali korisnici, svaki LDAP korisnik ima unutarnje korisničko ime. Za to je potrebno mapiranje podataka s korisničkog imena na LDAP korisnika. Stvoreno korisničko ime mapira se na UUID LDAP korisnika. Također se DN pohranjuje u predmemoriju radi smanjenja interakcije s LDAP-om, ali se ne koristi za identifikaciju. Ako se DN promijeni, te će promijene biti otkrivene. Unutarnje korisničko ime upotrebljava se u raznim situacijama. Brisanjem mapiranja ostaju razni tragovi u sustavu. Brisanje mapiranja ne ovisi o konfiguraciji, utječe na sve konfiguracije LDAP-a! Nikada nemojte brisati mapiranja u produkcijskom okruženju, već samo u fazi ispitivanja ili eksperimentiranja.", "Clear Username-LDAP User Mapping" : "Izbriši mapiranje korisnika LDAP-korisničko ime", - "Clear Groupname-LDAP Group Mapping" : "Izbriši mapiranje grupe naziv grupe-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Izbriši mapiranje grupe naziv grupe-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Nevažeća konfiguracija. Pogledajte zapise za više informacija." }, "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/hr.json b/apps/user_ldap/l10n/hr.json index 2940f472df7..b55b4c15df4 100644 --- a/apps/user_ldap/l10n/hr.json +++ b/apps/user_ldap/l10n/hr.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Nevažeća konfiguracija: nije dopušteno anonimno povezivanje.", "Valid configuration, connection established!" : "Važeća konfiguracija, veza je uspostavljena!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Važeća konfiguracija, ali povezivanje nije uspjelo. Provjerite postavke i vjerodajnice poslužitelja.", - "Invalid configuration. Please have a look at the logs for further details." : "Nevažeća konfiguracija. Pogledajte zapise za više informacija.", "No action specified" : "Nije navedena nijedna radnja", "No configuration specified" : "Nije navedena konfiguracija", "No data specified" : "Nema podataka", - " Could not set configuration %s" : " Konfiguraciju %s nije moguće postaviti", "Action does not exist" : "Radnja ne postoji", "Renewing …" : "Obnavljanje...", "Very weak password" : "Zaporka vrlo slaba", @@ -47,19 +45,16 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Razmislite o sužavanju pretraživanja jer obuhvaća puno korisnika od kojih će se moći prijaviti samo prvi.", "An unspecified error occurred. Please check log and settings." : "Došlo je do neodređene pogreške. Provjerite zapis i postavke.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Nevažeći filtar za pretraživanje, vjerojatno zbog problema sa sintaksom kao što je nejednak broj otvorenih i zatvorenih zagrada. Provjerite.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo je do pogreške s LDAP-om/AD-om, provjerite računalo, port i vjerodajnice.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Nedostaje „%uid”. Zamijenit će se imenom za prijavu kada se šalje upit LDAP-u/AD-u.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Došlo je do pogreške s LDAP-om/AD-om, provjerite računalo, port i vjerodajnice.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Nedostaje „%uid”. Zamijenit će se imenom za prijavu kada se šalje upit LDAP-u/AD-u.", "Please provide a login name to test against" : "Navedite ispitno ime za prijavu", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Okvir grupe je onemogućen jer LDAP/AD poslužitelj ne podržava memberOf.", - "Password change rejected. Hint: " : "Odbijena promjena zaporke. Savjet: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Okvir grupe je onemogućen jer LDAP/AD poslužitelj ne podržava memberOf.", "Please login with the new password" : "Prijavite se novom zaporkom", "LDAP User backend" : "LDAP korisnički pozadinski sustav", "Your password will expire tomorrow." : "Vaša zaporka istječe sutra.", "Your password will expire today." : "Vaša zaporka istječe danas.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Vaša zaporka istječe za %n dan.","Vaša zaporka istječe za %n dana.","Vaša zaporka istječe za %n dana."], - "LDAP / AD integration" : "Integracija LDAP-a/AD-a", - "_%s group found_::_%s groups found_" : ["Pronađena je %s grupa","Pronađeno je %s grupa","Pronađeno je %s grupa"], - "_%s user found_::_%s users found_" : ["Pronađen je %s korisnik","Pronađeno je %s korisnika","Pronađeno je %s korisnika"], + "LDAP/AD integration" : "Integracija LDAP-a/AD-a", "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Otkrivanje atributa imena za prikaz nije uspjelo. Navedite ga u naprednim postavkama LDAP-a.", "Could not find the desired feature" : "Željena značajka nije pronađena", "Invalid Host" : "Nevažeće računalo", @@ -79,9 +74,9 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtar određuje koje će LDAP grupe moći pristupiti instanci %s.", "Verify settings and count the groups" : "Provjerite postavke i prebrojite grupe", "When logging in, %s will find the user based on the following attributes:" : "Prilikom prijave, %s će pronaći korisnika prema sljedećim atributima:", - "LDAP / AD Username:" : "LDAP/AD korisničko ime:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Omogućuje prijavu provjerom LDAP/AD korisničkog imena sukladno postavkama „uid” ili „sAMAccountName”.", - "LDAP / AD Email Address:" : "LDAP/AD adresa e-pošte:", + "LDAP/AD Username:" : "LDAP/AD korisničko ime:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Omogućuje prijavu provjerom LDAP/AD korisničkog imena sukladno postavkama „uid” ili „sAMAccountName”.", + "LDAP/AD Email Address:" : "Adresa e-pošte za LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Omogućuje prijavu provjerom atributa adrese e-pošte. Dopušteni su „mail” i „mailPrimaryAddress”.", "Other Attributes:" : "Ostali atributi:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definira filtar koji se primjenjuje prilikom prijave. „%%uid” zamjenjuje korisničko tijekom prijave. Primjer: „uid=%%uid”", @@ -178,7 +173,6 @@ "\"$home\" Placeholder Field" : "Polje rezerviranja „$home”", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home će se u konfiguraciji vanjske pohrane zamijeniti s vrijednosti navedenog atributa", "Internal Username" : "Unutarnje korisničko ime", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Sukladno zadanim postavkama, unutarnje korisničko stvara se iz atributa UUID. Time se osigurava da je korisničko ime jedinstveno i da ne treba pretvarati znakove. Unutarnje korisničko ime ograničeno je na sljedeće znakove: [a-zA-Z0-9_.@ -]. Ostali znakovi zamjenjuju se istovjetnim ASCII znakovima ili se jednostavno izostavljaju. Nepodudarni se brojevi dodaju/povećavaju. Unutarnje korisničko ime upotrebljava se za unutarnju identifikaciju korisnika. Također se upotrebljava kao zadano ime za početnu mapu korisnika. Dio je udaljenih URL-ova, primjerice, za sve *DAV servise. Ovom postavkom možete promijeniti zadano ponašanje. Ostavite je praznom ako želite zadržati zadano ponašanje. Promjene će se primijeniti samo na nove mapirane (dodane) LDAP korisnike.", "Internal Username Attribute:" : "Atribut unutarnjeg korisničkog imena:", "Override UUID detection" : "Premosti UUID otkrivanje", "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." : "Atribut UUID se prema zadanim postavkama automatski otkriva. Atribut UUID se upotrebljava za nedvosmislenu identifikaciju LDAP korisnika i grupa. Također će se stvoriti unutarnje korisničko ime na temelju UUID-a ako nije ručno navedeno. Možete aktivirati postavku i prenijeti atribut po vlastitom izboru. Morate biti sigurni da taj atribut može biti dostupan i za korisnike i za grupu i da je jedinstven. Ostavite prazno ako želite zadržati zadano ponašanje. Promjene će se primijeniti samo na nove mapirane (dodane) LDAP korisnike.", @@ -187,6 +181,7 @@ "Username-LDAP User Mapping" : "Mapiranje korisnika LDAP-korisničko ime", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Korisnička imena upotrebljavaju se za pohranu i dodjeljivanje metapodataka. Kako bi se precizno identificirali i prepoznali korisnici, svaki LDAP korisnik ima unutarnje korisničko ime. Za to je potrebno mapiranje podataka s korisničkog imena na LDAP korisnika. Stvoreno korisničko ime mapira se na UUID LDAP korisnika. Također se DN pohranjuje u predmemoriju radi smanjenja interakcije s LDAP-om, ali se ne koristi za identifikaciju. Ako se DN promijeni, te će promijene biti otkrivene. Unutarnje korisničko ime upotrebljava se u raznim situacijama. Brisanjem mapiranja ostaju razni tragovi u sustavu. Brisanje mapiranja ne ovisi o konfiguraciji, utječe na sve konfiguracije LDAP-a! Nikada nemojte brisati mapiranja u produkcijskom okruženju, već samo u fazi ispitivanja ili eksperimentiranja.", "Clear Username-LDAP User Mapping" : "Izbriši mapiranje korisnika LDAP-korisničko ime", - "Clear Groupname-LDAP Group Mapping" : "Izbriši mapiranje grupe naziv grupe-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Izbriši mapiranje grupe naziv grupe-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Nevažeća konfiguracija. Pogledajte zapise za više informacija." },"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/user_ldap/l10n/hu.js b/apps/user_ldap/l10n/hu.js index 968941f0b59..a9201cbab20 100644 --- a/apps/user_ldap/l10n/hu.js +++ b/apps/user_ldap/l10n/hu.js @@ -2,193 +2,218 @@ OC.L10N.register( "user_ldap", { "Failed to clear the mappings." : "Nem sikerült törölni a hozzárendeléseket.", - "Failed to delete the server configuration" : "Nem sikerült törölni a szerver konfigurációját", - "Invalid configuration: Anonymous binding is not allowed." : "Érvénytelen beállítás: Anonim kötés nem engedélyezett.", - "Valid configuration, connection established!" : "Érvényes beállítás, kapcsolat létrejött!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Érvényes beállítás, de a kötés nem jött létre. Kérlek ellenőrizd a szerver beállításokat és a hitelesítőadatokat.", - "Invalid configuration. Please have a look at the logs for further details." : "Érvénytelen konfiguráció. További információkért nézze meg a naplófájlokat!", - "No action specified" : "Nincs megadva parancs", - "No configuration specified" : "Nincs megadva konfiguráció", - "No data specified" : "Nincs adat megadva", - " Could not set configuration %s" : "A konfiguráció nem állítható be: %s", + "Failed to delete the server configuration" : "Nem sikerült törölni a kiszolgáló beállításait", + "Invalid configuration: Anonymous binding is not allowed." : "Érvénytelen beállítások: Az anonim kötés nem engedélyezett.", + "Valid configuration, connection established!" : "Érvényes beállítások, a kapcsolat létrejött.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Érvényes beállítások, de a kötés sikertelen. Ellenőrizze a kiszolgálóbeállításokat és a hitelesítő adatokat.", + "No action specified" : "Nincs megadva művelet", + "No configuration specified" : "Nincsenek megadva beállítások", + "No data specified" : "Nincsenek megadva adatok", + "Invalid data specified" : "A megadott adatok érvénytelenek", "Action does not exist" : "A művelet nem létezik", - "Renewing …" : "Megújítás...", + "Renewing …" : "Megújítás…", "Very weak password" : "Nagyon gyenge jelszó", "Weak password" : "Gyenge jelszó", "So-so password" : "Nem túl jó jelszó", "Good password" : "Jó jelszó", "Strong password" : "Erős jelszó", - "The Base DN appears to be wrong" : "Úgy tűnik, a címtár gyökere (base DN) hibás", - "Testing configuration…" : "Beállítások ellenőrzése...", - "Configuration incorrect" : "Konfiguráió hibás", - "Configuration incomplete" : "Konfiguráció nincs befejezve", - "Configuration OK" : "Konfiguráció OK", + "The Base DN appears to be wrong" : "Úgy tűnik, hogy az alap DN hibás", + "Testing configuration…" : "Beállítások ellenőrzése…", + "Configuration incorrect" : "A beállítások hibásak", + "Configuration incomplete" : "A beállítások hiányosak", + "Configuration OK" : "A beállítások rendben", "Select groups" : "Csoportok kiválasztása", "Select object classes" : "Objektumosztályok kiválasztása", - "Please check the credentials, they seem to be wrong." : "Kérlek ellenőrizd az azonosítókat, hibásnak tűnnek.", - "Please specify the port, it could not be auto-detected." : "Kérlek add meg a port számát, nem lehetett automatikusan detektálni.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "A címtár gyökerét (base DN) nem sikerült automatikusan felismerni, kérlek, ellenőrizd az azonosítókat, a kiszolgáló nevét és a portot.", - "Could not detect Base DN, please enter it manually." : "Nem sikerült felismerni a címtár gyökerét (base DN), kérlek, add meg kézzel.", - "{nthServer}. Server" : "{nthServer}. Szerver", - "No object found in the given Base DN. Please revise." : "Nem találhatók objektumok a megadott címtár gyökérben (base DN). Kérlek, ellenőrizd.", - "More than 1,000 directory entries available." : "Több mint 1000 címtár bejegyzés érhető el.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} bejegyzés érhető el a megadott Base DN-ben","{objectsFound} bejegyzés érhető el a megadott Base DN-ben"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hiba törént. Kérlek, ellenőrizd a címtár gyökerét (base DN), a kapcsolat beállításait és az azonosítókat.", - "Do you really want to delete the current Server Configuration?" : "Tényleg törölni szeretné a szerver beállításait?", - "Confirm Deletion" : "A törlés megerősítése", + "Please check the credentials, they seem to be wrong." : "Ellenőrizze a hitelesítő adatokat, hibásnak tűnnek.", + "Please specify the port, it could not be auto-detected." : "Adja meg a port számát, nem lehetett automatikusan felismerni.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Az alap DN-t nem sikerült automatikusan felismerni, ellenőrizze a hitelesítő adatokat, a kiszolgáló nevét és a portot.", + "Could not detect Base DN, please enter it manually." : "Nem sikerült felismerni az alap DN-t, adja meg kézzel.", + "{nthServer}. Server" : "{nthServer}. kiszolgáló", + "No object found in the given Base DN. Please revise." : "Nem találhatók objektumok a megadott alap DN alatt. Ellenőrizze.", + "More than 1,000 directory entries available." : "Több mint 1000 címtárbejegyzés érhető el.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} bejegyzés érhető el a megadott alap DN alatt","{objectsFound} bejegyzés érhető el a megadott alap DN alatt"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hiba történt. Ellenőrizze az alap DN-t, valamint a kapcsolat beállításait és a hitelesítő adatokat.", + "Do you really want to delete the current Server Configuration?" : "Biztos, hogy törli a jelenlegi kiszolgálóbeállításokat?", + "Confirm Deletion" : "Törlés megerősítése", "Mappings cleared successfully!" : "A hozzárendelések sikeresen törölve.", - "Error while clearing the mappings." : "Hiba a leképzések törlése közben.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "A névtelen hozzáférés (anonymous bind) nem engedélyezett. Kérlek, add meg a felhasználó címtár-azonosítóját (DN) és jelszavát.", - "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP műveleti hiba. Lehetséges hogy az anonim kötés nincs engedélyezve.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "A mentés sikertelen. Kérlek győződj meg róla, hogy az adatbázis működik. Töltsd újra a folytatás előtt.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "A módváltás engedélyezi az automatikus LDAP lekérdezéseket. Az LDAP-od méretétől függően sokáig tarthatnak. Biztosan átváltod a módot?", - "Mode switch" : "Üzemmód váltás", + "Error while clearing the mappings." : "Hiba a hozzárendelések törlése során.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Az anonim kötés nem engedélyezett. Adja meg a felhasználó DN-jét és a jelszót.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP műveleti hiba. Lehet, hogy az anonim kötés nincs engedélyezve.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "A mentés sikertelen. Győződjön meg róla, hogy az adatbázis működik-e. A folytatás előtt töltse újra.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "A módváltás engedélyezi az automatikus LDAP lekérdezéseket. Az LDAP-ja méretétől függően ezek sokáig tarthatnak. Biztos, hogy átváltja a módot?", + "Mode switch" : "Üzemmódváltás", "Select attributes" : "Attribútumok kiválasztása", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Felhasználó nincs meg. Kérlek ellenőrizd a felhasználónevet és a bejelentkezési adatokat. Érvényes szűrő (vágólap használathoz a parancssori ellenőrzéshez): <br/>", - "User found and settings verified." : "Felhasználó megtalálva, beállítások ellenőrizve.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Esetleg szűkítsd a keresést, mert rengeteg felhasználóra igaz, de csak az első fog tudni belépni.", - "An unspecified error occurred. Please check log and settings." : "Ismeretlen hiba lépett fel. Kérlek nézd meg a naplót.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "A keresési feltétel érvénytelen, talán el van írva, például nem azonos a kezdő és záró zárójelek száma.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/AD kapcsolati hiba lépett fel, ellenőrizze a gépet, a portot és a hitelesítési adatokat.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "A \"%uid\" helytartó hiányzik. Ez kerül behelyettesítésre a felhasználónévvel az LDAP / AD lekérdezéskor.", - "Please provide a login name to test against" : "Kérlek adj meg egy bejelentkezési nevet az újrateszteléshez", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "A csoport doboz ki van kapcsolva, mert az LDAP/AD szerver nem támogatja a memberOf-ot.", - "Password change rejected. Hint: " : "Jelszó módosítás elutasítva. Tipp:", - "Please login with the new password" : "Kérlek lépj be az új jelszóval", - "LDAP User backend" : "LDAP Felhasználói háttér", - "Your password will expire tomorrow." : "A jelszavad holnap lejár", - "Your password will expire today." : "A jelszavad ma lejár.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["A jelszavad %nnap múlva lejár. ","A jelszavad %n nap múlva lejár."], - "LDAP / AD integration" : "LDAP / AD integráció", - "_%s group found_::_%s groups found_" : ["%s csoport van","%s csoport van"], - "_%s user found_::_%s users found_" : ["%s felhasználó van","%s felhasználó van"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nem lehet megállapítani a megjelenítendő név mezőt. Kérlek add meg kézzel a bővített LDAP beállításokban.", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "A felhasználó nem található. Ellenőrizze a felhasználónevet és a bejelentkezési adatokat. Érvényes szűrő (beillesztéshez a parancssori ellenőrzéshez): <br/>", + "User found and settings verified." : "A felhasználó megtalálva, beállítások ellenőrizve.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Esetleg szűkítse a keresést, mert több felhasználóra igaz, de ezek közül csak az első fog tudni belépni.", + "An unspecified error occurred. Please check log and settings." : "Ismeretlen hiba lépett fel. Ellenőrizze a naplót és a beállításokat.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "A keresési szűrő érvénytelen, lehet hogy szintaktikai problémák miatt, például nem azonos a kezdő és záró zárójelek száma. Ellenőrizze.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Csatlakozási hiba az LDAP/AD-vel. Ellenőrizd a kiszolgálót, a portot és a hitelesítő adatokat.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "A(z) „%uid” helykitöltő hiányzik. Ez lesz lecserélve a felhasználónévre az LDAP/AD lekérdezésekor.", + "Please provide a login name to test against" : "Adjon meg egy bejelentkezési nevet a teszteléshez", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "A csoport beviteli mező ki van kapcsolva, mert az LDAP/AD-kiszolgáló nem támogatja a memberOf attribútumtípust.", + "Please login with the new password" : "Jelentkezzen be az új jelszóval", + "LDAP User backend" : "LDAP felhasználói háttérszolgáltatás", + "Your password will expire tomorrow." : "A jelszava holnap lejár.", + "Your password will expire today." : "A jelszava ma lejár.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["A jelszava %n nap múlva lejár.","A jelszava %n nap múlva lejár."], + "LDAP/AD integration" : "LDAP/AD integráció", + "Invalid LDAP UUIDs" : "Érvénytelen LADS UUID-k", + "None found" : "Nincs találat", + "_%n group found_::_%n groups found_" : ["%n csoport található","%n csoport található"], + "> 1000 groups found" : "> 1000 csoport található", + "> 1000 users found" : "> 1000 felhasználó találhatófound", + "_%n user found_::_%n users found_" : ["%n felhasználó található","%n felhasználó található"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nem lehet észlelni a felhasználó megjelenítendő név attribútumát. Adja meg kézzel a speciális LDAP beállításokban.", "Could not find the desired feature" : "A kívánt funkció nem található", "Invalid Host" : "Érvénytelen gépnév", - "LDAP user and group backend" : "LDAP felhasználói és csoport háttér", + "LDAP user and group backend" : "LDAP felhasználói és csoport háttérszolgáltatás", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Ez az alkalmazás lehetővé teszi a rendszergazdáknak, hogy a Nextcloudot LDAP alapú címtárhoz csatlakoztassák.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ez az alkalmazás lehetővé teszi a rendszergazdáknak, hogy a Nextcloudot LDAP alapú címtárhoz csatlakoztatva hitelesítsenek és hozzanak létre felhasználókat, csoportokat, valamint csoportattribútumokat. A rendszergazdák beállíthatják az alkalmazást, hogy egy vagy több LDAP címtárhoz vagy Active Directoryhoz csatlakozzanak LDAP-n keresztül. Megfelelő lekérdezésekkel és szűrőkkel egyebek mellett olyan tulajdonságokat lehet importálni a Nextcloudba, mint a tárhely mérete, e-mail cím, profilkép, csoporttagságok.\n\nA felhasználó LDAP vagy AD azonosító adatokkal jelentkezik be, és a hozzáférését az LDAP vagy AD kiszolgáló kezeli a hitelesítést, ami alapján hozzáférést kap. A Nextcloud nem tárol LDAP vagy AD jelszavakat: a hitelesítés után munkafolyamatot hozzáköti a felhasználói azonosítóhoz. További információ érhető e az LDAP felhasználói és csoport háttér dokumentációban.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ez az alkalmazás lehetővé teszi a rendszergazdáknak, hogy a Nextcloudot LDAP alapú címtárhoz csatlakoztatva hitelesítsenek és hozzanak létre felhasználókat, csoportokat és felhasználói attribútumokat. A rendszergazdák beállíthatják az alkalmazást, hogy egy vagy több LDAP címtárhoz vagy Active Directoryhoz csatlakozzanak LDAP-on keresztül. Megfelelő lekérdezésekkel és szűrőkkel egyebek mellett olyan tulajdonságokat lehet importálni a Nextcloudba, mint a tárhely mérete, az e-mail-cím, a profilkép és a csoporttagságok.\n\nA felhasználó LDAP vagy AD azonosító adatokkal jelentkezik be, és a hozzáférését az LDAP vagy AD kiszolgáló kezeli a hitelesítést, ami alapján hozzáférést kap. A Nextcloud nem tárol LDAP vagy AD jelszavakat: a hitelesítés után munkafolyamatot hozzáköti a felhasználói azonosítóhoz. További információ érhető el az LDAP felhasználói és csoport háttérszolgáltatásának dokumentációban.", "Test Configuration" : "A beállítások tesztelése", "Help" : "Súgó", - "Groups meeting these criteria are available in %s:" : "A %s szolgáltatás azon csoportok létezését veszi figyelembe, amik a következő feltételeknek felelnek meg:", + "Groups meeting these criteria are available in %s:" : "A(z) %s szolgáltatásban a következő feltételeknek megfelelő csoportok érhetők el:", "Only these object classes:" : "Csak ezek az objektumosztályok:", "Only from these groups:" : "Csak ezekből a csoportokból:", - "Search groups" : "Csoport keresés", + "Search groups" : "Csoportok keresése", "Available groups" : "Elérhető csoportok", "Selected groups" : "Kiválasztott csoportok", - "Edit LDAP Query" : "LDAP lekérdezés szerkesztés", + "Edit LDAP Query" : "LDAP lekérdezés szerkesztése", "LDAP Filter:" : "LDAP szűrő:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP csoportok lesznek jogosultak %s elérésére.", - "Verify settings and count the groups" : "Ellenőrizd a beállításokat és számold meg a csoportokat", - "When logging in, %s will find the user based on the following attributes:" : "Bejelentkezve, %s a következő attribútumok alapján találja meg a felhasználót:", - "LDAP / AD Username:" : "LDAP / AD felhasználónév:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Bejelentkezés engedélyezése LDAP / AD felhasználónévvel, ami vagy \"uid\" vagy \"sAMAccountName\" és fel lesz ismerve.", - "LDAP / AD Email Address:" : "LDAP / AD e-mail cím:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Bejelentkezés engedélyezése az e-mail attribútum alapján. \"mail\" és \"mailPrimaryAddress\" megengedett.", + "The filter specifies which LDAP groups shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP csoportok fognak hozzáférni a(z) %s példányhoz.", + "Verify settings and count the groups" : "Ellenőrizze a beállításokat és számolja meg a csoportokat", + "When logging in, %s will find the user based on the following attributes:" : "Bejelentkezéskor a(z) %s a következő attribútumok alapján találja meg a felhasználót:", + "LDAP/AD Username:" : "LDAP/AD felhasználónév:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Lehetővé teszi az LDAP/AD felhasználónévvel történő bejelentkezést, amelynél vagy az „uid” vagy az „sAMAccountName” lesz észlelve.", + "LDAP/AD Email Address:" : "LDAP/AD e-mail-cím:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Bejelentkezés engedélyezése az egyik e-mail attribútum alapján. A „mail” és „mailPrimaryAddress” engedélyezett.", "Other Attributes:" : "Más attribútumok:", - "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "A belépéskor alkalmazandó filtert definiálja. \"%%uid\" lecseréli a felhasználónevez a bejelentkezésnél. Példa: \"uid=%%uid\"", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Meghatározza a belépéskor alkalmazandó szűrőt. A „%%uid” lecseréli a felhasználónevet a bejelentkezési műveletnél. Például: „uid=%%uid”", "Test Loginname" : "Teszt bejelentkezési név", + "Attempts to receive a DN for the given loginname and the current login filter" : "Megpróbál fogadni egy DN-t a megadott „loginname” és a jelenlegi bejelentkezési szűrő alapján", "Verify settings" : "Beállítások ellenőrzése", - "%s. Server:" : "%s. szerver", - "Add a new configuration" : "Új beállítás hozzáadása", - "Copy current configuration into new directory binding" : "Jelenlegi beállítások másolása egy új mappakötésbe", - "Delete the current configuration" : "Aktuális konfiguráció törlése", + "%s. Server:" : "%s. szerver:", + "Add a new configuration" : "Új beállítások hozzáadása", + "Copy current configuration into new directory binding" : "Jelenlegi beállítások másolása egy új címtárkötésbe", + "Delete the current configuration" : "Jelenlegi beállítások törlése", "Host" : "Kiszolgáló", - "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Kihagyhatod a protokollt kivéve, ha SSL-t használsz. Ebben az esetben ldaps://-el kezdd", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Kihagyhatja a protokollt kivéve, ha az SSL kötelező. Ebben az esetben kezdje ldaps:// protokollal.", "Port" : "Port", - "Detect Port" : "Port detektálás", - "User DN" : "A kapcsolódó felhasználó DN-je", - "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." : "Annak a felhasználónak a DN-je, akinek a nevében bejelentkezve kapcsolódunk a kiszolgálóhoz, pl. uid=agent,dc=example,dc=com. Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!", + "Detect Port" : "Port észlelése", + "User DN" : "Alap 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." : "Annak a kliensfelhasználónak a DN-je, akinek a nevében történik a kötés, például uid=agent,dc=example,dc=com. Az anonim eléréshez hagyja üresen a DN és Jelszó mezőket.", "Password" : "Jelszó", - "For anonymous access, leave DN and Password empty." : "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!", - "Save Credentials" : "Hitelesítőadatok mentése", - "One Base DN per line" : "Soronként egy DN-gyökér", - "You can specify Base DN for users and groups in the Advanced tab" : "A Haladó fülre kattintva külön DN-gyökér állítható be a felhasználók és a csoportok számára", - "Detect Base DN" : "Alap DN detektálása", + "For anonymous access, leave DN and Password empty." : "Az anonim eléréshez hagyja üresen a DN és Jelszó mezőket.", + "Save Credentials" : "Hitelesítő adatok mentése", + "One Base DN per line" : "Soronként egy alap DN", + "You can specify Base DN for users and groups in the Advanced tab" : "A felhasználók és csoportok alap DN-jét a Speciális lapon adhatja meg", + "Detect Base DN" : "Alap DN észlelése", "Test Base DN" : "Alap DN ellenőrzése", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Kerülje az automata LDAP kéréseket. Hasznos nagy telepítéseknél, de némi LDAP ismeretet igényel.", - "Manually enter LDAP filters (recommended for large directories)" : "LDAP szűrők kézi beállitása (ajánlott a nagy könyvtáraknál)", - "Listing and searching for users is constrained by these criteria:" : "Felhasználók keresésének és listázásának szabályozása ezekkel a szabályokkal:", - "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." : "A leggyakoribb objektum osztályok a felhasználóknál az organizationalPerson, person, user, és inetOrgPerson. Ha nem vagy benne biztos melyik osztályt válaszd, kérlek konzultálj a könyvtár rendszergazdájával.", - "The filter specifies which LDAP users shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP felhasználók lesznek jogosultak %s elérésére.", - "Verify settings and count users" : "Beállítások ellenőrzése és felhasználók megszámolása", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Elkerüli az automatikus LDAP kéréseket. Hasznos nagy telepítéseknél, de némi LDAP ismeretet igényel.", + "Manually enter LDAP filters (recommended for large directories)" : "LDAP szűrők kézi beállítása (ajánlott a nagy könyvtáraknál)", + "Listing and searching for users is constrained by these criteria:" : "A felhasználók keresését és listázását ezek a szabályok korlátozzák:", + "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." : "A leggyakoribb objektumosztályok a felhasználóknál az „organizationalPerson”, a „person”, a „user”, és az „inetOrgPerson”. Ha nem biztos benne, hogy melyik osztályt válassza, akkor konzultáljon a címtár rendszergazdájával.", + "The filter specifies which LDAP users shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP felhasználók lesznek jogosultak a(z) %s példány elérésére.", + "Verify settings and count users" : "Ellenőrizze a beállításokat és számolja meg a felhasználókat", "Saving" : "Mentés", "Back" : "Vissza", "Continue" : "Folytatás", - "Please renew your password." : "Kérjük frissítsd a jelszavad.", - "An internal error occurred." : "Belső hiba lépett fel.", - "Please try again or contact your administrator." : "Próbáld meg ismét vagy lépj kapcsolatba a rendszergazdáddal.", + "Please renew your password." : "Újítsa meg a jelszavát.", + "An internal error occurred." : "Belső hiba történt.", + "Please try again or contact your administrator." : "Próbálja meg újra, vagy lépjen kapcsolatba a rendszergazdával.", "Current password" : "Jelenlegi jelszó", "New password" : "Új jelszó", - "Renew password" : "Jelszó megújítás", + "Renew password" : "Jelszó megújítása", "Wrong password." : "Hibás jelszó.", - "Cancel" : "Mégsem", - "Server" : "Szerver", + "Cancel" : "Mégse", + "Server" : "Kiszolgáló", "Users" : "Felhasználók", "Login Attributes" : "Bejelentkezési attribútumok", "Groups" : "Csoportok", - "Expert" : "Profi", - "Advanced" : "Haladó", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse!", + "Expert" : "Szakértő", + "Advanced" : "Speciális", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse.", "Connection Settings" : "Kapcsolati beállítások", "Configuration Active" : "A beállítás aktív", - "When unchecked, this configuration will be skipped." : "Ha nincs kipipálva, ez a beállítás kihagyódik.", - "Backup (Replica) Host" : "Biztonsági (replika) kiszolgáló", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Adjon meg egy opcionális biztonsági kiszolgálót. Ez a fő LDAP/AD szerver replikája kell legyen.", - "Backup (Replica) Port" : "Biztonsági kiszolgáló (replika) portszáma", - "Disable Main Server" : "A fő szerver kihagyása", - "Only connect to the replica server." : "Csak a másodlagos (másolati) szerverhez kapcsolódjunk.", - "Turn off SSL certificate validation." : "Ne ellenőrizzük az SSL-tanúsítvány érvényességét", - "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." : "Használata nem javasolt (kivéve tesztelési céllal). Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-szerver SSL tanúsítványát a(z) %s szerverre!", - "Cache Time-To-Live" : "A gyorsítótár tárolási időtartama", - "in seconds. A change empties the cache." : "másodpercen belül. A változtatás törli a gyorsítótár tartalmát.", + "When unchecked, this configuration will be skipped." : "Ha nincs kipipálva, ez a beállítás ki lesz hagyva.", + "Backup (Replica) Host" : "Tartalék (replika) kiszolgáló", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Adjon meg egy nem kötelező tartalék kiszolgálót. Ennek a fő LDAP/AD kiszolgáló replikájának kell lennie.", + "Backup (Replica) Port" : "Tartalék kiszolgáló (replika) portja", + "Disable Main Server" : "Fő kiszolgáló letiltása", + "Only connect to the replica server." : "Kapcsolódás csak a replika kiszolgálóhoz.", + "Turn off SSL certificate validation." : "SSL-tanúsítvány ellenőrzésének kikapcsolása.", + "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." : "Nem javasolt, csak tesztelésre használja. Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-kiszolgáló SSL tanúsítványát a(z) %s kiszolgálóra.", + "Cache Time-To-Live" : "Gyorsítótár tárolási időtartama", + "in seconds. A change empties the cache." : "másodpercben. A változtatás törli a gyorsítótár tartalmát.", "Directory Settings" : "Címtár beállítások", - "User Display Name Field" : "A felhasználónév mezője", - "The LDAP attribute to use to generate the user's display name." : "Ebből az LDAP attribútumból képződik a felhasználó megjelenítendő neve.", - "2nd User Display Name Field" : "Második felhasználónév mező", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcionális. Egy LDAP attribútum, melyet a felhasználónév mellé teszünk a zárójelben. Például: »John Doe (john.doe@example.org)«.", + "User Display Name Field" : "A felhasználó megjelenítendő név mezője", + "The LDAP attribute to use to generate the user's display name." : "Az LDAP attribútum, amelyből a felhasználó megjelenítendő neve előállításra kerül.", + "2nd User Display Name Field" : "Második felhasználói megjelenítendő név mező", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Nem kötelező. Egy LDAP attribútum, amely a megjelenítendő név mögé kerül zárójelben. Például ezt eredményezi: »John Doe (john.doe@example.org)«.", "Base User Tree" : "A felhasználói fa gyökere", - "One User Base DN per line" : "Soronként egy felhasználói fa gyökerét adhatjuk meg", - "User Search Attributes" : "A felhasználók lekérdezett attribútumai", - "Optional; one attribute per line" : "Nem kötelező megadni, soronként egy attribútum", - "Group Display Name Field" : "A csoport nevének mezője", - "The LDAP attribute to use to generate the groups's display name." : "Ebből az LDAP attribútumból képződik a csoport megjelenítendő neve.", + "One User Base DN per line" : "Soronként egy felhasználói alap DN", + "User Search Attributes" : "Felhasználókeresési attribútumok", + "Optional; one attribute per line" : "Nem kötelező; soronként egy attribútum", + "Disable users missing from LDAP" : "Az LDAP-ból hiányzó felhasználók letiltása", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Ha engedélyezve van, az LDAP importálásból hiányzó felhasználók letiltásra kerülnek", + "Group Display Name Field" : "A csoport megjelenítendő nevének mezője", + "The LDAP attribute to use to generate the groups's display name." : "A csoport megjelenítendő nevének előállításához használandó LDAP attribútum.", "Base Group Tree" : "A csoportfa gyökere", - "One Group Base DN per line" : "Soronként egy csoportfa gyökerét adhatjuk meg", - "Group Search Attributes" : "A csoportok lekérdezett attribútumai", - "Group-Member association" : "A csoporttagság attribútuma", - "Dynamic Group Member URL" : "Dinamikus csoporttag URL", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Az LDAP attribútum ami megmutatja az LDAP kereséseknél a csoport objektumban mi tartozik a csoportba. (Üres beállítás esetén a dinamikus csoporttagság funkció kikapcsol.)", + "One Group Base DN per line" : "Soronként egy csoportfa alap DN-je adható meg", + "Group Search Attributes" : "Csoportkeresési attribútumok", + "Group-Member association" : "Csoport-tag összerendelés", + "Dynamic Group Member URL" : "Dinamikus csoporttagsági URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Az LDAP attribútum, amely csoportobjektumok esetén egy LDAP keresési URL-t tartalmaz, amely meghatározza, hogy mely objektumok tartoznak a csoportba. (Az üres beállítás kikapcsolja a dinamikus csoporttagság funkciót.)", "Nested Groups" : "Egymásba ágyazott csoportok", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Amikor be van kapcsolva, akkor azokat a csoportokat is kezelni tudjuk, melyekben a személyek mellett csoportok is vannak. (Csak akkor működik, ha a csoportok \"member\" attribútuma DN-eket tartalmaz.)", - "Paging chunksize" : "Lapozási darab méret", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "A lapméret megadásával korlátozható az egy fordulóban kapott találatok száma, akkor is, ha az LDAP-keresés nagyon sok találatot ad, ha ezt az LDAP-kiszolgáló támogatja. (Ha 0-ra állítjuk, akkor ezáltal letiltjuk ezt a lapozó funkciót.)", - "Enable LDAP password changes per user" : "LDAP jelszavak felhasználónkénti változtatásának engedélyezése", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP felhasználók jelszómódosításának engedélyezése és Super Adminisztrátorok és Csoport Adminisztrátorok felhatalmazása felhasználóik jelszavainak módosítására. Csak az LDAP megfelelő jelszópolitikai beállításai mellett működik. Mivel a jelszavakat sima szövegként küldjük az LDAP szervernek, átviteli titkosítást kell alkalmazni és a jelszó hash-eket az LDAP szerveren kell bekapcsolni.", - "(New password is sent as plain text to LDAP)" : "(Az új jelszó sima szövegként lett elküldve az LDAP-nak)", - "Default password policy DN" : "Alapértelmezett jelszó szabály DN", - "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Az alapértelmezett jelszó lejárati politika DN-je, melyet alkalmazunk. Csak akkor működik, ha a felhasználónkénti jelszómódosítás be van kapcsolva és csak OpenLDAP-al. Hagyd üresen a jelszólejárat kikapcsolásához.", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ha be van kapcsolva, akkor a csoportokat tartalmazó csoportok is támogatottak. (Csak akkor működik, ha a csoporttagok tagsági attribútuma DN-eket tartalmaz.)", + "Paging chunksize" : "Lapozás lapmérete", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "A lapméret megadásával korlátozható az egy felsorolásban kapott találatok száma, akkor is, ha az LDAP-keresés nagyon sok találatot ad. (A 0-ra állítés letiltja az LDAP keresések lapozását ezekben a helyzetekben.)", + "Enable LDAP password changes per user" : "LDAP jelszavak felhasználónkénti módosításának engedélyezése", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Lehetővé teszi az LDAP felhasználóknak, hogy módosítsák a jelszavukat, illetve a szuperadminisztrátorok és a csoportadminisztrátorok számára, hogy módosítsák az LDAP felhasználóik jelszavát. Csak akkor működik, ha az LDAP-kiszolgáló megfelelő hozzáférés-vezérlési házirenddel rendelkezik. Mivel a jelszavak titkosítatlan szövegként lesznek elküldve az LDAP-kiszolgálónak, ezért átviteli titkosítást kell használni és be kell kapcsolni a jelszavak ujjlenyomat-készítését az LDAP-kiszolgálón.", + "(New password is sent as plain text to LDAP)" : "(Az új jelszó titkosítatlan szövegként lesz elküldve az LDAP-nak)", + "Default password policy DN" : "Alapértelmezett jelszóházirend DN-je", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "A jelszavak lejáratához használt alapértelmezett jelszóházirend DN-je. Csak akkor működik, ha a felhasználónkénti jelszómódosítás be van kapcsolva, és csak OpenLDAP-pal támogatott. Hagyja üresen a jelszavak lejáratának kezelésének kikapcsolásához.", "Special Attributes" : "Különleges attribútumok", "Quota Field" : "Kvóta mező", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Hagyd üresen az alapértelmezett felhasználói kvótáért, vagy adj meg egy LDAP/AD paramétert.", - "Quota Default" : "Alapértelmezett kvóta", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Alapértelmezett kvóta felülírása azon felhasználóknál, akiknek nincs beállított érték a Kvóta Mezőben.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen a felhasználó alapértelmezett kvótájához. Egyéb esetben adjon meg egy LDAP/AD attribútumot.", + "Quota Default" : "Kvóta alapértelmezése", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Alapértelmezett kvóta felülírása azon felhasználóknál, akiknél nincs beállítva érték a Kvóta mezőben.", "Email Field" : "E-mail mező", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Felhasználó e-mail címének beírása az LDAP attribútum alapján. Hagyd üresen az alapértelmezett működéshez.", - "User Home Folder Naming Rule" : "Felhasználói Home mappa elnevezési szabály", - "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen a felhasználónévhez (alapértelmezett). Egyéb esetben adjon meg egy LDAP/AD tulajdonságot.", - "\"$home\" Placeholder Field" : "\"$home\" Helykitöltő Mező", - "$home in an external storage configuration will be replaced with the value of the specified attribute" : "A $home külső tárhely beállításánál az adott tulajdonság értékével lesz lecserélve.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Felhasználó e-mail-címének beállítása az LDAP attribútum alapján. Hagyja üresen az alapértelmezett működéshez.", + "User Home Folder Naming Rule" : "Felhasználói saját mappa elnevezési szabálya", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen a felhasználónévhez (alapértelmezett). Egyéb esetben adjon meg egy LDAP/AD attribútumot.", + "\"$home\" Placeholder Field" : "„$home” helykitöltő mező", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Külső tárhely beállítása esetén a $home a megadott tulajdonság értékére lesz cserélve", + "User Profile Attributes" : "Felhasználói profil attribútumai", + "Phone Field" : "Telefonszám mező", + "User profile Phone will be set from the specified attribute" : "A felhasználói profil Telefonszám mezője a megadott attribútumból lesz beállítva", + "Website Field" : "Webhely mező", + "User profile Website will be set from the specified attribute" : "A felhasználói profil Webhely mezője a megadott attribútumból lesz beállítva", + "Address Field" : "Cím mező", + "User profile Address will be set from the specified attribute" : "A felhasználói profil Cím mezője a megadott attribútumból lesz beállítva", + "Twitter Field" : "Twitter mező", + "User profile Twitter will be set from the specified attribute" : "A felhasználói profil Twitter mezője a megadott attribútumból lesz beállítva", + "Fediverse Field" : "Födiverzum mező", + "User profile Fediverse will be set from the specified attribute" : "A felhasználói profil Födiverzum mezője a megadott attribútumból lesz beállítva", + "Organisation Field" : "Szervezet mező", + "User profile Organisation will be set from the specified attribute" : "A felhasználói profil Szervezet mezője a megadott attribútumból lesz beállítva", + "Role Field" : "Szerepkör mező", + "User profile Role will be set from the specified attribute" : "A felhasználói profil Szerepkör mezője a megadott attribútumból lesz beállítva", + "Headline Field" : "Szalagcím mező", + "User profile Headline will be set from the specified attribute" : "A felhasználói profil Szalagcím mezője a megadott attribútumból lesz beállítva", + "Biography Field" : "Életrajz mező", + "User profile Biography will be set from the specified attribute" : "A felhasználói profil Életrajz mezője a megadott attribútumból lesz beállítva", "Internal Username" : "Belső felhasználónév", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Alapértelmezetten egy belső felhasználónév jön létre a UUID attribútumból. Gondoskodik róla, hogy a felhasználónév egyedi legyen és ne kelljen a karaktereket konvertálni. A belső felhasználónév csak a következő karakterekből állhat: [ a-zA-Z0-9_.@- ]. Más karakterek az ASCII megfelelőikre lesznek cserélve, vagy csak simán ki lesznek hagyva. Ütközés eseté egy szám lesz hozzáadva, vagy növelve. A belső felhasználónév a felhasználó belső azonosítására szolgál. Egyben a felhasználó saját mappájának neveként is szolgál. Része a távoli URL-eknek, például az összes DAV szolgáltatásnál. Ezzel a beállítással az alapértelmezett működés felülírható. Hagyd üresen az alapértelmezett működéshez. A változások csak újonnan leképezett (hozzáadott) LDAP felhasználóknál kerül alkalmazásra.", - "Internal Username Attribute:" : "A belső felhasználónév attribútuma:", - "Override UUID detection" : "Az UUID-felismerés felülbírálása", - "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." : "Az UUID attribútum alapértelmezetten felismerésre kerül. Az UUID attribútum segítségével az LDAP felhasználók és csoportok egyértelműen azonosíthatók. A belső felhasználónév is azonos lesz az UUID-vel, ha fentebb nincs másként definiálva. Ezt a beállítást felülbírálhatja és bármely attribútummal helyettesítheti. Ekkor azonban gondoskodnia kell arról, hogy a kiválasztott attribútum minden felhasználó és csoport esetén lekérdezhető legyen és egyedi értékkel bír. Ha a mezőt üresen hagyja, akkor az alapértelmezett attribútum lesz érvényes. Egy esetleges módosítás csak az újonnan hozzárendelt (ill. létrehozott) felhasználókra és csoportokra lesz érvényes.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Alapértelmezetten egy belső felhasználónév jön létre a UUID attribútumból. Gondoskodik róla, hogy a felhasználónév egyedi legyen és ne kelljen a karaktereket konvertálni. A belső felhasználónév csak a következő karakterekből állhat: [a-zA-Z0-9_.@-]. Más karakterek az ASCII megfelelőikre lesznek cserélve, vagy csak simán ki lesznek hagyva. Ütközés esetén egy szám lesz hozzáadva, vagy növelve. A belső felhasználónév a felhasználó belső azonosítására szolgál. Egyben a felhasználó saját mappájának neveként is szolgál. Ez része a távoli URL-eknek, például az összes *DAV szolgáltatásnál. Ezzel a beállítással az alapértelmezett működés felülírható. A változások csak újonnan hozzárendelt (hozzáadott) LDAP felhasználóknál kerül alkalmazásra. Hagyja üresen az alapértelmezett viselkedéshez.", + "Internal Username Attribute:" : "Belső felhasználónév attribútuma:", + "Override UUID detection" : "UUID-felismerés felülbírálása", + "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." : "Az UUID attribútum alapértelmezetten felismerésre kerül. Az UUID attribútum segítségével az LDAP felhasználók és csoportok egyértelműen azonosíthatók. A belső felhasználónév is azonos lesz az UUID-vel, ha fentebb nincs másként definiálva. Ezt a beállítást felülbírálhatja és bármely attribútummal helyettesítheti. Ekkor azonban gondoskodnia kell arról, hogy a kiválasztott attribútum minden felhasználó és csoport esetén lekérdezhető legyen, és egyedi értékkel bírjon. Ha a mezőt üresen hagyja, akkor az alapértelmezett attribútum lesz érvényes. Egy esetleges módosítás csak az újonnan hozzárendelt (hozzáadott) felhasználókra és csoportokra lesz érvényes.", "UUID Attribute for Users:" : "A felhasználók UUID attribútuma:", "UUID Attribute for Groups:" : "A csoportok UUID attribútuma:", - "Username-LDAP User Mapping" : "Felhasználó - LDAP felhasználó hozzárendelés", - "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "A felhasználónevek a metaadtok kezeléséhez és tárolásához vannak felhasználva. Annak érdekében, hogy teljes mértékben beazonosítható legyen egy felhasználó, minden LDAP felhasználó kapni fog egy belső felhasználónevet. Ez egy hozzárendelést igényel az eredeti felhasználónév és az LDAP fiók között. A létrejött felhasználónév hozzárendelődik az LDAP fiók UUID-hoz. Emellett a DN cachelve van az LDAP interakciók csönketése érdekében de nincs felhasználva azonosítás céljából. Ha a DN változik, ezeket a változásokat a rendszer észleli. A belső felhasználó név van mindenhol felhasználva a rendszeren belül. A hozzárendeléseket törlése adat töredékeket hagy maga után. A hozzárendelések ürítése nem beállítás érzékeny, ez minden LDAP beállításra hatással van! Soha ne ürítse éles rendszeren a hozzárendeléseket, csak kísérleti szakaszokban.", - "Clear Username-LDAP User Mapping" : "A felhasználó - LDAP felhasználó hozzárendelés törlése", - "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése" + "Username-LDAP User Mapping" : "Felhasználónév–LDAP felhasználó hozzárendelés", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "A felhasználónevek a metaadatok kezeléséhez és tárolásához vannak felhasználva. Annak érdekében, hogy teljes mértékben azonosítható legyen egy felhasználó, minden LDAP felhasználó kapni fog egy belső felhasználónevet. Ez egy hozzárendelést igényel az eredeti felhasználónév és az LDAP fiók között. A létrejött felhasználónév hozzárendelődik az LDAP fiók UUID értékéhez. Emellett a DN gyorsítótárazott, hogy csökkentse az LDAP interakciók számát, de nincs használva azonosítás céljából. Ha a DN megváltozik, a rendszer észleli ezeket a változásokat. A belső felhasználónév van mindenhol használva a rendszeren belül. A hozzárendelések törlése adattöredékeket hagy maga után. A hozzárendelések ürítése nem beállításfüggő, minden LDAP beállításra hatással van. Soha ne ürítse éles rendszeren a hozzárendeléseket, csak tesztelési vagy kísérleti szakaszban.", + "Clear Username-LDAP User Mapping" : "Felhasználónév–LDAP felhasználó hozzárendelés törlése", + "Clear Groupname-LDAP Group Mapping" : "Csoport–LDAP csoport hozzárendelés törlése", + "Invalid configuration. Please have a look at the logs for further details." : "Érvénytelen beállítások. További információkért nézze meg a naplófájlokat." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/hu.json b/apps/user_ldap/l10n/hu.json index efb9cde474e..c5673ac0c1f 100644 --- a/apps/user_ldap/l10n/hu.json +++ b/apps/user_ldap/l10n/hu.json @@ -1,192 +1,217 @@ { "translations": { "Failed to clear the mappings." : "Nem sikerült törölni a hozzárendeléseket.", - "Failed to delete the server configuration" : "Nem sikerült törölni a szerver konfigurációját", - "Invalid configuration: Anonymous binding is not allowed." : "Érvénytelen beállítás: Anonim kötés nem engedélyezett.", - "Valid configuration, connection established!" : "Érvényes beállítás, kapcsolat létrejött!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Érvényes beállítás, de a kötés nem jött létre. Kérlek ellenőrizd a szerver beállításokat és a hitelesítőadatokat.", - "Invalid configuration. Please have a look at the logs for further details." : "Érvénytelen konfiguráció. További információkért nézze meg a naplófájlokat!", - "No action specified" : "Nincs megadva parancs", - "No configuration specified" : "Nincs megadva konfiguráció", - "No data specified" : "Nincs adat megadva", - " Could not set configuration %s" : "A konfiguráció nem állítható be: %s", + "Failed to delete the server configuration" : "Nem sikerült törölni a kiszolgáló beállításait", + "Invalid configuration: Anonymous binding is not allowed." : "Érvénytelen beállítások: Az anonim kötés nem engedélyezett.", + "Valid configuration, connection established!" : "Érvényes beállítások, a kapcsolat létrejött.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Érvényes beállítások, de a kötés sikertelen. Ellenőrizze a kiszolgálóbeállításokat és a hitelesítő adatokat.", + "No action specified" : "Nincs megadva művelet", + "No configuration specified" : "Nincsenek megadva beállítások", + "No data specified" : "Nincsenek megadva adatok", + "Invalid data specified" : "A megadott adatok érvénytelenek", "Action does not exist" : "A művelet nem létezik", - "Renewing …" : "Megújítás...", + "Renewing …" : "Megújítás…", "Very weak password" : "Nagyon gyenge jelszó", "Weak password" : "Gyenge jelszó", "So-so password" : "Nem túl jó jelszó", "Good password" : "Jó jelszó", "Strong password" : "Erős jelszó", - "The Base DN appears to be wrong" : "Úgy tűnik, a címtár gyökere (base DN) hibás", - "Testing configuration…" : "Beállítások ellenőrzése...", - "Configuration incorrect" : "Konfiguráió hibás", - "Configuration incomplete" : "Konfiguráció nincs befejezve", - "Configuration OK" : "Konfiguráció OK", + "The Base DN appears to be wrong" : "Úgy tűnik, hogy az alap DN hibás", + "Testing configuration…" : "Beállítások ellenőrzése…", + "Configuration incorrect" : "A beállítások hibásak", + "Configuration incomplete" : "A beállítások hiányosak", + "Configuration OK" : "A beállítások rendben", "Select groups" : "Csoportok kiválasztása", "Select object classes" : "Objektumosztályok kiválasztása", - "Please check the credentials, they seem to be wrong." : "Kérlek ellenőrizd az azonosítókat, hibásnak tűnnek.", - "Please specify the port, it could not be auto-detected." : "Kérlek add meg a port számát, nem lehetett automatikusan detektálni.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "A címtár gyökerét (base DN) nem sikerült automatikusan felismerni, kérlek, ellenőrizd az azonosítókat, a kiszolgáló nevét és a portot.", - "Could not detect Base DN, please enter it manually." : "Nem sikerült felismerni a címtár gyökerét (base DN), kérlek, add meg kézzel.", - "{nthServer}. Server" : "{nthServer}. Szerver", - "No object found in the given Base DN. Please revise." : "Nem találhatók objektumok a megadott címtár gyökérben (base DN). Kérlek, ellenőrizd.", - "More than 1,000 directory entries available." : "Több mint 1000 címtár bejegyzés érhető el.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} bejegyzés érhető el a megadott Base DN-ben","{objectsFound} bejegyzés érhető el a megadott Base DN-ben"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hiba törént. Kérlek, ellenőrizd a címtár gyökerét (base DN), a kapcsolat beállításait és az azonosítókat.", - "Do you really want to delete the current Server Configuration?" : "Tényleg törölni szeretné a szerver beállításait?", - "Confirm Deletion" : "A törlés megerősítése", + "Please check the credentials, they seem to be wrong." : "Ellenőrizze a hitelesítő adatokat, hibásnak tűnnek.", + "Please specify the port, it could not be auto-detected." : "Adja meg a port számát, nem lehetett automatikusan felismerni.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Az alap DN-t nem sikerült automatikusan felismerni, ellenőrizze a hitelesítő adatokat, a kiszolgáló nevét és a portot.", + "Could not detect Base DN, please enter it manually." : "Nem sikerült felismerni az alap DN-t, adja meg kézzel.", + "{nthServer}. Server" : "{nthServer}. kiszolgáló", + "No object found in the given Base DN. Please revise." : "Nem találhatók objektumok a megadott alap DN alatt. Ellenőrizze.", + "More than 1,000 directory entries available." : "Több mint 1000 címtárbejegyzés érhető el.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} bejegyzés érhető el a megadott alap DN alatt","{objectsFound} bejegyzés érhető el a megadott alap DN alatt"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hiba történt. Ellenőrizze az alap DN-t, valamint a kapcsolat beállításait és a hitelesítő adatokat.", + "Do you really want to delete the current Server Configuration?" : "Biztos, hogy törli a jelenlegi kiszolgálóbeállításokat?", + "Confirm Deletion" : "Törlés megerősítése", "Mappings cleared successfully!" : "A hozzárendelések sikeresen törölve.", - "Error while clearing the mappings." : "Hiba a leképzések törlése közben.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "A névtelen hozzáférés (anonymous bind) nem engedélyezett. Kérlek, add meg a felhasználó címtár-azonosítóját (DN) és jelszavát.", - "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP műveleti hiba. Lehetséges hogy az anonim kötés nincs engedélyezve.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "A mentés sikertelen. Kérlek győződj meg róla, hogy az adatbázis működik. Töltsd újra a folytatás előtt.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "A módváltás engedélyezi az automatikus LDAP lekérdezéseket. Az LDAP-od méretétől függően sokáig tarthatnak. Biztosan átváltod a módot?", - "Mode switch" : "Üzemmód váltás", + "Error while clearing the mappings." : "Hiba a hozzárendelések törlése során.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Az anonim kötés nem engedélyezett. Adja meg a felhasználó DN-jét és a jelszót.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP műveleti hiba. Lehet, hogy az anonim kötés nincs engedélyezve.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "A mentés sikertelen. Győződjön meg róla, hogy az adatbázis működik-e. A folytatás előtt töltse újra.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "A módváltás engedélyezi az automatikus LDAP lekérdezéseket. Az LDAP-ja méretétől függően ezek sokáig tarthatnak. Biztos, hogy átváltja a módot?", + "Mode switch" : "Üzemmódváltás", "Select attributes" : "Attribútumok kiválasztása", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Felhasználó nincs meg. Kérlek ellenőrizd a felhasználónevet és a bejelentkezési adatokat. Érvényes szűrő (vágólap használathoz a parancssori ellenőrzéshez): <br/>", - "User found and settings verified." : "Felhasználó megtalálva, beállítások ellenőrizve.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Esetleg szűkítsd a keresést, mert rengeteg felhasználóra igaz, de csak az első fog tudni belépni.", - "An unspecified error occurred. Please check log and settings." : "Ismeretlen hiba lépett fel. Kérlek nézd meg a naplót.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "A keresési feltétel érvénytelen, talán el van írva, például nem azonos a kezdő és záró zárójelek száma.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/AD kapcsolati hiba lépett fel, ellenőrizze a gépet, a portot és a hitelesítési adatokat.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "A \"%uid\" helytartó hiányzik. Ez kerül behelyettesítésre a felhasználónévvel az LDAP / AD lekérdezéskor.", - "Please provide a login name to test against" : "Kérlek adj meg egy bejelentkezési nevet az újrateszteléshez", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "A csoport doboz ki van kapcsolva, mert az LDAP/AD szerver nem támogatja a memberOf-ot.", - "Password change rejected. Hint: " : "Jelszó módosítás elutasítva. Tipp:", - "Please login with the new password" : "Kérlek lépj be az új jelszóval", - "LDAP User backend" : "LDAP Felhasználói háttér", - "Your password will expire tomorrow." : "A jelszavad holnap lejár", - "Your password will expire today." : "A jelszavad ma lejár.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["A jelszavad %nnap múlva lejár. ","A jelszavad %n nap múlva lejár."], - "LDAP / AD integration" : "LDAP / AD integráció", - "_%s group found_::_%s groups found_" : ["%s csoport van","%s csoport van"], - "_%s user found_::_%s users found_" : ["%s felhasználó van","%s felhasználó van"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nem lehet megállapítani a megjelenítendő név mezőt. Kérlek add meg kézzel a bővített LDAP beállításokban.", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "A felhasználó nem található. Ellenőrizze a felhasználónevet és a bejelentkezési adatokat. Érvényes szűrő (beillesztéshez a parancssori ellenőrzéshez): <br/>", + "User found and settings verified." : "A felhasználó megtalálva, beállítások ellenőrizve.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Esetleg szűkítse a keresést, mert több felhasználóra igaz, de ezek közül csak az első fog tudni belépni.", + "An unspecified error occurred. Please check log and settings." : "Ismeretlen hiba lépett fel. Ellenőrizze a naplót és a beállításokat.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "A keresési szűrő érvénytelen, lehet hogy szintaktikai problémák miatt, például nem azonos a kezdő és záró zárójelek száma. Ellenőrizze.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Csatlakozási hiba az LDAP/AD-vel. Ellenőrizd a kiszolgálót, a portot és a hitelesítő adatokat.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "A(z) „%uid” helykitöltő hiányzik. Ez lesz lecserélve a felhasználónévre az LDAP/AD lekérdezésekor.", + "Please provide a login name to test against" : "Adjon meg egy bejelentkezési nevet a teszteléshez", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "A csoport beviteli mező ki van kapcsolva, mert az LDAP/AD-kiszolgáló nem támogatja a memberOf attribútumtípust.", + "Please login with the new password" : "Jelentkezzen be az új jelszóval", + "LDAP User backend" : "LDAP felhasználói háttérszolgáltatás", + "Your password will expire tomorrow." : "A jelszava holnap lejár.", + "Your password will expire today." : "A jelszava ma lejár.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["A jelszava %n nap múlva lejár.","A jelszava %n nap múlva lejár."], + "LDAP/AD integration" : "LDAP/AD integráció", + "Invalid LDAP UUIDs" : "Érvénytelen LADS UUID-k", + "None found" : "Nincs találat", + "_%n group found_::_%n groups found_" : ["%n csoport található","%n csoport található"], + "> 1000 groups found" : "> 1000 csoport található", + "> 1000 users found" : "> 1000 felhasználó találhatófound", + "_%n user found_::_%n users found_" : ["%n felhasználó található","%n felhasználó található"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nem lehet észlelni a felhasználó megjelenítendő név attribútumát. Adja meg kézzel a speciális LDAP beállításokban.", "Could not find the desired feature" : "A kívánt funkció nem található", "Invalid Host" : "Érvénytelen gépnév", - "LDAP user and group backend" : "LDAP felhasználói és csoport háttér", + "LDAP user and group backend" : "LDAP felhasználói és csoport háttérszolgáltatás", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Ez az alkalmazás lehetővé teszi a rendszergazdáknak, hogy a Nextcloudot LDAP alapú címtárhoz csatlakoztassák.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ez az alkalmazás lehetővé teszi a rendszergazdáknak, hogy a Nextcloudot LDAP alapú címtárhoz csatlakoztatva hitelesítsenek és hozzanak létre felhasználókat, csoportokat, valamint csoportattribútumokat. A rendszergazdák beállíthatják az alkalmazást, hogy egy vagy több LDAP címtárhoz vagy Active Directoryhoz csatlakozzanak LDAP-n keresztül. Megfelelő lekérdezésekkel és szűrőkkel egyebek mellett olyan tulajdonságokat lehet importálni a Nextcloudba, mint a tárhely mérete, e-mail cím, profilkép, csoporttagságok.\n\nA felhasználó LDAP vagy AD azonosító adatokkal jelentkezik be, és a hozzáférését az LDAP vagy AD kiszolgáló kezeli a hitelesítést, ami alapján hozzáférést kap. A Nextcloud nem tárol LDAP vagy AD jelszavakat: a hitelesítés után munkafolyamatot hozzáköti a felhasználói azonosítóhoz. További információ érhető e az LDAP felhasználói és csoport háttér dokumentációban.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ez az alkalmazás lehetővé teszi a rendszergazdáknak, hogy a Nextcloudot LDAP alapú címtárhoz csatlakoztatva hitelesítsenek és hozzanak létre felhasználókat, csoportokat és felhasználói attribútumokat. A rendszergazdák beállíthatják az alkalmazást, hogy egy vagy több LDAP címtárhoz vagy Active Directoryhoz csatlakozzanak LDAP-on keresztül. Megfelelő lekérdezésekkel és szűrőkkel egyebek mellett olyan tulajdonságokat lehet importálni a Nextcloudba, mint a tárhely mérete, az e-mail-cím, a profilkép és a csoporttagságok.\n\nA felhasználó LDAP vagy AD azonosító adatokkal jelentkezik be, és a hozzáférését az LDAP vagy AD kiszolgáló kezeli a hitelesítést, ami alapján hozzáférést kap. A Nextcloud nem tárol LDAP vagy AD jelszavakat: a hitelesítés után munkafolyamatot hozzáköti a felhasználói azonosítóhoz. További információ érhető el az LDAP felhasználói és csoport háttérszolgáltatásának dokumentációban.", "Test Configuration" : "A beállítások tesztelése", "Help" : "Súgó", - "Groups meeting these criteria are available in %s:" : "A %s szolgáltatás azon csoportok létezését veszi figyelembe, amik a következő feltételeknek felelnek meg:", + "Groups meeting these criteria are available in %s:" : "A(z) %s szolgáltatásban a következő feltételeknek megfelelő csoportok érhetők el:", "Only these object classes:" : "Csak ezek az objektumosztályok:", "Only from these groups:" : "Csak ezekből a csoportokból:", - "Search groups" : "Csoport keresés", + "Search groups" : "Csoportok keresése", "Available groups" : "Elérhető csoportok", "Selected groups" : "Kiválasztott csoportok", - "Edit LDAP Query" : "LDAP lekérdezés szerkesztés", + "Edit LDAP Query" : "LDAP lekérdezés szerkesztése", "LDAP Filter:" : "LDAP szűrő:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP csoportok lesznek jogosultak %s elérésére.", - "Verify settings and count the groups" : "Ellenőrizd a beállításokat és számold meg a csoportokat", - "When logging in, %s will find the user based on the following attributes:" : "Bejelentkezve, %s a következő attribútumok alapján találja meg a felhasználót:", - "LDAP / AD Username:" : "LDAP / AD felhasználónév:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Bejelentkezés engedélyezése LDAP / AD felhasználónévvel, ami vagy \"uid\" vagy \"sAMAccountName\" és fel lesz ismerve.", - "LDAP / AD Email Address:" : "LDAP / AD e-mail cím:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Bejelentkezés engedélyezése az e-mail attribútum alapján. \"mail\" és \"mailPrimaryAddress\" megengedett.", + "The filter specifies which LDAP groups shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP csoportok fognak hozzáférni a(z) %s példányhoz.", + "Verify settings and count the groups" : "Ellenőrizze a beállításokat és számolja meg a csoportokat", + "When logging in, %s will find the user based on the following attributes:" : "Bejelentkezéskor a(z) %s a következő attribútumok alapján találja meg a felhasználót:", + "LDAP/AD Username:" : "LDAP/AD felhasználónév:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Lehetővé teszi az LDAP/AD felhasználónévvel történő bejelentkezést, amelynél vagy az „uid” vagy az „sAMAccountName” lesz észlelve.", + "LDAP/AD Email Address:" : "LDAP/AD e-mail-cím:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Bejelentkezés engedélyezése az egyik e-mail attribútum alapján. A „mail” és „mailPrimaryAddress” engedélyezett.", "Other Attributes:" : "Más attribútumok:", - "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "A belépéskor alkalmazandó filtert definiálja. \"%%uid\" lecseréli a felhasználónevez a bejelentkezésnél. Példa: \"uid=%%uid\"", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Meghatározza a belépéskor alkalmazandó szűrőt. A „%%uid” lecseréli a felhasználónevet a bejelentkezési műveletnél. Például: „uid=%%uid”", "Test Loginname" : "Teszt bejelentkezési név", + "Attempts to receive a DN for the given loginname and the current login filter" : "Megpróbál fogadni egy DN-t a megadott „loginname” és a jelenlegi bejelentkezési szűrő alapján", "Verify settings" : "Beállítások ellenőrzése", - "%s. Server:" : "%s. szerver", - "Add a new configuration" : "Új beállítás hozzáadása", - "Copy current configuration into new directory binding" : "Jelenlegi beállítások másolása egy új mappakötésbe", - "Delete the current configuration" : "Aktuális konfiguráció törlése", + "%s. Server:" : "%s. szerver:", + "Add a new configuration" : "Új beállítások hozzáadása", + "Copy current configuration into new directory binding" : "Jelenlegi beállítások másolása egy új címtárkötésbe", + "Delete the current configuration" : "Jelenlegi beállítások törlése", "Host" : "Kiszolgáló", - "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Kihagyhatod a protokollt kivéve, ha SSL-t használsz. Ebben az esetben ldaps://-el kezdd", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Kihagyhatja a protokollt kivéve, ha az SSL kötelező. Ebben az esetben kezdje ldaps:// protokollal.", "Port" : "Port", - "Detect Port" : "Port detektálás", - "User DN" : "A kapcsolódó felhasználó DN-je", - "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." : "Annak a felhasználónak a DN-je, akinek a nevében bejelentkezve kapcsolódunk a kiszolgálóhoz, pl. uid=agent,dc=example,dc=com. Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!", + "Detect Port" : "Port észlelése", + "User DN" : "Alap 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." : "Annak a kliensfelhasználónak a DN-je, akinek a nevében történik a kötés, például uid=agent,dc=example,dc=com. Az anonim eléréshez hagyja üresen a DN és Jelszó mezőket.", "Password" : "Jelszó", - "For anonymous access, leave DN and Password empty." : "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!", - "Save Credentials" : "Hitelesítőadatok mentése", - "One Base DN per line" : "Soronként egy DN-gyökér", - "You can specify Base DN for users and groups in the Advanced tab" : "A Haladó fülre kattintva külön DN-gyökér állítható be a felhasználók és a csoportok számára", - "Detect Base DN" : "Alap DN detektálása", + "For anonymous access, leave DN and Password empty." : "Az anonim eléréshez hagyja üresen a DN és Jelszó mezőket.", + "Save Credentials" : "Hitelesítő adatok mentése", + "One Base DN per line" : "Soronként egy alap DN", + "You can specify Base DN for users and groups in the Advanced tab" : "A felhasználók és csoportok alap DN-jét a Speciális lapon adhatja meg", + "Detect Base DN" : "Alap DN észlelése", "Test Base DN" : "Alap DN ellenőrzése", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Kerülje az automata LDAP kéréseket. Hasznos nagy telepítéseknél, de némi LDAP ismeretet igényel.", - "Manually enter LDAP filters (recommended for large directories)" : "LDAP szűrők kézi beállitása (ajánlott a nagy könyvtáraknál)", - "Listing and searching for users is constrained by these criteria:" : "Felhasználók keresésének és listázásának szabályozása ezekkel a szabályokkal:", - "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." : "A leggyakoribb objektum osztályok a felhasználóknál az organizationalPerson, person, user, és inetOrgPerson. Ha nem vagy benne biztos melyik osztályt válaszd, kérlek konzultálj a könyvtár rendszergazdájával.", - "The filter specifies which LDAP users shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP felhasználók lesznek jogosultak %s elérésére.", - "Verify settings and count users" : "Beállítások ellenőrzése és felhasználók megszámolása", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Elkerüli az automatikus LDAP kéréseket. Hasznos nagy telepítéseknél, de némi LDAP ismeretet igényel.", + "Manually enter LDAP filters (recommended for large directories)" : "LDAP szűrők kézi beállítása (ajánlott a nagy könyvtáraknál)", + "Listing and searching for users is constrained by these criteria:" : "A felhasználók keresését és listázását ezek a szabályok korlátozzák:", + "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." : "A leggyakoribb objektumosztályok a felhasználóknál az „organizationalPerson”, a „person”, a „user”, és az „inetOrgPerson”. Ha nem biztos benne, hogy melyik osztályt válassza, akkor konzultáljon a címtár rendszergazdájával.", + "The filter specifies which LDAP users shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP felhasználók lesznek jogosultak a(z) %s példány elérésére.", + "Verify settings and count users" : "Ellenőrizze a beállításokat és számolja meg a felhasználókat", "Saving" : "Mentés", "Back" : "Vissza", "Continue" : "Folytatás", - "Please renew your password." : "Kérjük frissítsd a jelszavad.", - "An internal error occurred." : "Belső hiba lépett fel.", - "Please try again or contact your administrator." : "Próbáld meg ismét vagy lépj kapcsolatba a rendszergazdáddal.", + "Please renew your password." : "Újítsa meg a jelszavát.", + "An internal error occurred." : "Belső hiba történt.", + "Please try again or contact your administrator." : "Próbálja meg újra, vagy lépjen kapcsolatba a rendszergazdával.", "Current password" : "Jelenlegi jelszó", "New password" : "Új jelszó", - "Renew password" : "Jelszó megújítás", + "Renew password" : "Jelszó megújítása", "Wrong password." : "Hibás jelszó.", - "Cancel" : "Mégsem", - "Server" : "Szerver", + "Cancel" : "Mégse", + "Server" : "Kiszolgáló", "Users" : "Felhasználók", "Login Attributes" : "Bejelentkezési attribútumok", "Groups" : "Csoportok", - "Expert" : "Profi", - "Advanced" : "Haladó", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse!", + "Expert" : "Szakértő", + "Advanced" : "Speciális", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse.", "Connection Settings" : "Kapcsolati beállítások", "Configuration Active" : "A beállítás aktív", - "When unchecked, this configuration will be skipped." : "Ha nincs kipipálva, ez a beállítás kihagyódik.", - "Backup (Replica) Host" : "Biztonsági (replika) kiszolgáló", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Adjon meg egy opcionális biztonsági kiszolgálót. Ez a fő LDAP/AD szerver replikája kell legyen.", - "Backup (Replica) Port" : "Biztonsági kiszolgáló (replika) portszáma", - "Disable Main Server" : "A fő szerver kihagyása", - "Only connect to the replica server." : "Csak a másodlagos (másolati) szerverhez kapcsolódjunk.", - "Turn off SSL certificate validation." : "Ne ellenőrizzük az SSL-tanúsítvány érvényességét", - "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." : "Használata nem javasolt (kivéve tesztelési céllal). Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-szerver SSL tanúsítványát a(z) %s szerverre!", - "Cache Time-To-Live" : "A gyorsítótár tárolási időtartama", - "in seconds. A change empties the cache." : "másodpercen belül. A változtatás törli a gyorsítótár tartalmát.", + "When unchecked, this configuration will be skipped." : "Ha nincs kipipálva, ez a beállítás ki lesz hagyva.", + "Backup (Replica) Host" : "Tartalék (replika) kiszolgáló", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Adjon meg egy nem kötelező tartalék kiszolgálót. Ennek a fő LDAP/AD kiszolgáló replikájának kell lennie.", + "Backup (Replica) Port" : "Tartalék kiszolgáló (replika) portja", + "Disable Main Server" : "Fő kiszolgáló letiltása", + "Only connect to the replica server." : "Kapcsolódás csak a replika kiszolgálóhoz.", + "Turn off SSL certificate validation." : "SSL-tanúsítvány ellenőrzésének kikapcsolása.", + "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." : "Nem javasolt, csak tesztelésre használja. Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-kiszolgáló SSL tanúsítványát a(z) %s kiszolgálóra.", + "Cache Time-To-Live" : "Gyorsítótár tárolási időtartama", + "in seconds. A change empties the cache." : "másodpercben. A változtatás törli a gyorsítótár tartalmát.", "Directory Settings" : "Címtár beállítások", - "User Display Name Field" : "A felhasználónév mezője", - "The LDAP attribute to use to generate the user's display name." : "Ebből az LDAP attribútumból képződik a felhasználó megjelenítendő neve.", - "2nd User Display Name Field" : "Második felhasználónév mező", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcionális. Egy LDAP attribútum, melyet a felhasználónév mellé teszünk a zárójelben. Például: »John Doe (john.doe@example.org)«.", + "User Display Name Field" : "A felhasználó megjelenítendő név mezője", + "The LDAP attribute to use to generate the user's display name." : "Az LDAP attribútum, amelyből a felhasználó megjelenítendő neve előállításra kerül.", + "2nd User Display Name Field" : "Második felhasználói megjelenítendő név mező", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Nem kötelező. Egy LDAP attribútum, amely a megjelenítendő név mögé kerül zárójelben. Például ezt eredményezi: »John Doe (john.doe@example.org)«.", "Base User Tree" : "A felhasználói fa gyökere", - "One User Base DN per line" : "Soronként egy felhasználói fa gyökerét adhatjuk meg", - "User Search Attributes" : "A felhasználók lekérdezett attribútumai", - "Optional; one attribute per line" : "Nem kötelező megadni, soronként egy attribútum", - "Group Display Name Field" : "A csoport nevének mezője", - "The LDAP attribute to use to generate the groups's display name." : "Ebből az LDAP attribútumból képződik a csoport megjelenítendő neve.", + "One User Base DN per line" : "Soronként egy felhasználói alap DN", + "User Search Attributes" : "Felhasználókeresési attribútumok", + "Optional; one attribute per line" : "Nem kötelező; soronként egy attribútum", + "Disable users missing from LDAP" : "Az LDAP-ból hiányzó felhasználók letiltása", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Ha engedélyezve van, az LDAP importálásból hiányzó felhasználók letiltásra kerülnek", + "Group Display Name Field" : "A csoport megjelenítendő nevének mezője", + "The LDAP attribute to use to generate the groups's display name." : "A csoport megjelenítendő nevének előállításához használandó LDAP attribútum.", "Base Group Tree" : "A csoportfa gyökere", - "One Group Base DN per line" : "Soronként egy csoportfa gyökerét adhatjuk meg", - "Group Search Attributes" : "A csoportok lekérdezett attribútumai", - "Group-Member association" : "A csoporttagság attribútuma", - "Dynamic Group Member URL" : "Dinamikus csoporttag URL", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Az LDAP attribútum ami megmutatja az LDAP kereséseknél a csoport objektumban mi tartozik a csoportba. (Üres beállítás esetén a dinamikus csoporttagság funkció kikapcsol.)", + "One Group Base DN per line" : "Soronként egy csoportfa alap DN-je adható meg", + "Group Search Attributes" : "Csoportkeresési attribútumok", + "Group-Member association" : "Csoport-tag összerendelés", + "Dynamic Group Member URL" : "Dinamikus csoporttagsági URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Az LDAP attribútum, amely csoportobjektumok esetén egy LDAP keresési URL-t tartalmaz, amely meghatározza, hogy mely objektumok tartoznak a csoportba. (Az üres beállítás kikapcsolja a dinamikus csoporttagság funkciót.)", "Nested Groups" : "Egymásba ágyazott csoportok", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Amikor be van kapcsolva, akkor azokat a csoportokat is kezelni tudjuk, melyekben a személyek mellett csoportok is vannak. (Csak akkor működik, ha a csoportok \"member\" attribútuma DN-eket tartalmaz.)", - "Paging chunksize" : "Lapozási darab méret", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "A lapméret megadásával korlátozható az egy fordulóban kapott találatok száma, akkor is, ha az LDAP-keresés nagyon sok találatot ad, ha ezt az LDAP-kiszolgáló támogatja. (Ha 0-ra állítjuk, akkor ezáltal letiltjuk ezt a lapozó funkciót.)", - "Enable LDAP password changes per user" : "LDAP jelszavak felhasználónkénti változtatásának engedélyezése", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP felhasználók jelszómódosításának engedélyezése és Super Adminisztrátorok és Csoport Adminisztrátorok felhatalmazása felhasználóik jelszavainak módosítására. Csak az LDAP megfelelő jelszópolitikai beállításai mellett működik. Mivel a jelszavakat sima szövegként küldjük az LDAP szervernek, átviteli titkosítást kell alkalmazni és a jelszó hash-eket az LDAP szerveren kell bekapcsolni.", - "(New password is sent as plain text to LDAP)" : "(Az új jelszó sima szövegként lett elküldve az LDAP-nak)", - "Default password policy DN" : "Alapértelmezett jelszó szabály DN", - "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Az alapértelmezett jelszó lejárati politika DN-je, melyet alkalmazunk. Csak akkor működik, ha a felhasználónkénti jelszómódosítás be van kapcsolva és csak OpenLDAP-al. Hagyd üresen a jelszólejárat kikapcsolásához.", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ha be van kapcsolva, akkor a csoportokat tartalmazó csoportok is támogatottak. (Csak akkor működik, ha a csoporttagok tagsági attribútuma DN-eket tartalmaz.)", + "Paging chunksize" : "Lapozás lapmérete", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "A lapméret megadásával korlátozható az egy felsorolásban kapott találatok száma, akkor is, ha az LDAP-keresés nagyon sok találatot ad. (A 0-ra állítés letiltja az LDAP keresések lapozását ezekben a helyzetekben.)", + "Enable LDAP password changes per user" : "LDAP jelszavak felhasználónkénti módosításának engedélyezése", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Lehetővé teszi az LDAP felhasználóknak, hogy módosítsák a jelszavukat, illetve a szuperadminisztrátorok és a csoportadminisztrátorok számára, hogy módosítsák az LDAP felhasználóik jelszavát. Csak akkor működik, ha az LDAP-kiszolgáló megfelelő hozzáférés-vezérlési házirenddel rendelkezik. Mivel a jelszavak titkosítatlan szövegként lesznek elküldve az LDAP-kiszolgálónak, ezért átviteli titkosítást kell használni és be kell kapcsolni a jelszavak ujjlenyomat-készítését az LDAP-kiszolgálón.", + "(New password is sent as plain text to LDAP)" : "(Az új jelszó titkosítatlan szövegként lesz elküldve az LDAP-nak)", + "Default password policy DN" : "Alapértelmezett jelszóházirend DN-je", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "A jelszavak lejáratához használt alapértelmezett jelszóházirend DN-je. Csak akkor működik, ha a felhasználónkénti jelszómódosítás be van kapcsolva, és csak OpenLDAP-pal támogatott. Hagyja üresen a jelszavak lejáratának kezelésének kikapcsolásához.", "Special Attributes" : "Különleges attribútumok", "Quota Field" : "Kvóta mező", - "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Hagyd üresen az alapértelmezett felhasználói kvótáért, vagy adj meg egy LDAP/AD paramétert.", - "Quota Default" : "Alapértelmezett kvóta", - "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Alapértelmezett kvóta felülírása azon felhasználóknál, akiknek nincs beállított érték a Kvóta Mezőben.", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen a felhasználó alapértelmezett kvótájához. Egyéb esetben adjon meg egy LDAP/AD attribútumot.", + "Quota Default" : "Kvóta alapértelmezése", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Alapértelmezett kvóta felülírása azon felhasználóknál, akiknél nincs beállítva érték a Kvóta mezőben.", "Email Field" : "E-mail mező", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Felhasználó e-mail címének beírása az LDAP attribútum alapján. Hagyd üresen az alapértelmezett működéshez.", - "User Home Folder Naming Rule" : "Felhasználói Home mappa elnevezési szabály", - "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen a felhasználónévhez (alapértelmezett). Egyéb esetben adjon meg egy LDAP/AD tulajdonságot.", - "\"$home\" Placeholder Field" : "\"$home\" Helykitöltő Mező", - "$home in an external storage configuration will be replaced with the value of the specified attribute" : "A $home külső tárhely beállításánál az adott tulajdonság értékével lesz lecserélve.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Felhasználó e-mail-címének beállítása az LDAP attribútum alapján. Hagyja üresen az alapértelmezett működéshez.", + "User Home Folder Naming Rule" : "Felhasználói saját mappa elnevezési szabálya", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen a felhasználónévhez (alapértelmezett). Egyéb esetben adjon meg egy LDAP/AD attribútumot.", + "\"$home\" Placeholder Field" : "„$home” helykitöltő mező", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Külső tárhely beállítása esetén a $home a megadott tulajdonság értékére lesz cserélve", + "User Profile Attributes" : "Felhasználói profil attribútumai", + "Phone Field" : "Telefonszám mező", + "User profile Phone will be set from the specified attribute" : "A felhasználói profil Telefonszám mezője a megadott attribútumból lesz beállítva", + "Website Field" : "Webhely mező", + "User profile Website will be set from the specified attribute" : "A felhasználói profil Webhely mezője a megadott attribútumból lesz beállítva", + "Address Field" : "Cím mező", + "User profile Address will be set from the specified attribute" : "A felhasználói profil Cím mezője a megadott attribútumból lesz beállítva", + "Twitter Field" : "Twitter mező", + "User profile Twitter will be set from the specified attribute" : "A felhasználói profil Twitter mezője a megadott attribútumból lesz beállítva", + "Fediverse Field" : "Födiverzum mező", + "User profile Fediverse will be set from the specified attribute" : "A felhasználói profil Födiverzum mezője a megadott attribútumból lesz beállítva", + "Organisation Field" : "Szervezet mező", + "User profile Organisation will be set from the specified attribute" : "A felhasználói profil Szervezet mezője a megadott attribútumból lesz beállítva", + "Role Field" : "Szerepkör mező", + "User profile Role will be set from the specified attribute" : "A felhasználói profil Szerepkör mezője a megadott attribútumból lesz beállítva", + "Headline Field" : "Szalagcím mező", + "User profile Headline will be set from the specified attribute" : "A felhasználói profil Szalagcím mezője a megadott attribútumból lesz beállítva", + "Biography Field" : "Életrajz mező", + "User profile Biography will be set from the specified attribute" : "A felhasználói profil Életrajz mezője a megadott attribútumból lesz beállítva", "Internal Username" : "Belső felhasználónév", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Alapértelmezetten egy belső felhasználónév jön létre a UUID attribútumból. Gondoskodik róla, hogy a felhasználónév egyedi legyen és ne kelljen a karaktereket konvertálni. A belső felhasználónév csak a következő karakterekből állhat: [ a-zA-Z0-9_.@- ]. Más karakterek az ASCII megfelelőikre lesznek cserélve, vagy csak simán ki lesznek hagyva. Ütközés eseté egy szám lesz hozzáadva, vagy növelve. A belső felhasználónév a felhasználó belső azonosítására szolgál. Egyben a felhasználó saját mappájának neveként is szolgál. Része a távoli URL-eknek, például az összes DAV szolgáltatásnál. Ezzel a beállítással az alapértelmezett működés felülírható. Hagyd üresen az alapértelmezett működéshez. A változások csak újonnan leképezett (hozzáadott) LDAP felhasználóknál kerül alkalmazásra.", - "Internal Username Attribute:" : "A belső felhasználónév attribútuma:", - "Override UUID detection" : "Az UUID-felismerés felülbírálása", - "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." : "Az UUID attribútum alapértelmezetten felismerésre kerül. Az UUID attribútum segítségével az LDAP felhasználók és csoportok egyértelműen azonosíthatók. A belső felhasználónév is azonos lesz az UUID-vel, ha fentebb nincs másként definiálva. Ezt a beállítást felülbírálhatja és bármely attribútummal helyettesítheti. Ekkor azonban gondoskodnia kell arról, hogy a kiválasztott attribútum minden felhasználó és csoport esetén lekérdezhető legyen és egyedi értékkel bír. Ha a mezőt üresen hagyja, akkor az alapértelmezett attribútum lesz érvényes. Egy esetleges módosítás csak az újonnan hozzárendelt (ill. létrehozott) felhasználókra és csoportokra lesz érvényes.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Alapértelmezetten egy belső felhasználónév jön létre a UUID attribútumból. Gondoskodik róla, hogy a felhasználónév egyedi legyen és ne kelljen a karaktereket konvertálni. A belső felhasználónév csak a következő karakterekből állhat: [a-zA-Z0-9_.@-]. Más karakterek az ASCII megfelelőikre lesznek cserélve, vagy csak simán ki lesznek hagyva. Ütközés esetén egy szám lesz hozzáadva, vagy növelve. A belső felhasználónév a felhasználó belső azonosítására szolgál. Egyben a felhasználó saját mappájának neveként is szolgál. Ez része a távoli URL-eknek, például az összes *DAV szolgáltatásnál. Ezzel a beállítással az alapértelmezett működés felülírható. A változások csak újonnan hozzárendelt (hozzáadott) LDAP felhasználóknál kerül alkalmazásra. Hagyja üresen az alapértelmezett viselkedéshez.", + "Internal Username Attribute:" : "Belső felhasználónév attribútuma:", + "Override UUID detection" : "UUID-felismerés felülbírálása", + "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." : "Az UUID attribútum alapértelmezetten felismerésre kerül. Az UUID attribútum segítségével az LDAP felhasználók és csoportok egyértelműen azonosíthatók. A belső felhasználónév is azonos lesz az UUID-vel, ha fentebb nincs másként definiálva. Ezt a beállítást felülbírálhatja és bármely attribútummal helyettesítheti. Ekkor azonban gondoskodnia kell arról, hogy a kiválasztott attribútum minden felhasználó és csoport esetén lekérdezhető legyen, és egyedi értékkel bírjon. Ha a mezőt üresen hagyja, akkor az alapértelmezett attribútum lesz érvényes. Egy esetleges módosítás csak az újonnan hozzárendelt (hozzáadott) felhasználókra és csoportokra lesz érvényes.", "UUID Attribute for Users:" : "A felhasználók UUID attribútuma:", "UUID Attribute for Groups:" : "A csoportok UUID attribútuma:", - "Username-LDAP User Mapping" : "Felhasználó - LDAP felhasználó hozzárendelés", - "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "A felhasználónevek a metaadtok kezeléséhez és tárolásához vannak felhasználva. Annak érdekében, hogy teljes mértékben beazonosítható legyen egy felhasználó, minden LDAP felhasználó kapni fog egy belső felhasználónevet. Ez egy hozzárendelést igényel az eredeti felhasználónév és az LDAP fiók között. A létrejött felhasználónév hozzárendelődik az LDAP fiók UUID-hoz. Emellett a DN cachelve van az LDAP interakciók csönketése érdekében de nincs felhasználva azonosítás céljából. Ha a DN változik, ezeket a változásokat a rendszer észleli. A belső felhasználó név van mindenhol felhasználva a rendszeren belül. A hozzárendeléseket törlése adat töredékeket hagy maga után. A hozzárendelések ürítése nem beállítás érzékeny, ez minden LDAP beállításra hatással van! Soha ne ürítse éles rendszeren a hozzárendeléseket, csak kísérleti szakaszokban.", - "Clear Username-LDAP User Mapping" : "A felhasználó - LDAP felhasználó hozzárendelés törlése", - "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése" + "Username-LDAP User Mapping" : "Felhasználónév–LDAP felhasználó hozzárendelés", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "A felhasználónevek a metaadatok kezeléséhez és tárolásához vannak felhasználva. Annak érdekében, hogy teljes mértékben azonosítható legyen egy felhasználó, minden LDAP felhasználó kapni fog egy belső felhasználónevet. Ez egy hozzárendelést igényel az eredeti felhasználónév és az LDAP fiók között. A létrejött felhasználónév hozzárendelődik az LDAP fiók UUID értékéhez. Emellett a DN gyorsítótárazott, hogy csökkentse az LDAP interakciók számát, de nincs használva azonosítás céljából. Ha a DN megváltozik, a rendszer észleli ezeket a változásokat. A belső felhasználónév van mindenhol használva a rendszeren belül. A hozzárendelések törlése adattöredékeket hagy maga után. A hozzárendelések ürítése nem beállításfüggő, minden LDAP beállításra hatással van. Soha ne ürítse éles rendszeren a hozzárendeléseket, csak tesztelési vagy kísérleti szakaszban.", + "Clear Username-LDAP User Mapping" : "Felhasználónév–LDAP felhasználó hozzárendelés törlése", + "Clear Groupname-LDAP Group Mapping" : "Csoport–LDAP csoport hozzárendelés törlése", + "Invalid configuration. Please have a look at the logs for further details." : "Érvénytelen beállítások. További információkért nézze meg a naplófájlokat." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/hu_HU.js b/apps/user_ldap/l10n/hu_HU.js deleted file mode 100644 index 0b1327503ac..00000000000 --- a/apps/user_ldap/l10n/hu_HU.js +++ /dev/null @@ -1,135 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Nem sikerült törölni a hozzárendeléseket.", - "Failed to delete the server configuration" : "Nem sikerült törölni a szerver konfigurációját", - "The configuration is invalid: anonymous bind is not allowed." : "A konfiguráció érvénytelen: a névtelen hozzáférés (anonymous bind) nem engedélyezett.", - "The configuration is valid and the connection could be established!" : "A konfiguráció érvényes, és a kapcsolat létrehozható!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "A konfiguráció érvényes, de a kapcsolat nem hozható létre. Kérem ellenőrizze a szerver beállításait, és az elérési adatokat.", - "The configuration is invalid. Please have a look at the logs for further details." : "Érvénytelen konfiguráció. További információkért nézze meg a naplófájlokat!", - "No action specified" : "Nincs megadva parancs", - "No configuration specified" : "Nincs megadva konfiguráció", - "No data specified" : "Nincs adat megadva", - " Could not set configuration %s" : "A konfiguráció nem állítható be: %s", - "Action does not exist" : "A művelet nem létezik", - "The Base DN appears to be wrong" : "Úgy tűnik, a címtár gyökere (base DN) hibás", - "Testing configuration…" : "Beállítások ellenőrzése...", - "Configuration incorrect" : "Konfiguráió hibás", - "Configuration incomplete" : "Konfiguráció nincs befejezve", - "Configuration OK" : "Konfiguráció OK", - "Select groups" : "Csoportok kiválasztása", - "Select object classes" : "Objektumosztályok kiválasztása", - "Please check the credentials, they seem to be wrong." : "Kérlek ellenőrizd az azonosítókat, hibásnak tűnnek.", - "Please specify the port, it could not be auto-detected." : "Kérlek add meg a port számát, nem lehetett automatikusan detektálni.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "A címtár gyökerét (base DN) nem sikerült automatikusan felismerni, kérlek, ellenőrizd az azonosítókat, a kiszolgáló nevét és a portot.", - "Could not detect Base DN, please enter it manually." : "Nem sikerült felismerni a címtár gyökerét (base DN), kérlek, add meg kézzel.", - "{nthServer}. Server" : "{nthServer}. Szerver", - "No object found in the given Base DN. Please revise." : "Nem találhatók objektumok a megadott címtár gyökérben (base DN). Kérlek, ellenőrizd.", - "More than 1,000 directory entries available." : "Több mint 1000 címtár bejegyzés érhető el.", - " entries available within the provided Base DN" : "a megadott címtár gyökér alatt elérhető bejegyzések", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hiba törént. Kérlek, ellenőrizd a címtár gyökerét (base DN), a kapcsolat beállításait és az azonosítókat.", - "Do you really want to delete the current Server Configuration?" : "Tényleg törölni szeretné a szerver beállításait?", - "Confirm Deletion" : "A törlés megerősítése", - "Mappings cleared successfully!" : "A hozzárendelések sikeresen törölve.", - "Error while clearing the mappings." : "Hiba a leképzések törlése közben.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "A névtelen hozzáférés (anonymous bind) nem engedélyezett. Kérlek, add meg a felhasználó címtár-azonosítóját (DN) és jelszavát.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "A mentés sikertelen. Kérlek győződj meg róla, hogy az adatbázis működik. Töltsd újra a folytatás előtt.", - "Mode switch" : "Üzemmód váltás", - "Select attributes" : "Attribútumok kiválasztása", - "User found and settings verified." : "Felhasználó megtalálva, beállítások ellenőrizve.", - "An unspecified error occurred. Please check the settings and the log." : "Meghatározatlan hiba történt. Kérlek ellenőrizd a beállításokat és a naplót.", - "Password change rejected. Hint: " : "Jelszó módosítás elutasítva. Tipp:", - "LDAP / AD integration" : "LDAP / AD integráció", - "_%s group found_::_%s groups found_" : ["%s csoport van","%s csoport van"], - "_%s user found_::_%s users found_" : ["%s felhasználó van","%s felhasználó van"], - "Could not find the desired feature" : "A kívánt funkció nem található", - "Invalid Host" : "Érvénytelen gépnév", - "Test Configuration" : "A beállítások tesztelése", - "Help" : "Súgó", - "Groups meeting these criteria are available in %s:" : "A %s szolgáltatás azon csoportok létezését veszi figyelembe, amik a következő feltételeknek felelnek meg:", - "Only these object classes:" : "Csak ezek az objektumosztályok:", - "Only from these groups:" : "Csak ezekből a csoportokból:", - "Search groups" : "Csoport keresés", - "Available groups" : "Elérhető csoportok", - "Selected groups" : "Kiválasztott csoportok", - "Edit LDAP Query" : "LDAP lekérdezés szerkesztés", - "LDAP Filter:" : "LDAP szűrő:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP csoportok lesznek jogosultak %s elérésére.", - "LDAP / AD Username:" : "LDAP / AD felhasználónév:", - "LDAP / AD Email Address:" : "LDAP / AD e-mail cím:", - "Other Attributes:" : "Más attribútumok:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Ez a szűrő érvényes a bejelentkezés megkísérlésekor. Ekkor az %%uid változó helyére a bejelentkezési név kerül. Például: \"uid=%%uid\"", - "Verify settings" : "Beállítások ellenőrzése", - "1. Server" : "1. Szerver", - "%s. Server:" : "%s. szerver", - "Delete the current configuration" : "Aktuális konfiguráció törlése", - "Host" : "Kiszolgáló", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "A protokoll előtag elhagyható, kivéve, ha SSL-t kíván használni. Ebben az esetben kezdje így: ldaps://", - "Port" : "Port", - "Detect Port" : "Port detektálás", - "User DN" : "A kapcsolódó felhasználó DN-je", - "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." : "Annak a felhasználónak a DN-je, akinek a nevében bejelentkezve kapcsolódunk a kiszolgálóhoz, pl. uid=agent,dc=example,dc=com. Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!", - "Password" : "Jelszó", - "For anonymous access, leave DN and Password empty." : "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!", - "One Base DN per line" : "Soronként egy DN-gyökér", - "You can specify Base DN for users and groups in the Advanced tab" : "A Haladó fülre kattintva külön DN-gyökér állítható be a felhasználók és a csoportok számára", - "Manually enter LDAP filters (recommended for large directories)" : "LDAP szűrők kézi beállitása (ajánlott a nagy könyvtáraknál)", - "The filter specifies which LDAP users shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP felhasználók lesznek jogosultak %s elérésére.", - "Saving" : "Mentés", - "Back" : "Vissza", - "Continue" : "Folytatás", - "LDAP" : "LDAP", - "Server" : "Szerver", - "Users" : "Felhasználók", - "Groups" : "Csoportok", - "Expert" : "Profi", - "Advanced" : "Haladó", - "<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>Figyelem:</b> a user_ldap és user_webdavauth alkalmazások nem kompatibilisek. Együttes használatuk váratlan eredményekhez vezethet. Kérje meg a rendszergazdát, hogy a kettő közül kapcsolja ki az egyiket.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse!", - "Connection Settings" : "Kapcsolati beállítások", - "Configuration Active" : "A beállítás aktív", - "When unchecked, this configuration will be skipped." : "Ha nincs kipipálva, ez a beállítás kihagyódik.", - "Backup (Replica) Host" : "Biztonsági (replika) kiszolgáló", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Adjon meg egy opcionális biztonsági kiszolgálót. Ez a fő LDAP/AD szerver replikája kell legyen.", - "Backup (Replica) Port" : "Biztonsági kiszolgáló (replika) portszáma", - "Disable Main Server" : "A fő szerver kihagyása", - "Only connect to the replica server." : "Csak a másodlagos (másolati) szerverhez kapcsolódjunk.", - "Turn off SSL certificate validation." : "Ne ellenőrizzük az SSL-tanúsítvány érvényességét", - "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." : "Használata nem javasolt (kivéve tesztelési céllal). Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-szerver SSL tanúsítványát a(z) %s szerverre!", - "Cache Time-To-Live" : "A gyorsítótár tárolási időtartama", - "in seconds. A change empties the cache." : "másodpercen belül. A változtatás törli a gyorsítótár tartalmát.", - "Directory Settings" : "Címtár beállítások", - "User Display Name Field" : "A felhasználónév mezője", - "The LDAP attribute to use to generate the user's display name." : "Ebből az LDAP attribútumból képződik a felhasználó megjelenítendő neve.", - "Base User Tree" : "A felhasználói fa gyökere", - "One User Base DN per line" : "Soronként egy felhasználói fa gyökerét adhatjuk meg", - "User Search Attributes" : "A felhasználók lekérdezett attribútumai", - "Optional; one attribute per line" : "Nem kötelező megadni, soronként egy attribútum", - "Group Display Name Field" : "A csoport nevének mezője", - "The LDAP attribute to use to generate the groups's display name." : "Ebből az LDAP attribútumból képződik a csoport megjelenítendő neve.", - "Base Group Tree" : "A csoportfa gyökere", - "One Group Base DN per line" : "Soronként egy csoportfa gyökerét adhatjuk meg", - "Group Search Attributes" : "A csoportok lekérdezett attribútumai", - "Group-Member association" : "A csoporttagság attribútuma", - "Nested Groups" : "Egymásba ágyazott csoportok", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Amikor be van kapcsolva, akkor azokat a csoportokat is kezelni tudjuk, melyekben a személyek mellett csoportok is vannak. (Csak akkor működik, ha a csoportok \"member\" attribútuma DN-eket tartalmaz.)", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "A lapméret megadásával korlátozható az egy fordulóban kapott találatok száma, akkor is, ha az LDAP-keresés nagyon sok találatot ad, ha ezt az LDAP-kiszolgáló támogatja. (Ha 0-ra állítjuk, akkor ezáltal letiltjuk ezt a lapozó funkciót.)", - "Special Attributes" : "Különleges attribútumok", - "Quota Field" : "Kvóta mező", - "Quota Default" : "Alapértelmezett kvóta", - "in bytes" : "bájtban", - "Email Field" : "E-mail mező", - "User Home Folder Naming Rule" : "Felhasználói Home mappa elnevezési szabály", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen, ha a felhasználónevet kívánja használni. Ellenkező esetben adjon meg egy LDAP/AD attribútumot!", - "Internal Username" : "Belső felhasználónév", - "Internal Username Attribute:" : "A belső felhasználónév attribútuma:", - "Override UUID detection" : "Az UUID-felismerés felülbírálása", - "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." : "Az UUID attribútum alapértelmezetten felismerésre kerül. Az UUID attribútum segítségével az LDAP felhasználók és csoportok egyértelműen azonosíthatók. A belső felhasználónév is azonos lesz az UUID-vel, ha fentebb nincs másként definiálva. Ezt a beállítást felülbírálhatja és bármely attribútummal helyettesítheti. Ekkor azonban gondoskodnia kell arról, hogy a kiválasztott attribútum minden felhasználó és csoport esetén lekérdezhető legyen és egyedi értékkel bír. Ha a mezőt üresen hagyja, akkor az alapértelmezett attribútum lesz érvényes. Egy esetleges módosítás csak az újonnan hozzárendelt (ill. létrehozott) felhasználókra és csoportokra lesz érvényes.", - "UUID Attribute for Users:" : "A felhasználók UUID attribútuma:", - "UUID Attribute for Groups:" : "A csoportok UUID attribútuma:", - "Username-LDAP User Mapping" : "Felhasználó - LDAP felhasználó hozzárendelés", - "Clear Username-LDAP User Mapping" : "A felhasználó - LDAP felhasználó hozzárendelés törlése", - "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Beállítások ellenőrizve, de egy felhasználó található. Csak az első léphet be automatikusan. Próbálj egy pontosabb szűrőt." -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/hu_HU.json b/apps/user_ldap/l10n/hu_HU.json deleted file mode 100644 index a76c333add7..00000000000 --- a/apps/user_ldap/l10n/hu_HU.json +++ /dev/null @@ -1,133 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Nem sikerült törölni a hozzárendeléseket.", - "Failed to delete the server configuration" : "Nem sikerült törölni a szerver konfigurációját", - "The configuration is invalid: anonymous bind is not allowed." : "A konfiguráció érvénytelen: a névtelen hozzáférés (anonymous bind) nem engedélyezett.", - "The configuration is valid and the connection could be established!" : "A konfiguráció érvényes, és a kapcsolat létrehozható!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "A konfiguráció érvényes, de a kapcsolat nem hozható létre. Kérem ellenőrizze a szerver beállításait, és az elérési adatokat.", - "The configuration is invalid. Please have a look at the logs for further details." : "Érvénytelen konfiguráció. További információkért nézze meg a naplófájlokat!", - "No action specified" : "Nincs megadva parancs", - "No configuration specified" : "Nincs megadva konfiguráció", - "No data specified" : "Nincs adat megadva", - " Could not set configuration %s" : "A konfiguráció nem állítható be: %s", - "Action does not exist" : "A művelet nem létezik", - "The Base DN appears to be wrong" : "Úgy tűnik, a címtár gyökere (base DN) hibás", - "Testing configuration…" : "Beállítások ellenőrzése...", - "Configuration incorrect" : "Konfiguráió hibás", - "Configuration incomplete" : "Konfiguráció nincs befejezve", - "Configuration OK" : "Konfiguráció OK", - "Select groups" : "Csoportok kiválasztása", - "Select object classes" : "Objektumosztályok kiválasztása", - "Please check the credentials, they seem to be wrong." : "Kérlek ellenőrizd az azonosítókat, hibásnak tűnnek.", - "Please specify the port, it could not be auto-detected." : "Kérlek add meg a port számát, nem lehetett automatikusan detektálni.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "A címtár gyökerét (base DN) nem sikerült automatikusan felismerni, kérlek, ellenőrizd az azonosítókat, a kiszolgáló nevét és a portot.", - "Could not detect Base DN, please enter it manually." : "Nem sikerült felismerni a címtár gyökerét (base DN), kérlek, add meg kézzel.", - "{nthServer}. Server" : "{nthServer}. Szerver", - "No object found in the given Base DN. Please revise." : "Nem találhatók objektumok a megadott címtár gyökérben (base DN). Kérlek, ellenőrizd.", - "More than 1,000 directory entries available." : "Több mint 1000 címtár bejegyzés érhető el.", - " entries available within the provided Base DN" : "a megadott címtár gyökér alatt elérhető bejegyzések", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Hiba törént. Kérlek, ellenőrizd a címtár gyökerét (base DN), a kapcsolat beállításait és az azonosítókat.", - "Do you really want to delete the current Server Configuration?" : "Tényleg törölni szeretné a szerver beállításait?", - "Confirm Deletion" : "A törlés megerősítése", - "Mappings cleared successfully!" : "A hozzárendelések sikeresen törölve.", - "Error while clearing the mappings." : "Hiba a leképzések törlése közben.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "A névtelen hozzáférés (anonymous bind) nem engedélyezett. Kérlek, add meg a felhasználó címtár-azonosítóját (DN) és jelszavát.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "A mentés sikertelen. Kérlek győződj meg róla, hogy az adatbázis működik. Töltsd újra a folytatás előtt.", - "Mode switch" : "Üzemmód váltás", - "Select attributes" : "Attribútumok kiválasztása", - "User found and settings verified." : "Felhasználó megtalálva, beállítások ellenőrizve.", - "An unspecified error occurred. Please check the settings and the log." : "Meghatározatlan hiba történt. Kérlek ellenőrizd a beállításokat és a naplót.", - "Password change rejected. Hint: " : "Jelszó módosítás elutasítva. Tipp:", - "LDAP / AD integration" : "LDAP / AD integráció", - "_%s group found_::_%s groups found_" : ["%s csoport van","%s csoport van"], - "_%s user found_::_%s users found_" : ["%s felhasználó van","%s felhasználó van"], - "Could not find the desired feature" : "A kívánt funkció nem található", - "Invalid Host" : "Érvénytelen gépnév", - "Test Configuration" : "A beállítások tesztelése", - "Help" : "Súgó", - "Groups meeting these criteria are available in %s:" : "A %s szolgáltatás azon csoportok létezését veszi figyelembe, amik a következő feltételeknek felelnek meg:", - "Only these object classes:" : "Csak ezek az objektumosztályok:", - "Only from these groups:" : "Csak ezekből a csoportokból:", - "Search groups" : "Csoport keresés", - "Available groups" : "Elérhető csoportok", - "Selected groups" : "Kiválasztott csoportok", - "Edit LDAP Query" : "LDAP lekérdezés szerkesztés", - "LDAP Filter:" : "LDAP szűrő:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP csoportok lesznek jogosultak %s elérésére.", - "LDAP / AD Username:" : "LDAP / AD felhasználónév:", - "LDAP / AD Email Address:" : "LDAP / AD e-mail cím:", - "Other Attributes:" : "Más attribútumok:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Ez a szűrő érvényes a bejelentkezés megkísérlésekor. Ekkor az %%uid változó helyére a bejelentkezési név kerül. Például: \"uid=%%uid\"", - "Verify settings" : "Beállítások ellenőrzése", - "1. Server" : "1. Szerver", - "%s. Server:" : "%s. szerver", - "Delete the current configuration" : "Aktuális konfiguráció törlése", - "Host" : "Kiszolgáló", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "A protokoll előtag elhagyható, kivéve, ha SSL-t kíván használni. Ebben az esetben kezdje így: ldaps://", - "Port" : "Port", - "Detect Port" : "Port detektálás", - "User DN" : "A kapcsolódó felhasználó DN-je", - "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." : "Annak a felhasználónak a DN-je, akinek a nevében bejelentkezve kapcsolódunk a kiszolgálóhoz, pl. uid=agent,dc=example,dc=com. Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!", - "Password" : "Jelszó", - "For anonymous access, leave DN and Password empty." : "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!", - "One Base DN per line" : "Soronként egy DN-gyökér", - "You can specify Base DN for users and groups in the Advanced tab" : "A Haladó fülre kattintva külön DN-gyökér állítható be a felhasználók és a csoportok számára", - "Manually enter LDAP filters (recommended for large directories)" : "LDAP szűrők kézi beállitása (ajánlott a nagy könyvtáraknál)", - "The filter specifies which LDAP users shall have access to the %s instance." : "A szűrő meghatározza, hogy mely LDAP felhasználók lesznek jogosultak %s elérésére.", - "Saving" : "Mentés", - "Back" : "Vissza", - "Continue" : "Folytatás", - "LDAP" : "LDAP", - "Server" : "Szerver", - "Users" : "Felhasználók", - "Groups" : "Csoportok", - "Expert" : "Profi", - "Advanced" : "Haladó", - "<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>Figyelem:</b> a user_ldap és user_webdavauth alkalmazások nem kompatibilisek. Együttes használatuk váratlan eredményekhez vezethet. Kérje meg a rendszergazdát, hogy a kettő közül kapcsolja ki az egyiket.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse!", - "Connection Settings" : "Kapcsolati beállítások", - "Configuration Active" : "A beállítás aktív", - "When unchecked, this configuration will be skipped." : "Ha nincs kipipálva, ez a beállítás kihagyódik.", - "Backup (Replica) Host" : "Biztonsági (replika) kiszolgáló", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Adjon meg egy opcionális biztonsági kiszolgálót. Ez a fő LDAP/AD szerver replikája kell legyen.", - "Backup (Replica) Port" : "Biztonsági kiszolgáló (replika) portszáma", - "Disable Main Server" : "A fő szerver kihagyása", - "Only connect to the replica server." : "Csak a másodlagos (másolati) szerverhez kapcsolódjunk.", - "Turn off SSL certificate validation." : "Ne ellenőrizzük az SSL-tanúsítvány érvényességét", - "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." : "Használata nem javasolt (kivéve tesztelési céllal). Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-szerver SSL tanúsítványát a(z) %s szerverre!", - "Cache Time-To-Live" : "A gyorsítótár tárolási időtartama", - "in seconds. A change empties the cache." : "másodpercen belül. A változtatás törli a gyorsítótár tartalmát.", - "Directory Settings" : "Címtár beállítások", - "User Display Name Field" : "A felhasználónév mezője", - "The LDAP attribute to use to generate the user's display name." : "Ebből az LDAP attribútumból képződik a felhasználó megjelenítendő neve.", - "Base User Tree" : "A felhasználói fa gyökere", - "One User Base DN per line" : "Soronként egy felhasználói fa gyökerét adhatjuk meg", - "User Search Attributes" : "A felhasználók lekérdezett attribútumai", - "Optional; one attribute per line" : "Nem kötelező megadni, soronként egy attribútum", - "Group Display Name Field" : "A csoport nevének mezője", - "The LDAP attribute to use to generate the groups's display name." : "Ebből az LDAP attribútumból képződik a csoport megjelenítendő neve.", - "Base Group Tree" : "A csoportfa gyökere", - "One Group Base DN per line" : "Soronként egy csoportfa gyökerét adhatjuk meg", - "Group Search Attributes" : "A csoportok lekérdezett attribútumai", - "Group-Member association" : "A csoporttagság attribútuma", - "Nested Groups" : "Egymásba ágyazott csoportok", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Amikor be van kapcsolva, akkor azokat a csoportokat is kezelni tudjuk, melyekben a személyek mellett csoportok is vannak. (Csak akkor működik, ha a csoportok \"member\" attribútuma DN-eket tartalmaz.)", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "A lapméret megadásával korlátozható az egy fordulóban kapott találatok száma, akkor is, ha az LDAP-keresés nagyon sok találatot ad, ha ezt az LDAP-kiszolgáló támogatja. (Ha 0-ra állítjuk, akkor ezáltal letiltjuk ezt a lapozó funkciót.)", - "Special Attributes" : "Különleges attribútumok", - "Quota Field" : "Kvóta mező", - "Quota Default" : "Alapértelmezett kvóta", - "in bytes" : "bájtban", - "Email Field" : "E-mail mező", - "User Home Folder Naming Rule" : "Felhasználói Home mappa elnevezési szabály", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen, ha a felhasználónevet kívánja használni. Ellenkező esetben adjon meg egy LDAP/AD attribútumot!", - "Internal Username" : "Belső felhasználónév", - "Internal Username Attribute:" : "A belső felhasználónév attribútuma:", - "Override UUID detection" : "Az UUID-felismerés felülbírálása", - "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." : "Az UUID attribútum alapértelmezetten felismerésre kerül. Az UUID attribútum segítségével az LDAP felhasználók és csoportok egyértelműen azonosíthatók. A belső felhasználónév is azonos lesz az UUID-vel, ha fentebb nincs másként definiálva. Ezt a beállítást felülbírálhatja és bármely attribútummal helyettesítheti. Ekkor azonban gondoskodnia kell arról, hogy a kiválasztott attribútum minden felhasználó és csoport esetén lekérdezhető legyen és egyedi értékkel bír. Ha a mezőt üresen hagyja, akkor az alapértelmezett attribútum lesz érvényes. Egy esetleges módosítás csak az újonnan hozzárendelt (ill. létrehozott) felhasználókra és csoportokra lesz érvényes.", - "UUID Attribute for Users:" : "A felhasználók UUID attribútuma:", - "UUID Attribute for Groups:" : "A csoportok UUID attribútuma:", - "Username-LDAP User Mapping" : "Felhasználó - LDAP felhasználó hozzárendelés", - "Clear Username-LDAP User Mapping" : "A felhasználó - LDAP felhasználó hozzárendelés törlése", - "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Beállítások ellenőrizve, de egy felhasználó található. Csak az első léphet be automatikusan. Próbálj egy pontosabb szűrőt." -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/hy.js b/apps/user_ldap/l10n/hy.js deleted file mode 100644 index 6e3fc1a22c8..00000000000 --- a/apps/user_ldap/l10n/hy.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Groups" : "Խմբեր", - "Help" : "Օգնություն", - "Password" : "Գաղտնաբառ", - "Continue" : "Շարունակել" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/hy.json b/apps/user_ldap/l10n/hy.json deleted file mode 100644 index cff0593a7be..00000000000 --- a/apps/user_ldap/l10n/hy.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "Groups" : "Խմբեր", - "Help" : "Օգնություն", - "Password" : "Գաղտնաբառ", - "Continue" : "Շարունակել" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ia.js b/apps/user_ldap/l10n/ia.js deleted file mode 100644 index c129620ee87..00000000000 --- a/apps/user_ldap/l10n/ia.js +++ /dev/null @@ -1,12 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "Usatores", - "Groups" : "Gruppos", - "Help" : "Adjuta", - "Password" : "Contrasigno", - "Back" : "Retro", - "Continue" : "Continuar", - "Advanced" : "Avantiate" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ia.json b/apps/user_ldap/l10n/ia.json deleted file mode 100644 index 86b535fd079..00000000000 --- a/apps/user_ldap/l10n/ia.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "translations": { - "Users" : "Usatores", - "Groups" : "Gruppos", - "Help" : "Adjuta", - "Password" : "Contrasigno", - "Back" : "Retro", - "Continue" : "Continuar", - "Advanced" : "Avantiate" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js index 03db19e827d..e9b5054cd1f 100644 --- a/apps/user_ldap/l10n/id.js +++ b/apps/user_ldap/l10n/id.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Konfigurasi tidak valid: Pengikatan anonim tidak diizinkan.", "Valid configuration, connection established!" : "Konfigurasi valid, terhubung!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfigurasi valid, tetapi pengikatan gagal. Silakan periksa pengaturan peladen dan kredensial.", - "Invalid configuration. Please have a look at the logs for further details." : "Konfigurasi tidak valid. Silakan log untuk detil lebih lanjut.", "No action specified" : "Tidak ada tindakan yang ditetapkan", "No configuration specified" : "Tidak ada konfigurasi yang ditetapkan", "No data specified" : "Tidak ada data yang ditetapkan", - " Could not set configuration %s" : "Tidak dapat menyetel konfigurasi %s", "Action does not exist" : "Tidak ada tindakan", "Renewing …" : "Memperbarui ...", "Very weak password" : "Kata sandi sangat lemah", @@ -44,30 +42,23 @@ OC.L10N.register( "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Beralih modus akan mengaktifkan kueri LDAP secara otomatis. Hal ini memerlukan beberapa saat tergantung pada ukuran LDAP Anda. Apakah Anda tetap ingin beralih modus?", "Mode switch" : "Beralih modus", "Select attributes" : "Pilih atribut", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Pengguna tidak ditemukan. Silahkan periksa atribut log masuk dan nama pengguna. Filter yang diterapkan (untuk validasi pada antarmuka CLI):<br/>", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Pengguna tidak ditemukan. Silakan periksa atribut log masuk dan nama pengguna. Filter yang diterapkan (untuk validasi pada antarmuka CLI):<br/>", "User found and settings verified." : "Pengguna ditemukan dan pengaturan terverifikasi.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Pertimbangkan untuk mempersempit pencarian Anda, karena meliputi banyak pengguna, hanya yang pertama yang dapat log masuk.", "An unspecified error occurred. Please check log and settings." : "Suatu galat yang belum diketahui muncul. Silakan periksa log dan pengaturan.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Penyaring pencarian tidak sah, kemungkinan karena masalah sintaks seperti jumlah kurung buka dan tutup tidak sama. Mohon diperiksa.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Terjadi kesalahan sambungan ke LDAP / AD, mohon periksa host, port dan kredensial.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Placeholder %uid tidak ditemukan. Ini akan digantikan dengan nama pengguna saat melakukan kueri LDAP / AD.", "Please provide a login name to test against" : "Mohon berikan nama login untuk mengujinya kembali", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kotak grup telah dinonaktifkan, karena server LDAP / AD tidak mendukung keanggotaan.", - "Password change rejected. Hint: " : "Perubahan kata sandi ditolak. Petunjuk:", - "Please login with the new password" : "Silahkan log masuk dengan kata sandi baru", + "Please login with the new password" : "Silakan log masuk dengan kata sandi baru", "LDAP User backend" : "Backend pengguna", "Your password will expire tomorrow." : "Kata sandi Anda akan kedaluwarsa besok.", "Your password will expire today." : "Kata sandi Anda akan kedaluwarsa hari ini.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Kata sandi Anda akan kedaluwarsa dalam %n hari."], - "LDAP / AD integration" : "Integrasi LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s grup ditemukan"], - "_%s user found_::_%s users found_" : ["%s pengguna ditemukan"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Atribut nama yang akan ditampilkan tidak terdeteksi. Silahkan tentukan Anda sendiri pada pengaturan lanjutan LDAP.", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Atribut nama yang akan ditampilkan tidak terdeteksi. Silakan tentukan Anda sendiri pada pengaturan lanjutan LDAP.", "Could not find the desired feature" : "Tidak dapat menemukan fitur yang diinginkan", "Invalid Host" : "Host tidak sah", "LDAP user and group backend" : "Backend pengguna dan grup LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aplikasi ini memungkinkan administrator menghubungkan Nextcloud dengan direktori pengguna berbasis LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aplikasi ini mengizinkan administrator untuk menghubungkan Nexcloud dengan direktori pengguna berbasis LDAP, untuk otentikasi dan penyediaan atribut pengguna dan grup. Admin dapat melakukan konfigurasi untuk menghubungkan satu atau lebih LDAP atau Active Directory melalui antarmuka LDAP. Atribut seperti diantaranya, kuota, surel, gambar profil, keanggotaan grup, dan lainnya dapat ditarik ke Nextcloud dari suatu layanan direktori dengan kueri dan filter yang sesuai.\n\nPengguna akan terhubung ke Nextcloud menggunakan kredensial LDAP atau AD, dan mendapatkan akses berdasarkan permintaan autentikasi yang ditangani oleh peladen LDAP atau AD. Nextcloud tidak menyimpan kata sandi LDAP atau AD, alih-alih kredensial digunakan untuk mengautentikasi pengguna, dan berikutnya Nextcloud akan menggunakan suatu sesi bagi ID pengguna. Informasi lebih lanjut dapat dilihat pada dokumentasi LDAP User and Group Backend.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aplikasi ini mengizinkan administrator untuk menghubungkan Nexcloud dengan direktori pengguna berbasis LDAP, untuk otentikasi dan penyediaan atribut pengguna dan grup. Admin dapat melakukan konfigurasi untuk menghubungkan satu atau lebih LDAP atau Active Directory melalui antarmuka LDAP. Atribut seperti diantaranya, kuota, email, gambar profil, keanggotaan grup, dan lainnya dapat ditarik ke Nextcloud dari suatu layanan direktori dengan kueri dan filter yang sesuai.\n\nPengguna akan terhubung ke Nextcloud menggunakan kredensial LDAP atau AD, dan mendapatkan akses berdasarkan permintaan autentikasi yang ditangani oleh peladen LDAP atau AD. Nextcloud tidak menyimpan kata sandi LDAP atau AD, alih-alih kredensial digunakan untuk mengautentikasi pengguna, dan berikutnya Nextcloud akan menggunakan suatu sesi bagi ID pengguna. Informasi lebih lanjut dapat dilihat pada dokumentasi LDAP User and Group Backend.", "Test Configuration" : "Uji Konfigurasi", "Help" : "Bantuan", "Groups meeting these criteria are available in %s:" : "Grup yang memenuhi kriteria ini tersedia di %s:", @@ -81,10 +72,7 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Penyaring menentukan grup LDAP mana yang memiliki akses ke %s.", "Verify settings and count the groups" : "Verifikasi pengaturan, dan hitung jumlah grup", "When logging in, %s will find the user based on the following attributes:" : "Pada saat login, %s akan menemukan pengguna berdasarkan atribut berikut:", - "LDAP / AD Username:" : "Nama pengguna LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Mengizinkan log masuk menggunakan nama pengguna LDAP / AD, hal ini akan mendeteksi \"uid\" atau \"sAMAccountName\".", - "LDAP / AD Email Address:" : "Alamat Email LDAP / AD:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Mengizinkan juga log masuk menggunakan atribut surel \"mail\" dan \"mailPrimaryAddress\".", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Mengizinkan juga log masuk menggunakan atribut email \"mail\" dan \"mailPrimaryAddress\".", "Other Attributes:" : "Atribut Lain:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definisikan penerapan filter saat percobaan log masuk. \"%%uid\" akan menggantikan nama pengguna saat aksi dilakukan. Contoh: \"uid=%%uid\"", "Test Loginname" : "Test Loginname", @@ -115,7 +103,7 @@ OC.L10N.register( "Saving" : "Menyimpan", "Back" : "Kembali", "Continue" : "Lanjutkan", - "Please renew your password." : "Silahkan perbarui kata sandi Anda.", + "Please renew your password." : "Silakan perbarui kata sandi Anda.", "An internal error occurred." : "Terjadi kesalahan internal.", "Please try again or contact your administrator." : "Mohon coba lagi atau hubungi administrator Anda.", "Current password" : "Kata sandi saat ini", @@ -174,12 +162,11 @@ OC.L10N.register( "Quota Default" : "Kuota Baku", "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Tetapkan kuota bawaan bagi pengguna LDAP, yang nilai kuotanya tidak ditentukan pada isian kuota.", "Email Field" : "Kolom Email", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Tetapkan surel pengguna menggunakan atribut LDAP. Biarkan kosong untuk menggunakan perilaku bawaan.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Tetapkan email pengguna menggunakan atribut LDAP. Biarkan kosong untuk menggunakan perilaku bawaan.", "User Home Folder Naming Rule" : "Aturan Penamaan Folder Home Pengguna", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Biarkan nama pengguna kosong (bawaan). Atau, tentukan atribut LDAP/AD.", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home pada konfigurasi penyimpanan eksternal akan diubah dengan nilai pada atribut yang ditentukan", "Internal Username" : "Nama Pengguna Internal", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Secara bawaan nama pengguna internal akan dibuat dari atribut UUID. Hal ini memastikan bahwa nama yang unik dan karakter tidak perlu dikonversi. Nama pengguna internal yang memiliki batasan bahwa hanya karakter ini diperbolehkan: [ a-zA-Z0-9_.@- ]. Karakter lain yang diganti dengan korespondensi ASCII mereka atau hanya dihilangkan. Pada tabrakan nomor akan ditambahkan / meningkat. Nama pengguna internal digunakan untuk mengidentifikasi pengguna internal. Itu juga merupakan nama bawaan untuk folder pengguna rumah. Ini juga merupakan bagian dari URL remote, misalnya instansi untuk semua layanan *DAV. Dengan pengaturan ini, perilaku bawaan dapat diganti. Biarkan kosong untuk perilaku bawaan. Perubahan hanya akan berpengaruh pada baru dipetakan (ditambahkan) pengguna LDAP.", "Internal Username Attribute:" : "Atribut Nama Pengguna Internal:", "Override UUID detection" : "Timpa deteksi 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." : "Secara default, atribut UUID akan secara otomatis terdeteksi. Atribut UUID ini digunakan untuk mengidentifikasi pengguna dan grup LDAP yang diragukan. Nama pengguna internal juga akan dibuat berdasarkan UUID jika belum ditetapkan di atas. Anda dapat mengganti pengaturan dan meluluskan atribut pilihan Anda. Anda harus memastikan bahwa atribut pilihan Anda dapat diambil untuk pengguna dan grup, serta haruslah unik. Biarkan kosong untuk perilaku default. Perubahan akan berpengaruh hanya pada pengguna dan grup LDAP yang baru dipetakan (ditambahkan).", @@ -188,6 +175,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Pemetaan Pengguna LDAP-Nama pengguna", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Nama pengguna digunakan untuk menyimpan dan menetapkan (meta) data. Digunakan untuk mengidentifikasi dan mengenali pengguna secara tepat, setiap pengguna LDAP akan memiliki nama pengguna internal. Hal ini memerlukan sebuah pemetaan dari nama pengguna ke pengguna LDAP. Nama pengguna yang dibuat akan dipetakan pada UUID pengguna LDAP. Selain itu, DN akan di cache untuk mengurangi interaksi LDAP, tetapi tidak digunakan untuk identifikasi. Jika DN berubah, perubahan akan ditemukan. Nama pengguna internal digunakan secara menyeluruh. Membersihkan pemetaan akan mempengaruhi semua konfigurasi LDAP! JANGAN PERNAH MENGHAPUS PEMETAAN PADA LINGKUNGAN PRODUKSI, hanya gunakan selama tahap pengujian dan percobaan.", "Clear Username-LDAP User Mapping" : "Bersihkan Pemetaan Pengguna LDAP-Nama pengguna", - "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup" + "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup", + "Invalid configuration. Please have a look at the logs for further details." : "Konfigurasi tidak valid. Silakan log untuk detil lebih lanjut." }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json index fa22e2570b1..fc608eb8182 100644 --- a/apps/user_ldap/l10n/id.json +++ b/apps/user_ldap/l10n/id.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Konfigurasi tidak valid: Pengikatan anonim tidak diizinkan.", "Valid configuration, connection established!" : "Konfigurasi valid, terhubung!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfigurasi valid, tetapi pengikatan gagal. Silakan periksa pengaturan peladen dan kredensial.", - "Invalid configuration. Please have a look at the logs for further details." : "Konfigurasi tidak valid. Silakan log untuk detil lebih lanjut.", "No action specified" : "Tidak ada tindakan yang ditetapkan", "No configuration specified" : "Tidak ada konfigurasi yang ditetapkan", "No data specified" : "Tidak ada data yang ditetapkan", - " Could not set configuration %s" : "Tidak dapat menyetel konfigurasi %s", "Action does not exist" : "Tidak ada tindakan", "Renewing …" : "Memperbarui ...", "Very weak password" : "Kata sandi sangat lemah", @@ -42,30 +40,23 @@ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Beralih modus akan mengaktifkan kueri LDAP secara otomatis. Hal ini memerlukan beberapa saat tergantung pada ukuran LDAP Anda. Apakah Anda tetap ingin beralih modus?", "Mode switch" : "Beralih modus", "Select attributes" : "Pilih atribut", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Pengguna tidak ditemukan. Silahkan periksa atribut log masuk dan nama pengguna. Filter yang diterapkan (untuk validasi pada antarmuka CLI):<br/>", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Pengguna tidak ditemukan. Silakan periksa atribut log masuk dan nama pengguna. Filter yang diterapkan (untuk validasi pada antarmuka CLI):<br/>", "User found and settings verified." : "Pengguna ditemukan dan pengaturan terverifikasi.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Pertimbangkan untuk mempersempit pencarian Anda, karena meliputi banyak pengguna, hanya yang pertama yang dapat log masuk.", "An unspecified error occurred. Please check log and settings." : "Suatu galat yang belum diketahui muncul. Silakan periksa log dan pengaturan.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Penyaring pencarian tidak sah, kemungkinan karena masalah sintaks seperti jumlah kurung buka dan tutup tidak sama. Mohon diperiksa.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Terjadi kesalahan sambungan ke LDAP / AD, mohon periksa host, port dan kredensial.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Placeholder %uid tidak ditemukan. Ini akan digantikan dengan nama pengguna saat melakukan kueri LDAP / AD.", "Please provide a login name to test against" : "Mohon berikan nama login untuk mengujinya kembali", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kotak grup telah dinonaktifkan, karena server LDAP / AD tidak mendukung keanggotaan.", - "Password change rejected. Hint: " : "Perubahan kata sandi ditolak. Petunjuk:", - "Please login with the new password" : "Silahkan log masuk dengan kata sandi baru", + "Please login with the new password" : "Silakan log masuk dengan kata sandi baru", "LDAP User backend" : "Backend pengguna", "Your password will expire tomorrow." : "Kata sandi Anda akan kedaluwarsa besok.", "Your password will expire today." : "Kata sandi Anda akan kedaluwarsa hari ini.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Kata sandi Anda akan kedaluwarsa dalam %n hari."], - "LDAP / AD integration" : "Integrasi LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s grup ditemukan"], - "_%s user found_::_%s users found_" : ["%s pengguna ditemukan"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Atribut nama yang akan ditampilkan tidak terdeteksi. Silahkan tentukan Anda sendiri pada pengaturan lanjutan LDAP.", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Atribut nama yang akan ditampilkan tidak terdeteksi. Silakan tentukan Anda sendiri pada pengaturan lanjutan LDAP.", "Could not find the desired feature" : "Tidak dapat menemukan fitur yang diinginkan", "Invalid Host" : "Host tidak sah", "LDAP user and group backend" : "Backend pengguna dan grup LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aplikasi ini memungkinkan administrator menghubungkan Nextcloud dengan direktori pengguna berbasis LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aplikasi ini mengizinkan administrator untuk menghubungkan Nexcloud dengan direktori pengguna berbasis LDAP, untuk otentikasi dan penyediaan atribut pengguna dan grup. Admin dapat melakukan konfigurasi untuk menghubungkan satu atau lebih LDAP atau Active Directory melalui antarmuka LDAP. Atribut seperti diantaranya, kuota, surel, gambar profil, keanggotaan grup, dan lainnya dapat ditarik ke Nextcloud dari suatu layanan direktori dengan kueri dan filter yang sesuai.\n\nPengguna akan terhubung ke Nextcloud menggunakan kredensial LDAP atau AD, dan mendapatkan akses berdasarkan permintaan autentikasi yang ditangani oleh peladen LDAP atau AD. Nextcloud tidak menyimpan kata sandi LDAP atau AD, alih-alih kredensial digunakan untuk mengautentikasi pengguna, dan berikutnya Nextcloud akan menggunakan suatu sesi bagi ID pengguna. Informasi lebih lanjut dapat dilihat pada dokumentasi LDAP User and Group Backend.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aplikasi ini mengizinkan administrator untuk menghubungkan Nexcloud dengan direktori pengguna berbasis LDAP, untuk otentikasi dan penyediaan atribut pengguna dan grup. Admin dapat melakukan konfigurasi untuk menghubungkan satu atau lebih LDAP atau Active Directory melalui antarmuka LDAP. Atribut seperti diantaranya, kuota, email, gambar profil, keanggotaan grup, dan lainnya dapat ditarik ke Nextcloud dari suatu layanan direktori dengan kueri dan filter yang sesuai.\n\nPengguna akan terhubung ke Nextcloud menggunakan kredensial LDAP atau AD, dan mendapatkan akses berdasarkan permintaan autentikasi yang ditangani oleh peladen LDAP atau AD. Nextcloud tidak menyimpan kata sandi LDAP atau AD, alih-alih kredensial digunakan untuk mengautentikasi pengguna, dan berikutnya Nextcloud akan menggunakan suatu sesi bagi ID pengguna. Informasi lebih lanjut dapat dilihat pada dokumentasi LDAP User and Group Backend.", "Test Configuration" : "Uji Konfigurasi", "Help" : "Bantuan", "Groups meeting these criteria are available in %s:" : "Grup yang memenuhi kriteria ini tersedia di %s:", @@ -79,10 +70,7 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Penyaring menentukan grup LDAP mana yang memiliki akses ke %s.", "Verify settings and count the groups" : "Verifikasi pengaturan, dan hitung jumlah grup", "When logging in, %s will find the user based on the following attributes:" : "Pada saat login, %s akan menemukan pengguna berdasarkan atribut berikut:", - "LDAP / AD Username:" : "Nama pengguna LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Mengizinkan log masuk menggunakan nama pengguna LDAP / AD, hal ini akan mendeteksi \"uid\" atau \"sAMAccountName\".", - "LDAP / AD Email Address:" : "Alamat Email LDAP / AD:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Mengizinkan juga log masuk menggunakan atribut surel \"mail\" dan \"mailPrimaryAddress\".", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Mengizinkan juga log masuk menggunakan atribut email \"mail\" dan \"mailPrimaryAddress\".", "Other Attributes:" : "Atribut Lain:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definisikan penerapan filter saat percobaan log masuk. \"%%uid\" akan menggantikan nama pengguna saat aksi dilakukan. Contoh: \"uid=%%uid\"", "Test Loginname" : "Test Loginname", @@ -113,7 +101,7 @@ "Saving" : "Menyimpan", "Back" : "Kembali", "Continue" : "Lanjutkan", - "Please renew your password." : "Silahkan perbarui kata sandi Anda.", + "Please renew your password." : "Silakan perbarui kata sandi Anda.", "An internal error occurred." : "Terjadi kesalahan internal.", "Please try again or contact your administrator." : "Mohon coba lagi atau hubungi administrator Anda.", "Current password" : "Kata sandi saat ini", @@ -172,12 +160,11 @@ "Quota Default" : "Kuota Baku", "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Tetapkan kuota bawaan bagi pengguna LDAP, yang nilai kuotanya tidak ditentukan pada isian kuota.", "Email Field" : "Kolom Email", - "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Tetapkan surel pengguna menggunakan atribut LDAP. Biarkan kosong untuk menggunakan perilaku bawaan.", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Tetapkan email pengguna menggunakan atribut LDAP. Biarkan kosong untuk menggunakan perilaku bawaan.", "User Home Folder Naming Rule" : "Aturan Penamaan Folder Home Pengguna", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Biarkan nama pengguna kosong (bawaan). Atau, tentukan atribut LDAP/AD.", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home pada konfigurasi penyimpanan eksternal akan diubah dengan nilai pada atribut yang ditentukan", "Internal Username" : "Nama Pengguna Internal", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Secara bawaan nama pengguna internal akan dibuat dari atribut UUID. Hal ini memastikan bahwa nama yang unik dan karakter tidak perlu dikonversi. Nama pengguna internal yang memiliki batasan bahwa hanya karakter ini diperbolehkan: [ a-zA-Z0-9_.@- ]. Karakter lain yang diganti dengan korespondensi ASCII mereka atau hanya dihilangkan. Pada tabrakan nomor akan ditambahkan / meningkat. Nama pengguna internal digunakan untuk mengidentifikasi pengguna internal. Itu juga merupakan nama bawaan untuk folder pengguna rumah. Ini juga merupakan bagian dari URL remote, misalnya instansi untuk semua layanan *DAV. Dengan pengaturan ini, perilaku bawaan dapat diganti. Biarkan kosong untuk perilaku bawaan. Perubahan hanya akan berpengaruh pada baru dipetakan (ditambahkan) pengguna LDAP.", "Internal Username Attribute:" : "Atribut Nama Pengguna Internal:", "Override UUID detection" : "Timpa deteksi 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." : "Secara default, atribut UUID akan secara otomatis terdeteksi. Atribut UUID ini digunakan untuk mengidentifikasi pengguna dan grup LDAP yang diragukan. Nama pengguna internal juga akan dibuat berdasarkan UUID jika belum ditetapkan di atas. Anda dapat mengganti pengaturan dan meluluskan atribut pilihan Anda. Anda harus memastikan bahwa atribut pilihan Anda dapat diambil untuk pengguna dan grup, serta haruslah unik. Biarkan kosong untuk perilaku default. Perubahan akan berpengaruh hanya pada pengguna dan grup LDAP yang baru dipetakan (ditambahkan).", @@ -186,6 +173,7 @@ "Username-LDAP User Mapping" : "Pemetaan Pengguna LDAP-Nama pengguna", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Nama pengguna digunakan untuk menyimpan dan menetapkan (meta) data. Digunakan untuk mengidentifikasi dan mengenali pengguna secara tepat, setiap pengguna LDAP akan memiliki nama pengguna internal. Hal ini memerlukan sebuah pemetaan dari nama pengguna ke pengguna LDAP. Nama pengguna yang dibuat akan dipetakan pada UUID pengguna LDAP. Selain itu, DN akan di cache untuk mengurangi interaksi LDAP, tetapi tidak digunakan untuk identifikasi. Jika DN berubah, perubahan akan ditemukan. Nama pengguna internal digunakan secara menyeluruh. Membersihkan pemetaan akan mempengaruhi semua konfigurasi LDAP! JANGAN PERNAH MENGHAPUS PEMETAAN PADA LINGKUNGAN PRODUKSI, hanya gunakan selama tahap pengujian dan percobaan.", "Clear Username-LDAP User Mapping" : "Bersihkan Pemetaan Pengguna LDAP-Nama pengguna", - "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup" + "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup", + "Invalid configuration. Please have a look at the logs for further details." : "Konfigurasi tidak valid. Silakan log untuk detil lebih lanjut." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/io.js b/apps/user_ldap/l10n/io.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/io.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/io.json b/apps/user_ldap/l10n/io.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/io.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/is.js b/apps/user_ldap/l10n/is.js deleted file mode 100644 index 3cf4e3ad4f7..00000000000 --- a/apps/user_ldap/l10n/is.js +++ /dev/null @@ -1,103 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Mistókst að hreinsa varpanir.", - "Failed to delete the server configuration" : "Mistókst að eyða uppsetningu þjónsins", - "Valid configuration, connection established!" : "Gild uppsetning, tengingu komið á!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Uppsetningin er gild, en binding mistókst. Skoðaðu stillingar þjónsins og auðkenni.", - "Invalid configuration. Please have a look at the logs for further details." : "Uppsetningin er ógild. Skoðaðu atvikaskrárnar til að sjá nánari upplýsingar.", - "No action specified" : "Engin aðgerð tiltekin", - "No configuration specified" : "Engin uppsetning tiltekin", - "No data specified" : "Engin gögn tiltekin", - " Could not set configuration %s" : "Gat ekki sett uppsetningu %s", - "Action does not exist" : "Aðgerð er ekki til", - "Renewing …" : "Endurnýja …", - "Very weak password" : "Mjög veikt lykilorð", - "Weak password" : "Veikt lykilorð", - "So-so password" : "Miðlungs lykilorð", - "Good password" : "Gott lykilorð", - "Strong password" : "Sterkt lykilorð", - "Testing configuration…" : "Prófa stillingar…", - "Configuration incorrect" : "Röng uppsetning", - "Configuration incomplete" : "Ófullgerð uppsetning", - "Configuration OK" : "Stillingar eru í lagi", - "Select groups" : "Veldu hópa", - "Please check the credentials, they seem to be wrong." : "Athugaðu auðkennin, þau líta út fyrir að vera röng.", - "{nthServer}. Server" : "{nthServer}. Þjónn", - "More than 1,000 directory entries available." : "Meira en 1,000 möppufærslur tiltækar.", - "Do you really want to delete the current Server Configuration?" : "Ertu viss um að þú viljir eyða núgildandi uppsetningu á þjóninum?", - "Confirm Deletion" : "Staðfesta eyðingu", - "Mappings cleared successfully!" : "Það tókst að hreinsa varpanir!", - "Error while clearing the mappings." : "Villa við að hreinsa út varpanir.", - "Mode switch" : "Skipta um ham", - "Select attributes" : "Veldu eigindi", - "User found and settings verified." : "Notandi fannst og stillingar yfirfarnar.", - "Password change rejected. Hint: " : "Breytingu á lykilorði hafnað. Ábending: ", - "Please login with the new password" : "Skráðu þig inn með nýja lykilorðinu", - "Your password will expire tomorrow." : "Lykilorðið þitt rennur út á morgun.", - "Your password will expire today." : "Lykilorðið þitt rennur út í dag.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Lykilorðið þitt rennur út innan %n dags.","Lykilorðið þitt rennur út innan %n daga."], - "LDAP / AD integration" : "LDAP / AD samþætting", - "_%s group found_::_%s groups found_" : ["%s hópur fannst","%s hópar fundust"], - "_%s user found_::_%s users found_" : ["%s notandi fannst","%s notendur fundust"], - "Could not find the desired feature" : "Gat ekki fundið eiginleika sem óskað var eftir", - "Invalid Host" : "Ógild vél", - "LDAP user and group backend" : "LDAP notandi og bakendi hóps", - "Test Configuration" : "Prófa uppsetningu", - "Help" : "Hjálp", - "Only from these groups:" : "Aðeins úr þessum hópum:", - "Search groups" : "Leita í hópum", - "Available groups" : "Tiltækir hópar", - "Selected groups" : "Valdir hópar", - "Edit LDAP Query" : "Breyta LDAP-fyrirspurn", - "LDAP Filter:" : "LDAP sía:", - "Verify settings and count the groups" : "Sannprófa stillingar og telja hópa", - "LDAP / AD Username:" : "LDAP / AD notandanafn:", - "LDAP / AD Email Address:" : "LDAP / AD tölvupóstfang:", - "Other Attributes:" : "Önnur eigindi:", - "Test Loginname" : "Prófa innskráningarnafn", - "Verify settings" : "Sannprófa stillingar", - "%s. Server:" : "%s. Þjónn:", - "Add a new configuration" : "Bæta við nýrri uppsetningu", - "Delete the current configuration" : "Eyða núgildandi uppsetningu", - "Host" : "Hýsill", - "Port" : "Gátt", - "Detect Port" : "Finna gátt", - "User DN" : "DN notanda", - "Password" : "Lykilorð", - "Save Credentials" : "Vista auðkenni", - "Verify settings and count users" : "Sannprófa stillingar og telja notendur", - "Saving" : "Vistun", - "Back" : "Til baka", - "Continue" : "Halda áfram", - "Please renew your password." : "Endurnýjaðu lykilorðið þitt", - "An internal error occurred." : "Innri villa kom upp.", - "Please try again or contact your administrator." : "Reyndu aftur eða hafðu samband við kerfisstjóra.", - "Current password" : "Núverandi lykilorð", - "New password" : "Nýtt lykilorð", - "Renew password" : "Endurnýja lykilorð", - "Wrong password." : "Rangt lykilorð.", - "Cancel" : "Hætta við", - "Server" : "Þjónn", - "Users" : "Notendur", - "Login Attributes" : "Eigindi innskráningar", - "Groups" : "Hópar", - "Expert" : "Snillingur", - "Advanced" : "Ítarlegt", - "Connection Settings" : "Valkostir tengingar ", - "Configuration Active" : "Uppsetning er virk", - "Disable Main Server" : "Gera aðalþjón óvirkan", - "Turn off SSL certificate validation." : "Slökkva á sannvottun SSL-skilríkja.", - "in seconds. A change empties the cache." : "í sekúndum. Breyting tæmir skyndiminnið.", - "Directory Settings" : "Stillingar möppu", - "Nested Groups" : "Faldaðir hópar", - "(New password is sent as plain text to LDAP)" : "(Nýtt lykilorð er sent sem hreinn texti til LDAP)", - "Default password policy DN" : "Sjálfgefin lykilorðastefna DN", - "Special Attributes" : "Sérstök eigindi", - "Quota Field" : "Gagnasvið fyrir kvóta", - "Quota Default" : "Sjálfgefinn kvóti", - "Email Field" : "Gagnasvið fyrir netfang", - "Internal Username" : "Innra notandanafn", - "UUID Attribute for Groups:" : "UUID-eigindi fyrir hópa:" -}, -"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/user_ldap/l10n/is.json b/apps/user_ldap/l10n/is.json deleted file mode 100644 index 5cfa2563c83..00000000000 --- a/apps/user_ldap/l10n/is.json +++ /dev/null @@ -1,101 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Mistókst að hreinsa varpanir.", - "Failed to delete the server configuration" : "Mistókst að eyða uppsetningu þjónsins", - "Valid configuration, connection established!" : "Gild uppsetning, tengingu komið á!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Uppsetningin er gild, en binding mistókst. Skoðaðu stillingar þjónsins og auðkenni.", - "Invalid configuration. Please have a look at the logs for further details." : "Uppsetningin er ógild. Skoðaðu atvikaskrárnar til að sjá nánari upplýsingar.", - "No action specified" : "Engin aðgerð tiltekin", - "No configuration specified" : "Engin uppsetning tiltekin", - "No data specified" : "Engin gögn tiltekin", - " Could not set configuration %s" : "Gat ekki sett uppsetningu %s", - "Action does not exist" : "Aðgerð er ekki til", - "Renewing …" : "Endurnýja …", - "Very weak password" : "Mjög veikt lykilorð", - "Weak password" : "Veikt lykilorð", - "So-so password" : "Miðlungs lykilorð", - "Good password" : "Gott lykilorð", - "Strong password" : "Sterkt lykilorð", - "Testing configuration…" : "Prófa stillingar…", - "Configuration incorrect" : "Röng uppsetning", - "Configuration incomplete" : "Ófullgerð uppsetning", - "Configuration OK" : "Stillingar eru í lagi", - "Select groups" : "Veldu hópa", - "Please check the credentials, they seem to be wrong." : "Athugaðu auðkennin, þau líta út fyrir að vera röng.", - "{nthServer}. Server" : "{nthServer}. Þjónn", - "More than 1,000 directory entries available." : "Meira en 1,000 möppufærslur tiltækar.", - "Do you really want to delete the current Server Configuration?" : "Ertu viss um að þú viljir eyða núgildandi uppsetningu á þjóninum?", - "Confirm Deletion" : "Staðfesta eyðingu", - "Mappings cleared successfully!" : "Það tókst að hreinsa varpanir!", - "Error while clearing the mappings." : "Villa við að hreinsa út varpanir.", - "Mode switch" : "Skipta um ham", - "Select attributes" : "Veldu eigindi", - "User found and settings verified." : "Notandi fannst og stillingar yfirfarnar.", - "Password change rejected. Hint: " : "Breytingu á lykilorði hafnað. Ábending: ", - "Please login with the new password" : "Skráðu þig inn með nýja lykilorðinu", - "Your password will expire tomorrow." : "Lykilorðið þitt rennur út á morgun.", - "Your password will expire today." : "Lykilorðið þitt rennur út í dag.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Lykilorðið þitt rennur út innan %n dags.","Lykilorðið þitt rennur út innan %n daga."], - "LDAP / AD integration" : "LDAP / AD samþætting", - "_%s group found_::_%s groups found_" : ["%s hópur fannst","%s hópar fundust"], - "_%s user found_::_%s users found_" : ["%s notandi fannst","%s notendur fundust"], - "Could not find the desired feature" : "Gat ekki fundið eiginleika sem óskað var eftir", - "Invalid Host" : "Ógild vél", - "LDAP user and group backend" : "LDAP notandi og bakendi hóps", - "Test Configuration" : "Prófa uppsetningu", - "Help" : "Hjálp", - "Only from these groups:" : "Aðeins úr þessum hópum:", - "Search groups" : "Leita í hópum", - "Available groups" : "Tiltækir hópar", - "Selected groups" : "Valdir hópar", - "Edit LDAP Query" : "Breyta LDAP-fyrirspurn", - "LDAP Filter:" : "LDAP sía:", - "Verify settings and count the groups" : "Sannprófa stillingar og telja hópa", - "LDAP / AD Username:" : "LDAP / AD notandanafn:", - "LDAP / AD Email Address:" : "LDAP / AD tölvupóstfang:", - "Other Attributes:" : "Önnur eigindi:", - "Test Loginname" : "Prófa innskráningarnafn", - "Verify settings" : "Sannprófa stillingar", - "%s. Server:" : "%s. Þjónn:", - "Add a new configuration" : "Bæta við nýrri uppsetningu", - "Delete the current configuration" : "Eyða núgildandi uppsetningu", - "Host" : "Hýsill", - "Port" : "Gátt", - "Detect Port" : "Finna gátt", - "User DN" : "DN notanda", - "Password" : "Lykilorð", - "Save Credentials" : "Vista auðkenni", - "Verify settings and count users" : "Sannprófa stillingar og telja notendur", - "Saving" : "Vistun", - "Back" : "Til baka", - "Continue" : "Halda áfram", - "Please renew your password." : "Endurnýjaðu lykilorðið þitt", - "An internal error occurred." : "Innri villa kom upp.", - "Please try again or contact your administrator." : "Reyndu aftur eða hafðu samband við kerfisstjóra.", - "Current password" : "Núverandi lykilorð", - "New password" : "Nýtt lykilorð", - "Renew password" : "Endurnýja lykilorð", - "Wrong password." : "Rangt lykilorð.", - "Cancel" : "Hætta við", - "Server" : "Þjónn", - "Users" : "Notendur", - "Login Attributes" : "Eigindi innskráningar", - "Groups" : "Hópar", - "Expert" : "Snillingur", - "Advanced" : "Ítarlegt", - "Connection Settings" : "Valkostir tengingar ", - "Configuration Active" : "Uppsetning er virk", - "Disable Main Server" : "Gera aðalþjón óvirkan", - "Turn off SSL certificate validation." : "Slökkva á sannvottun SSL-skilríkja.", - "in seconds. A change empties the cache." : "í sekúndum. Breyting tæmir skyndiminnið.", - "Directory Settings" : "Stillingar möppu", - "Nested Groups" : "Faldaðir hópar", - "(New password is sent as plain text to LDAP)" : "(Nýtt lykilorð er sent sem hreinn texti til LDAP)", - "Default password policy DN" : "Sjálfgefin lykilorðastefna DN", - "Special Attributes" : "Sérstök eigindi", - "Quota Field" : "Gagnasvið fyrir kvóta", - "Quota Default" : "Sjálfgefinn kvóti", - "Email Field" : "Gagnasvið fyrir netfang", - "Internal Username" : "Innra notandanafn", - "UUID Attribute for Groups:" : "UUID-eigindi fyrir hópa:" -},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js index 92500b330af..5fc1cfa7cf3 100644 --- a/apps/user_ldap/l10n/it.js +++ b/apps/user_ldap/l10n/it.js @@ -6,11 +6,10 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "La configurazione non è valida: l'associazione anonima non è consentita.", "Valid configuration, connection established!" : "Configurazione valida, connessione stabilita!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configurazione valida, ma associazione non riuscita. Controlla le impostazioni del server e le credenziali.", - "Invalid configuration. Please have a look at the logs for further details." : "Configurazione non valida. Controlla i log per ulteriori dettagli.", "No action specified" : "Nessuna azione specificata", "No configuration specified" : "Nessuna configurazione specificata", "No data specified" : "Nessun dato specificato", - " Could not set configuration %s" : "Impossibile impostare la configurazione %s", + "Invalid data specified" : "Dati specificati non validi", "Action does not exist" : "L'azione non esiste", "Renewing …" : "Rinnovo...", "Very weak password" : "Password molto debole", @@ -32,7 +31,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. server", "No object found in the given Base DN. Please revise." : "Nessun oggetto trovato nel DN base specificato. Controlla.", "More than 1,000 directory entries available." : "Più di 1.000 cartelle disponibili.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} voce disponibile all'interno del DN base fornito","{objectsFound} voci disponibili all'interno del DN base fornito"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} voce disponibile all'interno del DN base fornito","{objectsFound} voci disponibili all'interno del DN base fornito","{objectsFound} voci disponibili all'interno del DN base fornito"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Si è verificato un errore. Controlla il DN base, così come le impostazioni di connessione e le credenziali.", "Do you really want to delete the current Server Configuration?" : "Vuoi davvero eliminare la configurazione attuale del server?", "Confirm Deletion" : "Conferma l'eliminazione", @@ -49,19 +48,28 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Valuta di restringere la tua ricerca, poiché ha incluso molti utenti, solo il primo dei quali sarà in grado di accedere.", "An unspecified error occurred. Please check log and settings." : "Si è verificato un errore non specificato. Controlla le impostazioni e il file di log.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Il filtro di ricerca non è valido, probabilmente a causa di problemi di sintassi come un numero dispari di parentesi aperte e chiuse. Controlla.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Si è verificato un errore di connessione a LDAP / AD, controlla l'host, la porta e le credenziali.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Manca il segnaposto \"%uid\". Sarà sostituito con il nome di accesso nelle interrogazioni LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Si è verificato un errore di connessione a LDAP/AD. Controlla host, porta e credenziali.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Manca il segnaposto \"%uid\". Sarà sostituito con il nome di accesso nelle interrogazioni LDAP/AD.", "Please provide a login name to test against" : "Fornisci un nome di accesso da provare", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "La casella dei gruppi è stata disabilitata, poiché il server LDAP / AD non supporta memberOf.", - "Password change rejected. Hint: " : "Cambio password rifiutato. Suggerimento:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "La casella dei gruppi è stata disattivata, poiché il server LDAP/AD non supporta memberOf.", "Please login with the new password" : "Accedi con la nuova password", "LDAP User backend" : "Motore Utenti LDAP", "Your password will expire tomorrow." : "La tua password scadrà domani.", "Your password will expire today." : "La tua password scadrà oggi.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La tua password scadrà tra %n giorno.","La tua password scadrà oggi tra %n giorni."], - "LDAP / AD integration" : "Integrazione LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s gruppo trovato","%s gruppi trovati"], - "_%s user found_::_%s users found_" : ["%s utente trovato","%s utenti trovati"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La tua password scadrà tra %n giorno.","La tua password scadrà oggi tra %n giorni.","La tua password scadrà oggi tra %n giorni."], + "LDAP/AD integration" : "Integrazione LDAP/AD", + "LDAP Connection" : "Connessione LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Associazione non riuscita per questa configurazione LDAP: %s","Associazione non riuscita per %n configurazioni LDAP: %s","Associazione non riuscita per %n configurazioni LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Ricerca fallita per questa configurazione LDAP: %s","Ricerca fallita per %n configurazioni LDAP: %s","Ricerca fallita per %n configurazioni LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["C'è una configurazione LDAP inattiva: %s","Ci sono %n configurazioni LDAP inattive: %s","Ci sono %n configurazioni LDAP inattive: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["L'associazione e la ricerca funzionano sulla connessione LDAP configurata (%s)","L'associazione e la ricerca funzionano sulle %n connessioni LDAP configurate (%s)","L'associazione e la ricerca funzionano sulle %n connessioni LDAP configurate (%s)"], + "Invalid LDAP UUIDs" : "UUID LDAP non validi", + "None found" : "Nessuno trovato", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Sono stati trovati UUID non validi di account o gruppi LDAP. Controlla le impostazioni \"Ignora rilevamento UUID\" nella parte Esperto della configurazione LDAP e utilizza \"occ ldap:update-uuid\" per aggiornarle.", + "_%n group found_::_%n groups found_" : ["%n gruppo trovato","%n gruppi trovati","%n gruppi trovati"], + "> 1000 groups found" : "> 1000 gruppi trovati", + "> 1000 users found" : "> 1000 utenti trovati", + "_%n user found_::_%n users found_" : ["%n utente trovato","%n utenti trovati","%n utenti trovati"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di LDAP.", "Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata", "Invalid Host" : "Host non valido", @@ -81,13 +89,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Il filtro specifica quali gruppi LDAP devono avere accesso all'istanza %s.", "Verify settings and count the groups" : "Verifica le impostazioni e conta i gruppi", "When logging in, %s will find the user based on the following attributes:" : "Quando accedi, %s troverà l'utente sulla base dei seguenti attributi:", - "LDAP / AD Username:" : "Nome utente LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Consente l'accesso tramite il nome utente LDAP / AD, può essere sia \"uid\" o \"sAMAccountName\" e sarà rilevato.", - "LDAP / AD Email Address:" : "Indirizzo email LDAP / AD:", + "LDAP/AD Username:" : "Nome utente LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Consente l'accesso tramite il nome utente LDAP/AD, che può essere sia \"uid\" o \"sAMAccountName\" e sarà rilevato.", + "LDAP/AD Email Address:" : "Indirizzo email LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Consente l'accesso tramite l'attributo email. \"mail\" e \"mailPrimaryAddress\" sono consentiti.", "Other Attributes:" : "Altri attributi:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definisce i filtri da applicare quando viene eseguito il tentativo di accesso. \"%%uid\" rimpiazza il nome utente nell'azione di accesso. Esempio: \"uid=%%uid\"", "Test Loginname" : "Prova nome di accesso", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta di ricevere un nome di dominio per il nome di login dato e l'attuale filtro di login", "Verify settings" : "Verifica impostazioni", "%s. Server:" : "%s. server:", "Add a new configuration" : "Aggiungi una nuova configurazione", @@ -151,6 +160,8 @@ OC.L10N.register( "One User Base DN per line" : "Un DN base utente per riga", "User Search Attributes" : "Attributi di ricerca utente", "Optional; one attribute per line" : "Opzionale; un attributo per riga", + "Disable users missing from LDAP" : "Disattiva utenti mancanti da LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando attivo, gli utenti importati da LDAP che poi mancano, saranno disattivati", "Group Display Name Field" : "Campo per la visualizzazione del nome del gruppo", "The LDAP attribute to use to generate the groups's display name." : "L'attributo LDAP da usare per generare il nome visualizzato del gruppo.", "Base Group Tree" : "Struttura base del gruppo", @@ -179,8 +190,31 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Lascia vuoto il nome utente (predefinito). Altrimenti, specifica un attributo LDAP/AD.", "\"$home\" Placeholder Field" : "Segnaposto \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home nella configurazione di un'archiviazione esterna sarà sostituita con il valore dell'attributo specificato", + "User Profile Attributes" : "Attributi profilo utente", + "Phone Field" : "Campo telefono", + "User profile Phone will be set from the specified attribute" : "Il telefono del profilo utente verrà impostato dall'attributo specificato", + "Website Field" : "Campo sito web", + "User profile Website will be set from the specified attribute" : "Il sito web del profilo utente verrà impostato dall'attributo specificato", + "Address Field" : "Campo indirizzo", + "User profile Address will be set from the specified attribute" : "L'indirizzo del profilo utente verrà impostato dall'attributo specificato", + "Twitter Field" : "Campo Twitter", + "User profile Twitter will be set from the specified attribute" : "Il Twitter del profilo utente verrà impostato dall'attributo specificato", + "Fediverse Field" : "Campo fediverso", + "User profile Fediverse will be set from the specified attribute" : "Il fediverso del profilo utente verrà impostato dall'attributo specificato", + "Organisation Field" : "Campo organizzazione", + "User profile Organisation will be set from the specified attribute" : "L'organizzazione del profilo utente verrà impostata dall'attributo specificato", + "Role Field" : "Campo ruolo", + "User profile Role will be set from the specified attribute" : "Il ruolo del profilo utente verrà impostato dall'attributo specificato", + "Headline Field" : "Campo titolo", + "User profile Headline will be set from the specified attribute" : "Il titolo del profilo utente verrà impostato dall'attributo specificato", + "Biography Field" : "Campo biografia", + "User profile Biography will be set from the specified attribute" : "La biografia del profilo utente verrà impostata dall'attributo specificato", + "Birthdate Field" : "Campo Data di Nascita", + "User profile Date of birth will be set from the specified attribute" : "La data di nascita del Profilo Utente verrà impostata dall'attributo specificato", + "Pronouns Field" : "Campo Pronomi", + "User profile Pronouns will be set from the specified attribute" : "I pronomi del Profilo Utente verranno impostati dall'attributo specificato", "Internal Username" : "Nome utente interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "In modo predefinito, il nome utente interno sarà creato dall'attributo UUID. Ciò assicura che il nome utente sia univoco e che non sia necessario convertire i caratteri. Il nome utente interno consente l'uso di determinati caratteri: [ a-zA-Z0-9_.@- ]. Altri caratteri sono sostituiti con il corrispondente ASCII o sono semplicemente omessi. In caso di conflitto, sarà aggiunto/incrementato un numero. Il nome utente interno è utilizzato per identificare un utente internamente. Rappresenta, inoltre, il nome predefinito per la cartella home dell'utente in ownCloud. Costituisce anche una parte di URL remoti, ad esempio per tutti i servizi *DAV. Con questa impostazione, il comportamento predefinito può essere scavalcato. Lascialo vuoto per ottenere il comportamento predefinito. Le modifiche avranno effetto solo sui nuovo utenti LDAP associati (aggiunti).", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "In modo predefinito, il nome utente interno sarà creato dall'attributo UUID. Ciò assicura che il nome utente sia univoco e che non sia necessario convertire i caratteri. Il nome utente interno consente l'uso solo di determinati caratteri: [ a-zA-Z0-9_.@- ]. Altri caratteri sono sostituiti con il corrispondente ASCII o semplicemente omessi. In caso di conflitto, sarà aggiunto/incrementato un numero. Il nome utente interno è usato per identificare un utente internamente. È anche il nome predefinito per la cartella home dell'utente. Costituisce anche una parte di URL remoti, ad esempio per tutti i servizi DAV. Con questa impostazione, il comportamento predefinito può essere scavalcato. Le modifiche avranno effetto solo sui nuovo utenti LDAP associati (aggiunti). Lascialo vuoto per ottenere il comportamento predefinito.", "Internal Username Attribute:" : "Attributo nome utente interno:", "Override UUID detection" : "Ignora rilevamento 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." : "In modo predefinito, l'attributo UUID viene rilevato automaticamente. L'attributo UUID è utilizzato per identificare senza alcun dubbio gli utenti e i gruppi LDAP. Inoltre, il nome utente interno sarà creato sulla base dell'UUID, se non è specificato in precedenza. Puoi ignorare l'impostazione e fornire un attributo di tua scelta. Assicurati che l'attributo scelto possa essere ottenuto sia per gli utenti che per i gruppi e che sia univoco. Lascialo vuoto per ottenere il comportamento predefinito. Le modifiche avranno effetto solo sui nuovi utenti e gruppi LDAP associati (aggiunti).", @@ -189,6 +223,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Associazione Nome utente-Utente LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "I nomi utente sono utilizzati per archiviare e assegnare i metadati. Per identificare con precisione e riconoscere gli utenti, ogni utente LDAP avrà un nome utente interno. Il nome utente creato. Ciò richiede un'associazione tra il nome utente e l'utente LDAP. Il nome utente creato è associato allo UUID dell'utente LDAP. In aggiunta, il DN viene memorizzato in cache per ridurre l'interazione con LDAP, ma non è utilizzato per l'identificazione. Se il DN cambia, le modifiche saranno rilevate. Il nome utente interno è utilizzato dappertutto. La cancellazione delle associazioni lascerà tracce residue ovunque e interesserà tutta la configurazione LDAP. Non cancellare mai le associazioni in un ambiente di produzione, ma solo in una fase sperimentale o di test.", "Clear Username-LDAP User Mapping" : "Cancella associazione Nome utente-Utente LDAP", - "Clear Groupname-LDAP Group Mapping" : "Cancella associazione Nome gruppo-Gruppo LDAP" + "Clear Groupname-LDAP Group Mapping" : "Cancella associazione Nome gruppo-Gruppo LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configurazione non valida. Controlla i log per ulteriori dettagli." }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json index f1bbacced27..2faa08fb7f1 100644 --- a/apps/user_ldap/l10n/it.json +++ b/apps/user_ldap/l10n/it.json @@ -4,11 +4,10 @@ "Invalid configuration: Anonymous binding is not allowed." : "La configurazione non è valida: l'associazione anonima non è consentita.", "Valid configuration, connection established!" : "Configurazione valida, connessione stabilita!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configurazione valida, ma associazione non riuscita. Controlla le impostazioni del server e le credenziali.", - "Invalid configuration. Please have a look at the logs for further details." : "Configurazione non valida. Controlla i log per ulteriori dettagli.", "No action specified" : "Nessuna azione specificata", "No configuration specified" : "Nessuna configurazione specificata", "No data specified" : "Nessun dato specificato", - " Could not set configuration %s" : "Impossibile impostare la configurazione %s", + "Invalid data specified" : "Dati specificati non validi", "Action does not exist" : "L'azione non esiste", "Renewing …" : "Rinnovo...", "Very weak password" : "Password molto debole", @@ -30,7 +29,7 @@ "{nthServer}. Server" : "{nthServer}. server", "No object found in the given Base DN. Please revise." : "Nessun oggetto trovato nel DN base specificato. Controlla.", "More than 1,000 directory entries available." : "Più di 1.000 cartelle disponibili.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} voce disponibile all'interno del DN base fornito","{objectsFound} voci disponibili all'interno del DN base fornito"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} voce disponibile all'interno del DN base fornito","{objectsFound} voci disponibili all'interno del DN base fornito","{objectsFound} voci disponibili all'interno del DN base fornito"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Si è verificato un errore. Controlla il DN base, così come le impostazioni di connessione e le credenziali.", "Do you really want to delete the current Server Configuration?" : "Vuoi davvero eliminare la configurazione attuale del server?", "Confirm Deletion" : "Conferma l'eliminazione", @@ -47,19 +46,28 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Valuta di restringere la tua ricerca, poiché ha incluso molti utenti, solo il primo dei quali sarà in grado di accedere.", "An unspecified error occurred. Please check log and settings." : "Si è verificato un errore non specificato. Controlla le impostazioni e il file di log.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Il filtro di ricerca non è valido, probabilmente a causa di problemi di sintassi come un numero dispari di parentesi aperte e chiuse. Controlla.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Si è verificato un errore di connessione a LDAP / AD, controlla l'host, la porta e le credenziali.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Manca il segnaposto \"%uid\". Sarà sostituito con il nome di accesso nelle interrogazioni LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Si è verificato un errore di connessione a LDAP/AD. Controlla host, porta e credenziali.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Manca il segnaposto \"%uid\". Sarà sostituito con il nome di accesso nelle interrogazioni LDAP/AD.", "Please provide a login name to test against" : "Fornisci un nome di accesso da provare", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "La casella dei gruppi è stata disabilitata, poiché il server LDAP / AD non supporta memberOf.", - "Password change rejected. Hint: " : "Cambio password rifiutato. Suggerimento:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "La casella dei gruppi è stata disattivata, poiché il server LDAP/AD non supporta memberOf.", "Please login with the new password" : "Accedi con la nuova password", "LDAP User backend" : "Motore Utenti LDAP", "Your password will expire tomorrow." : "La tua password scadrà domani.", "Your password will expire today." : "La tua password scadrà oggi.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La tua password scadrà tra %n giorno.","La tua password scadrà oggi tra %n giorni."], - "LDAP / AD integration" : "Integrazione LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s gruppo trovato","%s gruppi trovati"], - "_%s user found_::_%s users found_" : ["%s utente trovato","%s utenti trovati"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La tua password scadrà tra %n giorno.","La tua password scadrà oggi tra %n giorni.","La tua password scadrà oggi tra %n giorni."], + "LDAP/AD integration" : "Integrazione LDAP/AD", + "LDAP Connection" : "Connessione LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Associazione non riuscita per questa configurazione LDAP: %s","Associazione non riuscita per %n configurazioni LDAP: %s","Associazione non riuscita per %n configurazioni LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Ricerca fallita per questa configurazione LDAP: %s","Ricerca fallita per %n configurazioni LDAP: %s","Ricerca fallita per %n configurazioni LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["C'è una configurazione LDAP inattiva: %s","Ci sono %n configurazioni LDAP inattive: %s","Ci sono %n configurazioni LDAP inattive: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["L'associazione e la ricerca funzionano sulla connessione LDAP configurata (%s)","L'associazione e la ricerca funzionano sulle %n connessioni LDAP configurate (%s)","L'associazione e la ricerca funzionano sulle %n connessioni LDAP configurate (%s)"], + "Invalid LDAP UUIDs" : "UUID LDAP non validi", + "None found" : "Nessuno trovato", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Sono stati trovati UUID non validi di account o gruppi LDAP. Controlla le impostazioni \"Ignora rilevamento UUID\" nella parte Esperto della configurazione LDAP e utilizza \"occ ldap:update-uuid\" per aggiornarle.", + "_%n group found_::_%n groups found_" : ["%n gruppo trovato","%n gruppi trovati","%n gruppi trovati"], + "> 1000 groups found" : "> 1000 gruppi trovati", + "> 1000 users found" : "> 1000 utenti trovati", + "_%n user found_::_%n users found_" : ["%n utente trovato","%n utenti trovati","%n utenti trovati"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di LDAP.", "Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata", "Invalid Host" : "Host non valido", @@ -79,13 +87,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Il filtro specifica quali gruppi LDAP devono avere accesso all'istanza %s.", "Verify settings and count the groups" : "Verifica le impostazioni e conta i gruppi", "When logging in, %s will find the user based on the following attributes:" : "Quando accedi, %s troverà l'utente sulla base dei seguenti attributi:", - "LDAP / AD Username:" : "Nome utente LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Consente l'accesso tramite il nome utente LDAP / AD, può essere sia \"uid\" o \"sAMAccountName\" e sarà rilevato.", - "LDAP / AD Email Address:" : "Indirizzo email LDAP / AD:", + "LDAP/AD Username:" : "Nome utente LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Consente l'accesso tramite il nome utente LDAP/AD, che può essere sia \"uid\" o \"sAMAccountName\" e sarà rilevato.", + "LDAP/AD Email Address:" : "Indirizzo email LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Consente l'accesso tramite l'attributo email. \"mail\" e \"mailPrimaryAddress\" sono consentiti.", "Other Attributes:" : "Altri attributi:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definisce i filtri da applicare quando viene eseguito il tentativo di accesso. \"%%uid\" rimpiazza il nome utente nell'azione di accesso. Esempio: \"uid=%%uid\"", "Test Loginname" : "Prova nome di accesso", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta di ricevere un nome di dominio per il nome di login dato e l'attuale filtro di login", "Verify settings" : "Verifica impostazioni", "%s. Server:" : "%s. server:", "Add a new configuration" : "Aggiungi una nuova configurazione", @@ -149,6 +158,8 @@ "One User Base DN per line" : "Un DN base utente per riga", "User Search Attributes" : "Attributi di ricerca utente", "Optional; one attribute per line" : "Opzionale; un attributo per riga", + "Disable users missing from LDAP" : "Disattiva utenti mancanti da LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando attivo, gli utenti importati da LDAP che poi mancano, saranno disattivati", "Group Display Name Field" : "Campo per la visualizzazione del nome del gruppo", "The LDAP attribute to use to generate the groups's display name." : "L'attributo LDAP da usare per generare il nome visualizzato del gruppo.", "Base Group Tree" : "Struttura base del gruppo", @@ -177,8 +188,31 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Lascia vuoto il nome utente (predefinito). Altrimenti, specifica un attributo LDAP/AD.", "\"$home\" Placeholder Field" : "Segnaposto \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home nella configurazione di un'archiviazione esterna sarà sostituita con il valore dell'attributo specificato", + "User Profile Attributes" : "Attributi profilo utente", + "Phone Field" : "Campo telefono", + "User profile Phone will be set from the specified attribute" : "Il telefono del profilo utente verrà impostato dall'attributo specificato", + "Website Field" : "Campo sito web", + "User profile Website will be set from the specified attribute" : "Il sito web del profilo utente verrà impostato dall'attributo specificato", + "Address Field" : "Campo indirizzo", + "User profile Address will be set from the specified attribute" : "L'indirizzo del profilo utente verrà impostato dall'attributo specificato", + "Twitter Field" : "Campo Twitter", + "User profile Twitter will be set from the specified attribute" : "Il Twitter del profilo utente verrà impostato dall'attributo specificato", + "Fediverse Field" : "Campo fediverso", + "User profile Fediverse will be set from the specified attribute" : "Il fediverso del profilo utente verrà impostato dall'attributo specificato", + "Organisation Field" : "Campo organizzazione", + "User profile Organisation will be set from the specified attribute" : "L'organizzazione del profilo utente verrà impostata dall'attributo specificato", + "Role Field" : "Campo ruolo", + "User profile Role will be set from the specified attribute" : "Il ruolo del profilo utente verrà impostato dall'attributo specificato", + "Headline Field" : "Campo titolo", + "User profile Headline will be set from the specified attribute" : "Il titolo del profilo utente verrà impostato dall'attributo specificato", + "Biography Field" : "Campo biografia", + "User profile Biography will be set from the specified attribute" : "La biografia del profilo utente verrà impostata dall'attributo specificato", + "Birthdate Field" : "Campo Data di Nascita", + "User profile Date of birth will be set from the specified attribute" : "La data di nascita del Profilo Utente verrà impostata dall'attributo specificato", + "Pronouns Field" : "Campo Pronomi", + "User profile Pronouns will be set from the specified attribute" : "I pronomi del Profilo Utente verranno impostati dall'attributo specificato", "Internal Username" : "Nome utente interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "In modo predefinito, il nome utente interno sarà creato dall'attributo UUID. Ciò assicura che il nome utente sia univoco e che non sia necessario convertire i caratteri. Il nome utente interno consente l'uso di determinati caratteri: [ a-zA-Z0-9_.@- ]. Altri caratteri sono sostituiti con il corrispondente ASCII o sono semplicemente omessi. In caso di conflitto, sarà aggiunto/incrementato un numero. Il nome utente interno è utilizzato per identificare un utente internamente. Rappresenta, inoltre, il nome predefinito per la cartella home dell'utente in ownCloud. Costituisce anche una parte di URL remoti, ad esempio per tutti i servizi *DAV. Con questa impostazione, il comportamento predefinito può essere scavalcato. Lascialo vuoto per ottenere il comportamento predefinito. Le modifiche avranno effetto solo sui nuovo utenti LDAP associati (aggiunti).", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "In modo predefinito, il nome utente interno sarà creato dall'attributo UUID. Ciò assicura che il nome utente sia univoco e che non sia necessario convertire i caratteri. Il nome utente interno consente l'uso solo di determinati caratteri: [ a-zA-Z0-9_.@- ]. Altri caratteri sono sostituiti con il corrispondente ASCII o semplicemente omessi. In caso di conflitto, sarà aggiunto/incrementato un numero. Il nome utente interno è usato per identificare un utente internamente. È anche il nome predefinito per la cartella home dell'utente. Costituisce anche una parte di URL remoti, ad esempio per tutti i servizi DAV. Con questa impostazione, il comportamento predefinito può essere scavalcato. Le modifiche avranno effetto solo sui nuovo utenti LDAP associati (aggiunti). Lascialo vuoto per ottenere il comportamento predefinito.", "Internal Username Attribute:" : "Attributo nome utente interno:", "Override UUID detection" : "Ignora rilevamento 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." : "In modo predefinito, l'attributo UUID viene rilevato automaticamente. L'attributo UUID è utilizzato per identificare senza alcun dubbio gli utenti e i gruppi LDAP. Inoltre, il nome utente interno sarà creato sulla base dell'UUID, se non è specificato in precedenza. Puoi ignorare l'impostazione e fornire un attributo di tua scelta. Assicurati che l'attributo scelto possa essere ottenuto sia per gli utenti che per i gruppi e che sia univoco. Lascialo vuoto per ottenere il comportamento predefinito. Le modifiche avranno effetto solo sui nuovi utenti e gruppi LDAP associati (aggiunti).", @@ -187,6 +221,7 @@ "Username-LDAP User Mapping" : "Associazione Nome utente-Utente LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "I nomi utente sono utilizzati per archiviare e assegnare i metadati. Per identificare con precisione e riconoscere gli utenti, ogni utente LDAP avrà un nome utente interno. Il nome utente creato. Ciò richiede un'associazione tra il nome utente e l'utente LDAP. Il nome utente creato è associato allo UUID dell'utente LDAP. In aggiunta, il DN viene memorizzato in cache per ridurre l'interazione con LDAP, ma non è utilizzato per l'identificazione. Se il DN cambia, le modifiche saranno rilevate. Il nome utente interno è utilizzato dappertutto. La cancellazione delle associazioni lascerà tracce residue ovunque e interesserà tutta la configurazione LDAP. Non cancellare mai le associazioni in un ambiente di produzione, ma solo in una fase sperimentale o di test.", "Clear Username-LDAP User Mapping" : "Cancella associazione Nome utente-Utente LDAP", - "Clear Groupname-LDAP Group Mapping" : "Cancella associazione Nome gruppo-Gruppo LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" + "Clear Groupname-LDAP Group Mapping" : "Cancella associazione Nome gruppo-Gruppo LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configurazione non valida. Controlla i log per ulteriori dettagli." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js index 5da11887222..b957227dfd1 100644 --- a/apps/user_ldap/l10n/ja.js +++ b/apps/user_ldap/l10n/ja.js @@ -6,11 +6,12 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "設定が間違っています: 匿名接続は、許可されていません。", "Valid configuration, connection established!" : "正しい設定です。接続されました。", "Valid configuration, but binding failed. Please check the server settings and credentials." : "設定は有効ですが、接続に失敗しました。サーバー設定と資格情報を確認してください。", - "Invalid configuration. Please have a look at the logs for further details." : "設定が無効です。詳細はログを確認してください。", + "Invalid configuration: %s" : "無効な設定: %s", "No action specified" : "アクションが指定されていません", "No configuration specified" : "構成が指定されていません", "No data specified" : "データが指定されていません", - " Could not set configuration %s" : "構成 %s を設定できませんでした", + "Invalid data specified" : "無効なデータが指定されました", + "Could not set configuration %1$s to %2$s" : "構成%1$sを%2$sに設定できませんでした", "Action does not exist" : "アクションが存在しません", "Renewing …" : "更新中 ...", "Very weak password" : "非常に弱いパスワードです", @@ -49,19 +50,36 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "最初のユーザーだけがログインできるよう、多くのユーザーを網羅しつつ検索を絞るようにしてください。", "An unspecified error occurred. Please check log and settings." : "不明なエラーが発生しました。設定とログを確認してください。", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "検索フィルターが不正です。恐らく文法の問題で、開き括弧と閉じ括弧がマッチしていません。修正をお願いします。", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD の接続エラーが発生しました。ホスト名、ポート、権限をチェックしてください。", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "\"%u\" id のプレースホルダがありません。プレースホルダは、LDAP /ADで問合せするときにログイン名で置き換えられます。", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP/AD接続エラーが発生しました。ホスト名、ポート、および資格情報を確認してください。", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"%u\" id のプレースホルダがありません。プレースホルダは、LDAP /ADで問合せするときにログイン名で置き換えられます。", "Please provide a login name to test against" : "テストの為にログイン名を入力してください。", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP/ADサーバーがMemberOfオプションをサポートしていないため、グループボックスは無効になりました。", - "Password change rejected. Hint: " : "パスワード変更が拒否されました。ヒント:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "LDAP/ADサーバーがMemberOfオプションをサポートしていないため、グループボックスは無効になりました。", + "Password change rejected. Hint: %s" : "パスワード変更が拒否されました。ヒント: %s", + "Mandatory field \"%s\" left empty" : "必須フィールド\"%s\"が空欄のままです", + "A password is given, but not an LDAP agent" : "パスワードは与えられています、LDAPエージェントは与えられていません", + "No password is given for the user agent" : "ユーザーエージェントにパスワードが与えられていません", + "No LDAP base DN was given" : "LDAPベースDNが指定されていません", + "User base DN is not a subnode of global base DN" : "ユーザーベースDNはグローバルベースDNのサブノードではありません", + "Group base DN is not a subnode of global base DN" : "グループベースDNがグローバルベースDNのサブノードではありません", + "Login filter does not contain %s placeholder." : "ログインフィルタに%sプレースホルダが含まれていません。", "Please login with the new password" : "新しいパスワードでログインしてください", "LDAP User backend" : "LDAPユーザーバックエンド", "Your password will expire tomorrow." : "パスワードが明日期限切れになります。", "Your password will expire today." : "パスワードが今日期限切れになります。", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["パスワードがあと %n日で期限切れになります。"], - "LDAP / AD integration" : "LDAP/AD統合", - "_%s group found_::_%s groups found_" : ["%s グループが見つかりました"], - "_%s user found_::_%s users found_" : ["%s ユーザーが見つかりました"], + "LDAP/AD integration" : "LDAP/AD統合", + "LDAP Connection" : "LDAP接続", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["%n 個のLDAP設定のバインディングに失敗しました: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["%n 個のLDAP設定の検索に失敗しました: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["非アクティブなLDAPコンフィギュレーションが%n個あります: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["バインディングと検索は、設定された%nのLDAP接続すべてで機能します(%s)"], + "Invalid LDAP UUIDs" : "無効な LDAP UUID", + "None found" : "該当なし", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAPアカウントまたはグループの無効なUUIDが見つかりました。LDAP設定のエキスパート部分にある \"Override UUID detection\" の設定を見直して、\"occ ldap:update-uuid\"を使ってアップデートしてください。", + "_%n group found_::_%n groups found_" : ["グループ%nが見つかりました "], + "> 1000 groups found" : "1000 以上のグループが見つかりました", + "> 1000 users found" : "1000 以上のユーザーが見つかりました", + "_%n user found_::_%n users found_" : ["ユーザー%n が見つかりました"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "ユーザー表示名の属性を検出できませんでした。詳細設定で対応する属性を指定してください。", "Could not find the desired feature" : "望ましい機能は見つかりませんでした", "Invalid Host" : "無効なホスト", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "フィルターは、どの LDAP グループが %s にアクセスするかを指定します。", "Verify settings and count the groups" : "設定を検証し、グループを数える", "When logging in, %s will find the user based on the following attributes:" : "ログイン時に、%s により次の属性からユーザーを見つけます:", - "LDAP / AD Username:" : "LDAP/ADユーザー名:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/ADユーザー名に対してログインが許可されています。\"uid\" か、\"sAMAccountName\" のどちらかが検出されました。", - "LDAP / AD Email Address:" : "LDAP/ADメールアドレス:", + "LDAP/AD Username:" : "LDAP/ADユーザー名:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/ADユーザー名に対してログインが許可されています。\"uid\" か、\"sAMAccountName\" のどちらかが検出されました。", + "LDAP/AD Email Address:" : "LDAP/ADメールアドレス:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "メール属性に対してログインが許可されています。\"mail\" と \"mailPrimaryAddress\" が利用可能です。", "Other Attributes:" : "その他の属性:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "ログイン実行時に適用するフィルターを定義します。uid \"%%\" にはログイン操作におけるユーザー名が入ります。例: \"uid=%%uid\"", "Test Loginname" : "テスト用ログイン名", + "Attempts to receive a DN for the given loginname and the current login filter" : "指定されたログイン名と現在のログインフィルタのDNを取得します", "Verify settings" : "設定のチェック", "%s. Server:" : "%s. サーバー:", "Add a new configuration" : "新しい設定を追加", @@ -151,6 +170,8 @@ OC.L10N.register( "One User Base DN per line" : "1行に1つのユーザーベースDN", "User Search Attributes" : "ユーザー検索属性", "Optional; one attribute per line" : "オプション:1行に1属性", + "Disable users missing from LDAP" : "LDAPから消えたユーザーを無効にする", + "When switched on, users imported from LDAP which are then missing will be disabled" : "オンにすると、LDAPからインポートされたユーザーのうち欠落しているユーザーは無効になります。", "Group Display Name Field" : "グループ表示名のフィールド", "The LDAP attribute to use to generate the groups's display name." : "ユーザーのグループ表示名の生成に利用するLDAP属性", "Base Group Tree" : "ベースグループツリー", @@ -179,8 +200,31 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "ユーザー名は空のままにしてください(デフォルト)。それ以外の場合は、LDAP/AD属性を指定します。", "\"$home\" Placeholder Field" : "\"$home\" 属性設定", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "外部ストレージ設定の $home 変数には、指定した属性の値が入ります", + "User Profile Attributes" : "ユーザープロファイル属性", + "Phone Field" : "電話番号 フィールド", + "User profile Phone will be set from the specified attribute" : "ユーザープロファイルの電話番号は、指定された属性から設定されます。", + "Website Field" : "ウェブサイト フィールド", + "User profile Website will be set from the specified attribute" : "ユーザープロファイルのウェブサイトは、指定された属性から設定されます。", + "Address Field" : "住所 フィールド", + "User profile Address will be set from the specified attribute" : "ユーザープロファイルの住所は、指定された属性から設定されます。", + "Twitter Field" : "Twitter フィールド", + "User profile Twitter will be set from the specified attribute" : "ユーザープロファイルの Twitter は、指定された属性から設定されます。", + "Fediverse Field" : "Fediverse フィールド", + "User profile Fediverse will be set from the specified attribute" : "ユーザープロファイルの Fediverse は、指定された属性から設定されます。", + "Organisation Field" : "組織 フィールド", + "User profile Organisation will be set from the specified attribute" : "ユーザープロファイルの組織は、指定された属性から設定されます。", + "Role Field" : "役職 フィールド", + "User profile Role will be set from the specified attribute" : "ユーザープロファイルの役職は、指定された属性から設定されます。", + "Headline Field" : "ヘッドライン フィールド", + "User profile Headline will be set from the specified attribute" : "ユーザープロファイルのヘッドラインは、指定された属性から設定されます。", + "Biography Field" : "経歴 フィールド", + "User profile Biography will be set from the specified attribute" : "ユーザープロファイルの経歴は、指定された属性から設定されます。", + "Birthdate Field" : "誕生日フィールド", + "User profile Date of birth will be set from the specified attribute" : "生年月日のユーザープロフィールは、指定された属性から設定されます", + "Pronouns Field" : "代名詞フィールド", + "User profile Pronouns will be set from the specified attribute" : "ユーザープロファイルの代名詞は、指定された属性から設定されます", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "デフォルトでは、内部的なユーザー名がUUID属性から作成されます。これにより、ユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[ a-zA-Z0-9_.@- ] の文字のみが有効であるという制限があり、その他の文字は対応する ASCII コードに変換されるか単に無視されます。そのため、他のユーザー名との衝突の回数が増加するでしょう。内部ユーザー名は、内部的にユーザーを識別するために用いられ、また、Nextcloud におけるデフォルトのホームフォルダー名としても用いられます。例えば*DAVサービスのように、リモートURLの一部でもあります。この設定により、デフォルトの振る舞いを再定義します。ownCloud 5 以前と同じような振る舞いにするためには、以下のフィールドにユーザー表示名の属性を入力します。空にするとデフォルトの振る舞いとなります。変更は新しくマッピング(追加)されたLDAPユーザーにおいてのみ有効となります。", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "デフォルトでは、内部的なユーザー名がUUID属性から作成されます。これにより、ユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[ a-zA-Z0-9_.@- ] の文字のみが有効であるという制限があり、その他の文字は対応する ASCII コードに変換されるか単に無視されます。そのため、他のユーザー名との衝突の回数が増加するでしょう。内部ユーザー名は、内部的にユーザーを識別するために用いられ、また、Nextcloud におけるデフォルトのホームフォルダー名としても用いられます。例えば*DAVサービスのように、リモートURLの一部でもあります。この設定により、デフォルトの振る舞いを再定義します。これは、たとえばすべての* DAVサービスのリモートURLの一部でもあります。この設定を使用すると、デフォルトの動作を上書きできます。変更は、新しくマップされた(追加された)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." : "デフォルトでは、UUID 属性は自動的に検出されます。UUID属性は、LDAPユーザーとLDAPグループを間違いなく識別するために利用されます。また、もしこれを指定しない場合は、内部ユーザー名はUUIDに基づいて作成されます。この設定は再定義することができ、あなたの選択した属性を用いることができます。選択した属性がユーザーとグループの両方に対して適用でき、かつユニークであることを確認してください。空であればデフォルトの振る舞いとなります。変更は、新しくマッピング(追加)されたLDAPユーザーとLDAPグループに対してのみ有効となります。", @@ -189,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "ユーザー名とLDAPユーザーのマッピング", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "ユーザー名は、メタデータの保存と割り当てに使用されます。 ユーザーを正確に識別して認識するために、各LDAPユーザーには内部ユーザー名が割り当てられます。 これには、ユーザー名からLDAPユーザーへのマッピングが必要です。 作成されたユーザー名は、LDAPユーザーのUUIDにマップされます。 さらに、DNはLDAPインタラクションを減らすためにキャッシュされますが、識別には使用されません。 DNが変更された場合、変更が検出されます。 内部ユーザー名はいたるところで使用されます。 マッピングをクリアすると、どこに残っているか分かります。 マッピングの消去はコンフィギュレーションセンシティブではなく、すべてのLDAP構成に影響します。 本番環境のマッピングをクリアしないでください。テスト環境または実験段階でのみ実施してください。", "Clear Username-LDAP User Mapping" : "ユーザー名とLDAPユーザーのマッピングをクリアする", - "Clear Groupname-LDAP Group Mapping" : "グループ名とLDAPグループのマッピングをクリアする" + "Clear Groupname-LDAP Group Mapping" : "グループ名とLDAPグループのマッピングをクリアする", + "Invalid configuration. Please have a look at the logs for further details." : "設定が無効です。詳細はログを確認してください。" }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json index 64c2a6ae51d..6cadf55ae4e 100644 --- a/apps/user_ldap/l10n/ja.json +++ b/apps/user_ldap/l10n/ja.json @@ -4,11 +4,12 @@ "Invalid configuration: Anonymous binding is not allowed." : "設定が間違っています: 匿名接続は、許可されていません。", "Valid configuration, connection established!" : "正しい設定です。接続されました。", "Valid configuration, but binding failed. Please check the server settings and credentials." : "設定は有効ですが、接続に失敗しました。サーバー設定と資格情報を確認してください。", - "Invalid configuration. Please have a look at the logs for further details." : "設定が無効です。詳細はログを確認してください。", + "Invalid configuration: %s" : "無効な設定: %s", "No action specified" : "アクションが指定されていません", "No configuration specified" : "構成が指定されていません", "No data specified" : "データが指定されていません", - " Could not set configuration %s" : "構成 %s を設定できませんでした", + "Invalid data specified" : "無効なデータが指定されました", + "Could not set configuration %1$s to %2$s" : "構成%1$sを%2$sに設定できませんでした", "Action does not exist" : "アクションが存在しません", "Renewing …" : "更新中 ...", "Very weak password" : "非常に弱いパスワードです", @@ -47,19 +48,36 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "最初のユーザーだけがログインできるよう、多くのユーザーを網羅しつつ検索を絞るようにしてください。", "An unspecified error occurred. Please check log and settings." : "不明なエラーが発生しました。設定とログを確認してください。", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "検索フィルターが不正です。恐らく文法の問題で、開き括弧と閉じ括弧がマッチしていません。修正をお願いします。", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD の接続エラーが発生しました。ホスト名、ポート、権限をチェックしてください。", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "\"%u\" id のプレースホルダがありません。プレースホルダは、LDAP /ADで問合せするときにログイン名で置き換えられます。", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP/AD接続エラーが発生しました。ホスト名、ポート、および資格情報を確認してください。", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"%u\" id のプレースホルダがありません。プレースホルダは、LDAP /ADで問合せするときにログイン名で置き換えられます。", "Please provide a login name to test against" : "テストの為にログイン名を入力してください。", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP/ADサーバーがMemberOfオプションをサポートしていないため、グループボックスは無効になりました。", - "Password change rejected. Hint: " : "パスワード変更が拒否されました。ヒント:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "LDAP/ADサーバーがMemberOfオプションをサポートしていないため、グループボックスは無効になりました。", + "Password change rejected. Hint: %s" : "パスワード変更が拒否されました。ヒント: %s", + "Mandatory field \"%s\" left empty" : "必須フィールド\"%s\"が空欄のままです", + "A password is given, but not an LDAP agent" : "パスワードは与えられています、LDAPエージェントは与えられていません", + "No password is given for the user agent" : "ユーザーエージェントにパスワードが与えられていません", + "No LDAP base DN was given" : "LDAPベースDNが指定されていません", + "User base DN is not a subnode of global base DN" : "ユーザーベースDNはグローバルベースDNのサブノードではありません", + "Group base DN is not a subnode of global base DN" : "グループベースDNがグローバルベースDNのサブノードではありません", + "Login filter does not contain %s placeholder." : "ログインフィルタに%sプレースホルダが含まれていません。", "Please login with the new password" : "新しいパスワードでログインしてください", "LDAP User backend" : "LDAPユーザーバックエンド", "Your password will expire tomorrow." : "パスワードが明日期限切れになります。", "Your password will expire today." : "パスワードが今日期限切れになります。", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["パスワードがあと %n日で期限切れになります。"], - "LDAP / AD integration" : "LDAP/AD統合", - "_%s group found_::_%s groups found_" : ["%s グループが見つかりました"], - "_%s user found_::_%s users found_" : ["%s ユーザーが見つかりました"], + "LDAP/AD integration" : "LDAP/AD統合", + "LDAP Connection" : "LDAP接続", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["%n 個のLDAP設定のバインディングに失敗しました: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["%n 個のLDAP設定の検索に失敗しました: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["非アクティブなLDAPコンフィギュレーションが%n個あります: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["バインディングと検索は、設定された%nのLDAP接続すべてで機能します(%s)"], + "Invalid LDAP UUIDs" : "無効な LDAP UUID", + "None found" : "該当なし", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAPアカウントまたはグループの無効なUUIDが見つかりました。LDAP設定のエキスパート部分にある \"Override UUID detection\" の設定を見直して、\"occ ldap:update-uuid\"を使ってアップデートしてください。", + "_%n group found_::_%n groups found_" : ["グループ%nが見つかりました "], + "> 1000 groups found" : "1000 以上のグループが見つかりました", + "> 1000 users found" : "1000 以上のユーザーが見つかりました", + "_%n user found_::_%n users found_" : ["ユーザー%n が見つかりました"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "ユーザー表示名の属性を検出できませんでした。詳細設定で対応する属性を指定してください。", "Could not find the desired feature" : "望ましい機能は見つかりませんでした", "Invalid Host" : "無効なホスト", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "フィルターは、どの LDAP グループが %s にアクセスするかを指定します。", "Verify settings and count the groups" : "設定を検証し、グループを数える", "When logging in, %s will find the user based on the following attributes:" : "ログイン時に、%s により次の属性からユーザーを見つけます:", - "LDAP / AD Username:" : "LDAP/ADユーザー名:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/ADユーザー名に対してログインが許可されています。\"uid\" か、\"sAMAccountName\" のどちらかが検出されました。", - "LDAP / AD Email Address:" : "LDAP/ADメールアドレス:", + "LDAP/AD Username:" : "LDAP/ADユーザー名:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/ADユーザー名に対してログインが許可されています。\"uid\" か、\"sAMAccountName\" のどちらかが検出されました。", + "LDAP/AD Email Address:" : "LDAP/ADメールアドレス:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "メール属性に対してログインが許可されています。\"mail\" と \"mailPrimaryAddress\" が利用可能です。", "Other Attributes:" : "その他の属性:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "ログイン実行時に適用するフィルターを定義します。uid \"%%\" にはログイン操作におけるユーザー名が入ります。例: \"uid=%%uid\"", "Test Loginname" : "テスト用ログイン名", + "Attempts to receive a DN for the given loginname and the current login filter" : "指定されたログイン名と現在のログインフィルタのDNを取得します", "Verify settings" : "設定のチェック", "%s. Server:" : "%s. サーバー:", "Add a new configuration" : "新しい設定を追加", @@ -149,6 +168,8 @@ "One User Base DN per line" : "1行に1つのユーザーベースDN", "User Search Attributes" : "ユーザー検索属性", "Optional; one attribute per line" : "オプション:1行に1属性", + "Disable users missing from LDAP" : "LDAPから消えたユーザーを無効にする", + "When switched on, users imported from LDAP which are then missing will be disabled" : "オンにすると、LDAPからインポートされたユーザーのうち欠落しているユーザーは無効になります。", "Group Display Name Field" : "グループ表示名のフィールド", "The LDAP attribute to use to generate the groups's display name." : "ユーザーのグループ表示名の生成に利用するLDAP属性", "Base Group Tree" : "ベースグループツリー", @@ -177,8 +198,31 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "ユーザー名は空のままにしてください(デフォルト)。それ以外の場合は、LDAP/AD属性を指定します。", "\"$home\" Placeholder Field" : "\"$home\" 属性設定", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "外部ストレージ設定の $home 変数には、指定した属性の値が入ります", + "User Profile Attributes" : "ユーザープロファイル属性", + "Phone Field" : "電話番号 フィールド", + "User profile Phone will be set from the specified attribute" : "ユーザープロファイルの電話番号は、指定された属性から設定されます。", + "Website Field" : "ウェブサイト フィールド", + "User profile Website will be set from the specified attribute" : "ユーザープロファイルのウェブサイトは、指定された属性から設定されます。", + "Address Field" : "住所 フィールド", + "User profile Address will be set from the specified attribute" : "ユーザープロファイルの住所は、指定された属性から設定されます。", + "Twitter Field" : "Twitter フィールド", + "User profile Twitter will be set from the specified attribute" : "ユーザープロファイルの Twitter は、指定された属性から設定されます。", + "Fediverse Field" : "Fediverse フィールド", + "User profile Fediverse will be set from the specified attribute" : "ユーザープロファイルの Fediverse は、指定された属性から設定されます。", + "Organisation Field" : "組織 フィールド", + "User profile Organisation will be set from the specified attribute" : "ユーザープロファイルの組織は、指定された属性から設定されます。", + "Role Field" : "役職 フィールド", + "User profile Role will be set from the specified attribute" : "ユーザープロファイルの役職は、指定された属性から設定されます。", + "Headline Field" : "ヘッドライン フィールド", + "User profile Headline will be set from the specified attribute" : "ユーザープロファイルのヘッドラインは、指定された属性から設定されます。", + "Biography Field" : "経歴 フィールド", + "User profile Biography will be set from the specified attribute" : "ユーザープロファイルの経歴は、指定された属性から設定されます。", + "Birthdate Field" : "誕生日フィールド", + "User profile Date of birth will be set from the specified attribute" : "生年月日のユーザープロフィールは、指定された属性から設定されます", + "Pronouns Field" : "代名詞フィールド", + "User profile Pronouns will be set from the specified attribute" : "ユーザープロファイルの代名詞は、指定された属性から設定されます", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "デフォルトでは、内部的なユーザー名がUUID属性から作成されます。これにより、ユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[ a-zA-Z0-9_.@- ] の文字のみが有効であるという制限があり、その他の文字は対応する ASCII コードに変換されるか単に無視されます。そのため、他のユーザー名との衝突の回数が増加するでしょう。内部ユーザー名は、内部的にユーザーを識別するために用いられ、また、Nextcloud におけるデフォルトのホームフォルダー名としても用いられます。例えば*DAVサービスのように、リモートURLの一部でもあります。この設定により、デフォルトの振る舞いを再定義します。ownCloud 5 以前と同じような振る舞いにするためには、以下のフィールドにユーザー表示名の属性を入力します。空にするとデフォルトの振る舞いとなります。変更は新しくマッピング(追加)されたLDAPユーザーにおいてのみ有効となります。", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "デフォルトでは、内部的なユーザー名がUUID属性から作成されます。これにより、ユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[ a-zA-Z0-9_.@- ] の文字のみが有効であるという制限があり、その他の文字は対応する ASCII コードに変換されるか単に無視されます。そのため、他のユーザー名との衝突の回数が増加するでしょう。内部ユーザー名は、内部的にユーザーを識別するために用いられ、また、Nextcloud におけるデフォルトのホームフォルダー名としても用いられます。例えば*DAVサービスのように、リモートURLの一部でもあります。この設定により、デフォルトの振る舞いを再定義します。これは、たとえばすべての* DAVサービスのリモートURLの一部でもあります。この設定を使用すると、デフォルトの動作を上書きできます。変更は、新しくマップされた(追加された)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." : "デフォルトでは、UUID 属性は自動的に検出されます。UUID属性は、LDAPユーザーとLDAPグループを間違いなく識別するために利用されます。また、もしこれを指定しない場合は、内部ユーザー名はUUIDに基づいて作成されます。この設定は再定義することができ、あなたの選択した属性を用いることができます。選択した属性がユーザーとグループの両方に対して適用でき、かつユニークであることを確認してください。空であればデフォルトの振る舞いとなります。変更は、新しくマッピング(追加)されたLDAPユーザーとLDAPグループに対してのみ有効となります。", @@ -187,6 +231,7 @@ "Username-LDAP User Mapping" : "ユーザー名とLDAPユーザーのマッピング", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "ユーザー名は、メタデータの保存と割り当てに使用されます。 ユーザーを正確に識別して認識するために、各LDAPユーザーには内部ユーザー名が割り当てられます。 これには、ユーザー名からLDAPユーザーへのマッピングが必要です。 作成されたユーザー名は、LDAPユーザーのUUIDにマップされます。 さらに、DNはLDAPインタラクションを減らすためにキャッシュされますが、識別には使用されません。 DNが変更された場合、変更が検出されます。 内部ユーザー名はいたるところで使用されます。 マッピングをクリアすると、どこに残っているか分かります。 マッピングの消去はコンフィギュレーションセンシティブではなく、すべてのLDAP構成に影響します。 本番環境のマッピングをクリアしないでください。テスト環境または実験段階でのみ実施してください。", "Clear Username-LDAP User Mapping" : "ユーザー名とLDAPユーザーのマッピングをクリアする", - "Clear Groupname-LDAP Group Mapping" : "グループ名とLDAPグループのマッピングをクリアする" + "Clear Groupname-LDAP Group Mapping" : "グループ名とLDAPグループのマッピングをクリアする", + "Invalid configuration. Please have a look at the logs for further details." : "設定が無効です。詳細はログを確認してください。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/jv.js b/apps/user_ldap/l10n/jv.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/jv.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/jv.json b/apps/user_ldap/l10n/jv.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/jv.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ka.js b/apps/user_ldap/l10n/ka.js new file mode 100644 index 00000000000..768c8ddd732 --- /dev/null +++ b/apps/user_ldap/l10n/ka.js @@ -0,0 +1,219 @@ +OC.L10N.register( + "user_ldap", + { + "Failed to clear the mappings." : "Failed to clear the mappings.", + "Failed to delete the server configuration" : "Failed to delete the server configuration", + "Invalid configuration: Anonymous binding is not allowed." : "Invalid configuration: Anonymous binding is not allowed.", + "Valid configuration, connection established!" : "Valid configuration, connection established!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Valid configuration, but binding failed. Please check the server settings and credentials.", + "No action specified" : "No action specified", + "No configuration specified" : "No configuration specified", + "No data specified" : "No data specified", + "Invalid data specified" : "Invalid data specified", + "Action does not exist" : "Action does not exist", + "Renewing …" : "Renewing …", + "Very weak password" : "Very weak password", + "Weak password" : "Weak password", + "So-so password" : "So-so password", + "Good password" : "Good password", + "Strong password" : "Strong password", + "The Base DN appears to be wrong" : "The Base DN appears to be wrong", + "Testing configuration…" : "Testing configuration…", + "Configuration incorrect" : "Configuration incorrect", + "Configuration incomplete" : "Configuration incomplete", + "Configuration OK" : "Configuration OK", + "Select groups" : "Select groups", + "Select object classes" : "Select object classes", + "Please check the credentials, they seem to be wrong." : "Please check the credentials, they seem to be wrong.", + "Please specify the port, it could not be auto-detected." : "Please specify the port, it could not be auto-detected.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN could not be auto-detected, please revise credentials, host and port.", + "Could not detect Base DN, please enter it manually." : "Could not detect Base DN, please enter it manually.", + "{nthServer}. Server" : "{nthServer}. Server", + "No object found in the given Base DN. Please revise." : "No object found in the given Base DN. Please revise.", + "More than 1,000 directory entries available." : "More than 1,000 directory entries available.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entry available within the provided Base DN","{objectsFound} entries available within the provided Base DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "An error occurred. Please check the Base DN, as well as connection settings and credentials.", + "Do you really want to delete the current Server Configuration?" : "Do you really want to delete the current Server Configuration?", + "Confirm Deletion" : "Confirm Deletion", + "Mappings cleared successfully!" : "Mappings cleared successfully!", + "Error while clearing the mappings." : "Error while clearing the mappings.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous bind is not allowed. Please provide a User DN and Password.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP Operations error. Anonymous bind might not be allowed.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Saving failed. Please make sure the database is in Operation. Reload before continuing.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?", + "Mode switch" : "Mode switch", + "Select attributes" : "Select attributes", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>", + "User found and settings verified." : "User found and settings verified.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in.", + "An unspecified error occurred. Please check log and settings." : "An unspecified error occurred. Please check log and settings.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "A connection error to LDAP/AD occurred. Please check host, port and credentials.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.", + "Please provide a login name to test against" : "Please provide a login name to test against", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "The group box was disabled, because the LDAP/AD server does not support memberOf.", + "Please login with the new password" : "Please login with the new password", + "LDAP User backend" : "LDAP User backend", + "Your password will expire tomorrow." : "Your password will expire tomorrow.", + "Your password will expire today." : "Your password will expire today.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Your password will expire within %n day.","Your password will expire within %n days."], + "LDAP/AD integration" : "LDAP/AD integration", + "Invalid LDAP UUIDs" : "Invalid LDAP UUIDs", + "None found" : "None found", + "_%n group found_::_%n groups found_" : ["%n group found","%n groups found"], + "> 1000 groups found" : "> 1000 groups found", + "> 1000 users found" : "> 1000 users found", + "_%n user found_::_%n users found_" : ["%n user found","%n users found"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings.", + "Could not find the desired feature" : "Could not find the desired feature", + "Invalid Host" : "Invalid Host", + "LDAP user and group backend" : "LDAP user and group backend", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "This application enables administrators to connect Nextcloud to an LDAP-based user directory.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation.", + "Test Configuration" : "Test Configuration", + "Help" : "Help", + "Groups meeting these criteria are available in %s:" : "Groups meeting these criteria are available in %s:", + "Only these object classes:" : "Only these object classes:", + "Only from these groups:" : "Only from these groups:", + "Search groups" : "Search groups", + "Available groups" : "Available groups", + "Selected groups" : "Selected groups", + "Edit LDAP Query" : "Edit LDAP Query", + "LDAP Filter:" : "LDAP Filter:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "The filter specifies which LDAP groups shall have access to the %s instance.", + "Verify settings and count the groups" : "Verify settings and count the groups", + "When logging in, %s will find the user based on the following attributes:" : "When logging in, %s will find the user based on the following attributes:", + "LDAP/AD Username:" : "LDAP/AD Username:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected.", + "LDAP/AD Email Address:" : "LDAP/AD Email Address:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed.", + "Other Attributes:" : "Other Attributes:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"", + "Test Loginname" : "Test Loginname", + "Attempts to receive a DN for the given loginname and the current login filter" : "Attempts to receive a DN for the given loginname and the current login filter", + "Verify settings" : "Verify settings", + "%s. Server:" : "%s. Server:", + "Add a new configuration" : "Add a new configuration", + "Copy current configuration into new directory binding" : "Copy current configuration into new directory binding", + "Delete the current configuration" : "Delete the current configuration", + "Host" : "Host", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "You can omit the protocol, unless you require SSL. If so, start with ldaps://", + "Port" : "Port", + "Detect Port" : "Detect Port", + "User DN" : "User 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." : "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.", + "Password" : "პაროლი", + "For anonymous access, leave DN and Password empty." : "For anonymous access, leave DN and Password empty.", + "Save Credentials" : "Save Credentials", + "One Base DN per line" : "One Base DN per line", + "You can specify Base DN for users and groups in the Advanced tab" : "You can specify Base DN for users and groups in the Advanced tab", + "Detect Base DN" : "Detect Base DN", + "Test Base DN" : "Test Base DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.", + "Manually enter LDAP filters (recommended for large directories)" : "Manually enter LDAP filters (recommended for large directories)", + "Listing and searching for users is constrained by these criteria:" : "Listing and searching for users is constrained by these criteria:", + "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." : "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.", + "The filter specifies which LDAP users shall have access to the %s instance." : "The filter specifies which LDAP users shall have access to the %s instance.", + "Verify settings and count users" : "Verify settings and count users", + "Saving" : "Saving", + "Back" : "Back", + "Continue" : "Continue", + "Please renew your password." : "Please renew your password.", + "An internal error occurred." : "An internal error occurred.", + "Please try again or contact your administrator." : "Please try again or contact your administrator.", + "Current password" : "Current password", + "New password" : "New password", + "Renew password" : "Renew password", + "Wrong password." : "Wrong password.", + "Cancel" : "Cancel", + "Server" : "Server", + "Users" : "Users", + "Login Attributes" : "Login Attributes", + "Groups" : "Groups", + "Expert" : "Expert", + "Advanced" : "Advanced", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.", + "Connection Settings" : "Connection Settings", + "Configuration Active" : "Configuration Active", + "When unchecked, this configuration will be skipped." : "When unchecked, this configuration will be skipped.", + "Backup (Replica) Host" : "Backup (Replica) Host", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Give an optional backup host. It must be a replica of the main LDAP/AD server.", + "Backup (Replica) Port" : "Backup (Replica) Port", + "Disable Main Server" : "Disable Main Server", + "Only connect to the replica server." : "Only connect to the replica server.", + "Turn off SSL certificate validation." : "Turn off SSL certificate validation.", + "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." : "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.", + "Cache Time-To-Live" : "Cache Time-To-Live", + "in seconds. A change empties the cache." : "in seconds. A change empties the cache.", + "Directory Settings" : "Directory Settings", + "User Display Name Field" : "User Display Name Field", + "The LDAP attribute to use to generate the user's display name." : "The LDAP attribute to use to generate the user's display name.", + "2nd User Display Name Field" : "2nd User Display Name Field", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.", + "Base User Tree" : "Base User Tree", + "One User Base DN per line" : "One User Base DN per line", + "User Search Attributes" : "User Search Attributes", + "Optional; one attribute per line" : "Optional; one attribute per line", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", + "Group Display Name Field" : "Group Display Name Field", + "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the groups's display name.", + "Base Group Tree" : "Base Group Tree", + "One Group Base DN per line" : "One Group Base DN per line", + "Group Search Attributes" : "Group Search Attributes", + "Group-Member association" : "Group-Member association", + "Dynamic Group Member URL" : "Dynamic Group Member URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)", + "Nested Groups" : "Nested Groups", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)", + "Paging chunksize" : "Paging chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)", + "Enable LDAP password changes per user" : "Enable LDAP password changes per user", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.", + "(New password is sent as plain text to LDAP)" : "(New password is sent as plain text to LDAP)", + "Default password policy DN" : "Default password policy DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.", + "Special Attributes" : "Special Attributes", + "Quota Field" : "Quota Field", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute.", + "Quota Default" : "Quota Default", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Override default quota for LDAP users who do not have a quota set in the Quota Field.", + "Email Field" : "Email Field", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Set the user's email from their LDAP attribute. Leave it empty for default behaviour.", + "User Home Folder Naming Rule" : "User Home Folder Naming Rule", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.", + "\"$home\" Placeholder Field" : "\"$home\" Placeholder Field", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in an external storage configuration will be replaced with the value of the specified attribute", + "User Profile Attributes" : "User Profile Attributes", + "Phone Field" : "Phone Field", + "User profile Phone will be set from the specified attribute" : "User profile Phone will be set from the specified attribute", + "Website Field" : "Website Field", + "User profile Website will be set from the specified attribute" : "User profile Website will be set from the specified attribute", + "Address Field" : "Address Field", + "User profile Address will be set from the specified attribute" : "User profile Address will be set from the specified attribute", + "Twitter Field" : "Twitter Field", + "User profile Twitter will be set from the specified attribute" : "User profile Twitter will be set from the specified attribute", + "Fediverse Field" : "Fediverse Field", + "User profile Fediverse will be set from the specified attribute" : "User profile Fediverse will be set from the specified attribute", + "Organisation Field" : "Organisation Field", + "User profile Organisation will be set from the specified attribute" : "User profile Organisation will be set from the specified attribute", + "Role Field" : "Role Field", + "User profile Role will be set from the specified attribute" : "User profile Role will be set from the specified attribute", + "Headline Field" : "Headline Field", + "User profile Headline will be set from the specified attribute" : "User profile Headline will be set from the specified attribute", + "Biography Field" : "Biography Field", + "User profile Biography will be set from the specified attribute" : "User profile Biography will be set from the specified attribute", + "Internal Username" : "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.", + "Internal Username Attribute:" : "Internal Username Attribute:", + "Override UUID detection" : "Override UUID detection", + "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." : "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.", + "UUID Attribute for Users:" : "UUID Attribute for Users:", + "UUID Attribute for Groups:" : "UUID Attribute for Groups:", + "Username-LDAP User Mapping" : "Username-LDAP User Mapping", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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.", + "Clear Username-LDAP User Mapping" : "Clear Username-LDAP User Mapping", + "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping", + "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details." +}, +"nplurals=2; plural=(n!=1);"); diff --git a/apps/user_ldap/l10n/ka.json b/apps/user_ldap/l10n/ka.json new file mode 100644 index 00000000000..bc1ae2d991c --- /dev/null +++ b/apps/user_ldap/l10n/ka.json @@ -0,0 +1,217 @@ +{ "translations": { + "Failed to clear the mappings." : "Failed to clear the mappings.", + "Failed to delete the server configuration" : "Failed to delete the server configuration", + "Invalid configuration: Anonymous binding is not allowed." : "Invalid configuration: Anonymous binding is not allowed.", + "Valid configuration, connection established!" : "Valid configuration, connection established!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Valid configuration, but binding failed. Please check the server settings and credentials.", + "No action specified" : "No action specified", + "No configuration specified" : "No configuration specified", + "No data specified" : "No data specified", + "Invalid data specified" : "Invalid data specified", + "Action does not exist" : "Action does not exist", + "Renewing …" : "Renewing …", + "Very weak password" : "Very weak password", + "Weak password" : "Weak password", + "So-so password" : "So-so password", + "Good password" : "Good password", + "Strong password" : "Strong password", + "The Base DN appears to be wrong" : "The Base DN appears to be wrong", + "Testing configuration…" : "Testing configuration…", + "Configuration incorrect" : "Configuration incorrect", + "Configuration incomplete" : "Configuration incomplete", + "Configuration OK" : "Configuration OK", + "Select groups" : "Select groups", + "Select object classes" : "Select object classes", + "Please check the credentials, they seem to be wrong." : "Please check the credentials, they seem to be wrong.", + "Please specify the port, it could not be auto-detected." : "Please specify the port, it could not be auto-detected.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN could not be auto-detected, please revise credentials, host and port.", + "Could not detect Base DN, please enter it manually." : "Could not detect Base DN, please enter it manually.", + "{nthServer}. Server" : "{nthServer}. Server", + "No object found in the given Base DN. Please revise." : "No object found in the given Base DN. Please revise.", + "More than 1,000 directory entries available." : "More than 1,000 directory entries available.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entry available within the provided Base DN","{objectsFound} entries available within the provided Base DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "An error occurred. Please check the Base DN, as well as connection settings and credentials.", + "Do you really want to delete the current Server Configuration?" : "Do you really want to delete the current Server Configuration?", + "Confirm Deletion" : "Confirm Deletion", + "Mappings cleared successfully!" : "Mappings cleared successfully!", + "Error while clearing the mappings." : "Error while clearing the mappings.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous bind is not allowed. Please provide a User DN and Password.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP Operations error. Anonymous bind might not be allowed.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Saving failed. Please make sure the database is in Operation. Reload before continuing.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?", + "Mode switch" : "Mode switch", + "Select attributes" : "Select attributes", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>", + "User found and settings verified." : "User found and settings verified.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in.", + "An unspecified error occurred. Please check log and settings." : "An unspecified error occurred. Please check log and settings.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "A connection error to LDAP/AD occurred. Please check host, port and credentials.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.", + "Please provide a login name to test against" : "Please provide a login name to test against", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "The group box was disabled, because the LDAP/AD server does not support memberOf.", + "Please login with the new password" : "Please login with the new password", + "LDAP User backend" : "LDAP User backend", + "Your password will expire tomorrow." : "Your password will expire tomorrow.", + "Your password will expire today." : "Your password will expire today.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Your password will expire within %n day.","Your password will expire within %n days."], + "LDAP/AD integration" : "LDAP/AD integration", + "Invalid LDAP UUIDs" : "Invalid LDAP UUIDs", + "None found" : "None found", + "_%n group found_::_%n groups found_" : ["%n group found","%n groups found"], + "> 1000 groups found" : "> 1000 groups found", + "> 1000 users found" : "> 1000 users found", + "_%n user found_::_%n users found_" : ["%n user found","%n users found"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings.", + "Could not find the desired feature" : "Could not find the desired feature", + "Invalid Host" : "Invalid Host", + "LDAP user and group backend" : "LDAP user and group backend", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "This application enables administrators to connect Nextcloud to an LDAP-based user directory.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation.", + "Test Configuration" : "Test Configuration", + "Help" : "Help", + "Groups meeting these criteria are available in %s:" : "Groups meeting these criteria are available in %s:", + "Only these object classes:" : "Only these object classes:", + "Only from these groups:" : "Only from these groups:", + "Search groups" : "Search groups", + "Available groups" : "Available groups", + "Selected groups" : "Selected groups", + "Edit LDAP Query" : "Edit LDAP Query", + "LDAP Filter:" : "LDAP Filter:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "The filter specifies which LDAP groups shall have access to the %s instance.", + "Verify settings and count the groups" : "Verify settings and count the groups", + "When logging in, %s will find the user based on the following attributes:" : "When logging in, %s will find the user based on the following attributes:", + "LDAP/AD Username:" : "LDAP/AD Username:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected.", + "LDAP/AD Email Address:" : "LDAP/AD Email Address:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed.", + "Other Attributes:" : "Other Attributes:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"", + "Test Loginname" : "Test Loginname", + "Attempts to receive a DN for the given loginname and the current login filter" : "Attempts to receive a DN for the given loginname and the current login filter", + "Verify settings" : "Verify settings", + "%s. Server:" : "%s. Server:", + "Add a new configuration" : "Add a new configuration", + "Copy current configuration into new directory binding" : "Copy current configuration into new directory binding", + "Delete the current configuration" : "Delete the current configuration", + "Host" : "Host", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "You can omit the protocol, unless you require SSL. If so, start with ldaps://", + "Port" : "Port", + "Detect Port" : "Detect Port", + "User DN" : "User 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." : "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.", + "Password" : "პაროლი", + "For anonymous access, leave DN and Password empty." : "For anonymous access, leave DN and Password empty.", + "Save Credentials" : "Save Credentials", + "One Base DN per line" : "One Base DN per line", + "You can specify Base DN for users and groups in the Advanced tab" : "You can specify Base DN for users and groups in the Advanced tab", + "Detect Base DN" : "Detect Base DN", + "Test Base DN" : "Test Base DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.", + "Manually enter LDAP filters (recommended for large directories)" : "Manually enter LDAP filters (recommended for large directories)", + "Listing and searching for users is constrained by these criteria:" : "Listing and searching for users is constrained by these criteria:", + "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." : "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.", + "The filter specifies which LDAP users shall have access to the %s instance." : "The filter specifies which LDAP users shall have access to the %s instance.", + "Verify settings and count users" : "Verify settings and count users", + "Saving" : "Saving", + "Back" : "Back", + "Continue" : "Continue", + "Please renew your password." : "Please renew your password.", + "An internal error occurred." : "An internal error occurred.", + "Please try again or contact your administrator." : "Please try again or contact your administrator.", + "Current password" : "Current password", + "New password" : "New password", + "Renew password" : "Renew password", + "Wrong password." : "Wrong password.", + "Cancel" : "Cancel", + "Server" : "Server", + "Users" : "Users", + "Login Attributes" : "Login Attributes", + "Groups" : "Groups", + "Expert" : "Expert", + "Advanced" : "Advanced", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.", + "Connection Settings" : "Connection Settings", + "Configuration Active" : "Configuration Active", + "When unchecked, this configuration will be skipped." : "When unchecked, this configuration will be skipped.", + "Backup (Replica) Host" : "Backup (Replica) Host", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Give an optional backup host. It must be a replica of the main LDAP/AD server.", + "Backup (Replica) Port" : "Backup (Replica) Port", + "Disable Main Server" : "Disable Main Server", + "Only connect to the replica server." : "Only connect to the replica server.", + "Turn off SSL certificate validation." : "Turn off SSL certificate validation.", + "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." : "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.", + "Cache Time-To-Live" : "Cache Time-To-Live", + "in seconds. A change empties the cache." : "in seconds. A change empties the cache.", + "Directory Settings" : "Directory Settings", + "User Display Name Field" : "User Display Name Field", + "The LDAP attribute to use to generate the user's display name." : "The LDAP attribute to use to generate the user's display name.", + "2nd User Display Name Field" : "2nd User Display Name Field", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.", + "Base User Tree" : "Base User Tree", + "One User Base DN per line" : "One User Base DN per line", + "User Search Attributes" : "User Search Attributes", + "Optional; one attribute per line" : "Optional; one attribute per line", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", + "Group Display Name Field" : "Group Display Name Field", + "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the groups's display name.", + "Base Group Tree" : "Base Group Tree", + "One Group Base DN per line" : "One Group Base DN per line", + "Group Search Attributes" : "Group Search Attributes", + "Group-Member association" : "Group-Member association", + "Dynamic Group Member URL" : "Dynamic Group Member URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)", + "Nested Groups" : "Nested Groups", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)", + "Paging chunksize" : "Paging chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)", + "Enable LDAP password changes per user" : "Enable LDAP password changes per user", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.", + "(New password is sent as plain text to LDAP)" : "(New password is sent as plain text to LDAP)", + "Default password policy DN" : "Default password policy DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.", + "Special Attributes" : "Special Attributes", + "Quota Field" : "Quota Field", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute.", + "Quota Default" : "Quota Default", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Override default quota for LDAP users who do not have a quota set in the Quota Field.", + "Email Field" : "Email Field", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Set the user's email from their LDAP attribute. Leave it empty for default behaviour.", + "User Home Folder Naming Rule" : "User Home Folder Naming Rule", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.", + "\"$home\" Placeholder Field" : "\"$home\" Placeholder Field", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in an external storage configuration will be replaced with the value of the specified attribute", + "User Profile Attributes" : "User Profile Attributes", + "Phone Field" : "Phone Field", + "User profile Phone will be set from the specified attribute" : "User profile Phone will be set from the specified attribute", + "Website Field" : "Website Field", + "User profile Website will be set from the specified attribute" : "User profile Website will be set from the specified attribute", + "Address Field" : "Address Field", + "User profile Address will be set from the specified attribute" : "User profile Address will be set from the specified attribute", + "Twitter Field" : "Twitter Field", + "User profile Twitter will be set from the specified attribute" : "User profile Twitter will be set from the specified attribute", + "Fediverse Field" : "Fediverse Field", + "User profile Fediverse will be set from the specified attribute" : "User profile Fediverse will be set from the specified attribute", + "Organisation Field" : "Organisation Field", + "User profile Organisation will be set from the specified attribute" : "User profile Organisation will be set from the specified attribute", + "Role Field" : "Role Field", + "User profile Role will be set from the specified attribute" : "User profile Role will be set from the specified attribute", + "Headline Field" : "Headline Field", + "User profile Headline will be set from the specified attribute" : "User profile Headline will be set from the specified attribute", + "Biography Field" : "Biography Field", + "User profile Biography will be set from the specified attribute" : "User profile Biography will be set from the specified attribute", + "Internal Username" : "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.", + "Internal Username Attribute:" : "Internal Username Attribute:", + "Override UUID detection" : "Override UUID detection", + "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." : "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.", + "UUID Attribute for Users:" : "UUID Attribute for Users:", + "UUID Attribute for Groups:" : "UUID Attribute for Groups:", + "Username-LDAP User Mapping" : "Username-LDAP User Mapping", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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.", + "Clear Username-LDAP User Mapping" : "Clear Username-LDAP User Mapping", + "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping", + "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details." +},"pluralForm" :"nplurals=2; plural=(n!=1);" +}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ka_GE.js b/apps/user_ldap/l10n/ka_GE.js index 76ac240cef1..80c4b8c791d 100644 --- a/apps/user_ldap/l10n/ka_GE.js +++ b/apps/user_ldap/l10n/ka_GE.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "არასწორი კონფიგურაცია: ანონიმური კავშირები არაა დაშვებული.", "Valid configuration, connection established!" : "სწორი კონფიგურაცია, კავშირი დამყარებულია!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "სწორი კონფიგურაცია, თუმცა მიბმა ვერ მოხერხდა. გთხოვთ შეამოწმოთ სერვერის კონფიგურაცია და უფლებამოსილებები.", - "Invalid configuration. Please have a look at the logs for further details." : "არასწორი კონფიგურაცია. დეტალებისთვის გთხოვთ გადახედოთ ლოგებს.", "No action specified" : "ქმედება არ იყო სპეციფირებული", "No configuration specified" : "კონფიგურაცია არ იყო სპეციფირებული", "No data specified" : "მონაცემები არ იყო სპეციფირებული", - " Could not set configuration %s" : "კონფიგურაციის %s დაყენება ვერ მოხერხდა", "Action does not exist" : "ქმედება არ არსებობს", "Renewing …" : "განხილვა …", "Very weak password" : "ძალიან სუსტი პაროლი", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "შეამოკლეთ საძიებო მნიშვნელობები, მან მოიცვა ბევრი მომხმარებელი, მხოლოდ პირველი მათგანი გაივლის ავტორიზაციას.", "An unspecified error occurred. Please check log and settings." : "გამოჩნდა არასპეციფირებული შეცდომა. გთხოვთ შეამოწმოთ ლოგი და პარამეტრები.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ძიების ფილტრი არასწორია, ეს შესაძლოა გამოეწვიათ ისეთ სინტაქსის პრობლემებს, როგორებიცაა გახსნილი და დახურული ფრჩხილების არაჯერადი რაოდენობა. გთხოვთ გადახედოთ.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD-სთან გამოჩნდა კავშირის პრობლემა, გთხოვთ შეამოწმოთ ჰოსტი, პორტი და უფლებამოსილებები.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "\"%u\" ადგილი არაა მითითებული. LDAP / AD პასუხის მოთხოვნისას, ის ჩანაცვლებულ იქნება ლოგინის სახელით.", "Please provide a login name to test against" : "ტესტისთვის გთხოვთ მიუთითოთ ლოგინის სახელი", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "ჯგუფის ყუთი გაითიშა, LDAP / AD სერვერს არ აქვს memberOf-ის მხარდაჭერა.", - "Password change rejected. Hint: " : "პაროლის ცვლილება უარყოფილ იქნა. მითითება:", "Please login with the new password" : "გთხოვთ გაიაროთ ავტორიზაცია ახალი პაროლით", "Your password will expire tomorrow." : "თქვენი პაროლი გაუქმდება ხვალ.", "Your password will expire today." : "თქვენი პაროლი გაუქმდება დღეს.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["თქვენი პაროლი გაუქმდება %n დღეში.","თქვენი პაროლი გაუქმდება %n დღეში."], - "LDAP / AD integration" : "LDAP / AD ინტეგრაცია", - "_%s group found_::_%s groups found_" : ["ნაპოვნა %s ჯგუფი","ნაპოვნა %s ჯგუფი"], - "_%s user found_::_%s users found_" : ["ნაპოვნია %s მომხმარებელი","ნაპოვნია %s მომხმარებელი"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "მომხმარებლის დისპლეის სახელის ატრიბუტის აღმოჩენა ვერ მოხერხდა. გთხოვთ LDAP-ის პარამეტრებში თქვენით დააყენოთ ის.", "Could not find the desired feature" : "მოთხოვნილი ფუნქციონალის პოვნა ვერ მოხერხდა", "Invalid Host" : "არასწორი ჰოსტი", @@ -77,9 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "ფილტრი აზუსტებს თუ რომელ LDAP ჯგუფებს ექნებათ წვდომა %s ინსტანციაზე.", "Verify settings and count the groups" : "დაამოწმეთ პარამეტრები და დათვალეთ ჯგუფები", "When logging in, %s will find the user based on the following attributes:" : "ავტორიზაციისას, %s იპოვის მოხმარებელს შემდეგი ატრიბუტების მიხედვით:", - "LDAP / AD Username:" : "LDAP / AD მომხმარებელი:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP / AD მომხმარებლზე იძლევა ავტორიზაციის უფლებას, მომხმარებელი ან \"uid\"-ია ან \"sAMAaccountName\", ის იქნება აღმოჩენილი.", - "LDAP / AD Email Address:" : "LDAP / AD ელ-ფოსტის მისამართი:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "ელ-ფოსტის ატრიბუტზე ავტორიზაციის ნების დართვა. დაშვებულია \"mail\" და \"mailPrimaryAddress\".", "Other Attributes:" : "სხვა ატრიბუტები:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "ავტორიზაციის მცდელობისას საზღვრავს მიღების ფილტრს. \"%%uid\" ავტორიზაციის ქმედებაში ანაცვლებს მომხმარებლის სახელს. მაგალითი: \"uid=%%uid\"", @@ -173,7 +161,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "დააყენეთ მომხმარებლის ელ-ფოსტის მისამართი მათი LDAP ატრიბუტიდან. საწყისი ქცევისთვის დატოვეთ ცარიელი.", "User Home Folder Naming Rule" : "მომხმარებლის Home დირექტორიის სახელების დარქმევის წესი", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "საწყისი კონფიგურაციით შიდა მომხმარებლის სახელი შეიქმნება UUID ატრიბუტისგან. ეს იძლევა გარანტიას, რომ მომხმარებლის სახელი იქნება უნიკალური და ნიშნების კონვერტაცია არ იქნება საჭირო. შიდა მომხმარებლის სახელს ააქვს შეზღუდვა, მხოლოდ ეს ნიშნებია დაშვებული: [ a-zA-Z0-9_.@- ]. სხვა ნიშნები ჩანაცვლებულია შესაბამისი ASCII ნიშნებით ან იშლებიან. უთანხმოებისას ხდება ციფრის დამატება/მომატება. შიდა მომხმარებლის სახელი გამოყენებულია მომხმარებლის შიდა იდენტიფიკაციისთვის. ის ასევე მომხმარებლის სახლის დირექტორიის საწყისი სახელია. აგრეთვე ის ნაწილია დისტანციური URL-ების, მაგალითად ყველა *DAV სერვისისთვის. ამ პარამეტრით, საწყისი ქცევის ფორმა შეიძლება შეიცვალოს. საწყისი ქცევის ფორმისთვის დატოვეთ ცარიელი. ცვილებებს გავლენა ექნებათ მხოლოდ ახლად მიბმულ (დამატებულ) 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." : "საწყისი პარამეტრით, UUID ატრიბუტი ავტომატურად დგინდება. UUID ატრიბუტი გამოიყენება LDAP-ის მომხმარებლების და ჯგუფების ეჭვგარეშე ამოცნობისთვის. იმ შემთხვევაში თუ არაა სპეციფირებული, შიდა მომხმარებელი ასევე შეიქმნება UUID-იდან გამომდინარე. შეგიძლიათ ამ პარამეტრის შეცვლა და სასურველი ატრიბუტის მითითება. აუცილებელია დარწმუნეთ, რომ თქვენი არჩეული ატრიბუტი მიიღცევა ჯგუფებისთვისაც და მომხმარებლებისთვისაც და უნიკალურია. საწყისი ქცევის ფორმისთვის დატოვეთ ცარიელი. ცვილებებს გავლენა ექნებათ მხოლოდ ახლად მიბმულ (დამატებულ) LDAP მომხმარებლებზე და ჯგუფებზე.", @@ -181,6 +168,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "UUID ატრიბუტი ჯგუფებისთვის:", "Username-LDAP User Mapping" : "Username-LDAP მომხმარებლის ბმები", "Clear Username-LDAP User Mapping" : "Username-LDAP მომხმარებლის ბმების გასუფთავება", - "Clear Groupname-LDAP Group Mapping" : "Groupname-LDAP ჯგუფის ბმების გასუფთავება" + "Clear Groupname-LDAP Group Mapping" : "Groupname-LDAP ჯგუფის ბმების გასუფთავება", + "Invalid configuration. Please have a look at the logs for further details." : "არასწორი კონფიგურაცია. დეტალებისთვის გთხოვთ გადახედოთ ლოგებს." }, "nplurals=2; plural=(n!=1);"); diff --git a/apps/user_ldap/l10n/ka_GE.json b/apps/user_ldap/l10n/ka_GE.json index ec0a48e5a0f..caef3b06b29 100644 --- a/apps/user_ldap/l10n/ka_GE.json +++ b/apps/user_ldap/l10n/ka_GE.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "არასწორი კონფიგურაცია: ანონიმური კავშირები არაა დაშვებული.", "Valid configuration, connection established!" : "სწორი კონფიგურაცია, კავშირი დამყარებულია!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "სწორი კონფიგურაცია, თუმცა მიბმა ვერ მოხერხდა. გთხოვთ შეამოწმოთ სერვერის კონფიგურაცია და უფლებამოსილებები.", - "Invalid configuration. Please have a look at the logs for further details." : "არასწორი კონფიგურაცია. დეტალებისთვის გთხოვთ გადახედოთ ლოგებს.", "No action specified" : "ქმედება არ იყო სპეციფირებული", "No configuration specified" : "კონფიგურაცია არ იყო სპეციფირებული", "No data specified" : "მონაცემები არ იყო სპეციფირებული", - " Could not set configuration %s" : "კონფიგურაციის %s დაყენება ვერ მოხერხდა", "Action does not exist" : "ქმედება არ არსებობს", "Renewing …" : "განხილვა …", "Very weak password" : "ძალიან სუსტი პაროლი", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "შეამოკლეთ საძიებო მნიშვნელობები, მან მოიცვა ბევრი მომხმარებელი, მხოლოდ პირველი მათგანი გაივლის ავტორიზაციას.", "An unspecified error occurred. Please check log and settings." : "გამოჩნდა არასპეციფირებული შეცდომა. გთხოვთ შეამოწმოთ ლოგი და პარამეტრები.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ძიების ფილტრი არასწორია, ეს შესაძლოა გამოეწვიათ ისეთ სინტაქსის პრობლემებს, როგორებიცაა გახსნილი და დახურული ფრჩხილების არაჯერადი რაოდენობა. გთხოვთ გადახედოთ.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD-სთან გამოჩნდა კავშირის პრობლემა, გთხოვთ შეამოწმოთ ჰოსტი, პორტი და უფლებამოსილებები.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "\"%u\" ადგილი არაა მითითებული. LDAP / AD პასუხის მოთხოვნისას, ის ჩანაცვლებულ იქნება ლოგინის სახელით.", "Please provide a login name to test against" : "ტესტისთვის გთხოვთ მიუთითოთ ლოგინის სახელი", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "ჯგუფის ყუთი გაითიშა, LDAP / AD სერვერს არ აქვს memberOf-ის მხარდაჭერა.", - "Password change rejected. Hint: " : "პაროლის ცვლილება უარყოფილ იქნა. მითითება:", "Please login with the new password" : "გთხოვთ გაიაროთ ავტორიზაცია ახალი პაროლით", "Your password will expire tomorrow." : "თქვენი პაროლი გაუქმდება ხვალ.", "Your password will expire today." : "თქვენი პაროლი გაუქმდება დღეს.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["თქვენი პაროლი გაუქმდება %n დღეში.","თქვენი პაროლი გაუქმდება %n დღეში."], - "LDAP / AD integration" : "LDAP / AD ინტეგრაცია", - "_%s group found_::_%s groups found_" : ["ნაპოვნა %s ჯგუფი","ნაპოვნა %s ჯგუფი"], - "_%s user found_::_%s users found_" : ["ნაპოვნია %s მომხმარებელი","ნაპოვნია %s მომხმარებელი"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "მომხმარებლის დისპლეის სახელის ატრიბუტის აღმოჩენა ვერ მოხერხდა. გთხოვთ LDAP-ის პარამეტრებში თქვენით დააყენოთ ის.", "Could not find the desired feature" : "მოთხოვნილი ფუნქციონალის პოვნა ვერ მოხერხდა", "Invalid Host" : "არასწორი ჰოსტი", @@ -75,9 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "ფილტრი აზუსტებს თუ რომელ LDAP ჯგუფებს ექნებათ წვდომა %s ინსტანციაზე.", "Verify settings and count the groups" : "დაამოწმეთ პარამეტრები და დათვალეთ ჯგუფები", "When logging in, %s will find the user based on the following attributes:" : "ავტორიზაციისას, %s იპოვის მოხმარებელს შემდეგი ატრიბუტების მიხედვით:", - "LDAP / AD Username:" : "LDAP / AD მომხმარებელი:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP / AD მომხმარებლზე იძლევა ავტორიზაციის უფლებას, მომხმარებელი ან \"uid\"-ია ან \"sAMAaccountName\", ის იქნება აღმოჩენილი.", - "LDAP / AD Email Address:" : "LDAP / AD ელ-ფოსტის მისამართი:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "ელ-ფოსტის ატრიბუტზე ავტორიზაციის ნების დართვა. დაშვებულია \"mail\" და \"mailPrimaryAddress\".", "Other Attributes:" : "სხვა ატრიბუტები:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "ავტორიზაციის მცდელობისას საზღვრავს მიღების ფილტრს. \"%%uid\" ავტორიზაციის ქმედებაში ანაცვლებს მომხმარებლის სახელს. მაგალითი: \"uid=%%uid\"", @@ -171,7 +159,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "დააყენეთ მომხმარებლის ელ-ფოსტის მისამართი მათი LDAP ატრიბუტიდან. საწყისი ქცევისთვის დატოვეთ ცარიელი.", "User Home Folder Naming Rule" : "მომხმარებლის Home დირექტორიის სახელების დარქმევის წესი", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "საწყისი კონფიგურაციით შიდა მომხმარებლის სახელი შეიქმნება UUID ატრიბუტისგან. ეს იძლევა გარანტიას, რომ მომხმარებლის სახელი იქნება უნიკალური და ნიშნების კონვერტაცია არ იქნება საჭირო. შიდა მომხმარებლის სახელს ააქვს შეზღუდვა, მხოლოდ ეს ნიშნებია დაშვებული: [ a-zA-Z0-9_.@- ]. სხვა ნიშნები ჩანაცვლებულია შესაბამისი ASCII ნიშნებით ან იშლებიან. უთანხმოებისას ხდება ციფრის დამატება/მომატება. შიდა მომხმარებლის სახელი გამოყენებულია მომხმარებლის შიდა იდენტიფიკაციისთვის. ის ასევე მომხმარებლის სახლის დირექტორიის საწყისი სახელია. აგრეთვე ის ნაწილია დისტანციური URL-ების, მაგალითად ყველა *DAV სერვისისთვის. ამ პარამეტრით, საწყისი ქცევის ფორმა შეიძლება შეიცვალოს. საწყისი ქცევის ფორმისთვის დატოვეთ ცარიელი. ცვილებებს გავლენა ექნებათ მხოლოდ ახლად მიბმულ (დამატებულ) 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." : "საწყისი პარამეტრით, UUID ატრიბუტი ავტომატურად დგინდება. UUID ატრიბუტი გამოიყენება LDAP-ის მომხმარებლების და ჯგუფების ეჭვგარეშე ამოცნობისთვის. იმ შემთხვევაში თუ არაა სპეციფირებული, შიდა მომხმარებელი ასევე შეიქმნება UUID-იდან გამომდინარე. შეგიძლიათ ამ პარამეტრის შეცვლა და სასურველი ატრიბუტის მითითება. აუცილებელია დარწმუნეთ, რომ თქვენი არჩეული ატრიბუტი მიიღცევა ჯგუფებისთვისაც და მომხმარებლებისთვისაც და უნიკალურია. საწყისი ქცევის ფორმისთვის დატოვეთ ცარიელი. ცვილებებს გავლენა ექნებათ მხოლოდ ახლად მიბმულ (დამატებულ) LDAP მომხმარებლებზე და ჯგუფებზე.", @@ -179,6 +166,7 @@ "UUID Attribute for Groups:" : "UUID ატრიბუტი ჯგუფებისთვის:", "Username-LDAP User Mapping" : "Username-LDAP მომხმარებლის ბმები", "Clear Username-LDAP User Mapping" : "Username-LDAP მომხმარებლის ბმების გასუფთავება", - "Clear Groupname-LDAP Group Mapping" : "Groupname-LDAP ჯგუფის ბმების გასუფთავება" + "Clear Groupname-LDAP Group Mapping" : "Groupname-LDAP ჯგუფის ბმების გასუფთავება", + "Invalid configuration. Please have a look at the logs for further details." : "არასწორი კონფიგურაცია. დეტალებისთვის გთხოვთ გადახედოთ ლოგებს." },"pluralForm" :"nplurals=2; plural=(n!=1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/km.js b/apps/user_ldap/l10n/km.js deleted file mode 100644 index a42ee7b14f1..00000000000 --- a/apps/user_ldap/l10n/km.js +++ /dev/null @@ -1,17 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to delete the server configuration" : "លុបការកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនបម្រើ មិនបានសម្រេច", - "Do you really want to delete the current Server Configuration?" : "តើអ្នកពិតជាចង់លុបការកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនបម្រើបច្ចុប្បន្នមែនទេ?", - "Confirm Deletion" : "បញ្ជាក់ការលុប", - "Users" : "អ្នកប្រើ", - "Groups" : "ក្រុ", - "Help" : "ជំនួយ", - "Host" : "ម៉ាស៊ីនផ្ទុក", - "Port" : "ច្រក", - "Password" : "ពាក្យសម្ងាត់", - "Back" : "ត្រឡប់ក្រោយ", - "Continue" : "បន្ត", - "Advanced" : "កម្រិតខ្ពស់" -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/km.json b/apps/user_ldap/l10n/km.json deleted file mode 100644 index 5c8ec8897ba..00000000000 --- a/apps/user_ldap/l10n/km.json +++ /dev/null @@ -1,15 +0,0 @@ -{ "translations": { - "Failed to delete the server configuration" : "លុបការកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនបម្រើ មិនបានសម្រេច", - "Do you really want to delete the current Server Configuration?" : "តើអ្នកពិតជាចង់លុបការកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនបម្រើបច្ចុប្បន្នមែនទេ?", - "Confirm Deletion" : "បញ្ជាក់ការលុប", - "Users" : "អ្នកប្រើ", - "Groups" : "ក្រុ", - "Help" : "ជំនួយ", - "Host" : "ម៉ាស៊ីនផ្ទុក", - "Port" : "ច្រក", - "Password" : "ពាក្យសម្ងាត់", - "Back" : "ត្រឡប់ក្រោយ", - "Continue" : "បន្ត", - "Advanced" : "កម្រិតខ្ពស់" -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/kn.js b/apps/user_ldap/l10n/kn.js deleted file mode 100644 index f70fc699983..00000000000 --- a/apps/user_ldap/l10n/kn.js +++ /dev/null @@ -1,12 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "ಬಳಕೆದಾರರು", - "Groups" : "ಗುಂಪುಗಳು", - "Help" : "ಸಹಾಯ", - "Host" : "ಅತಿಥೆಯ-ಗಣಕ", - "Port" : "ರೇವು", - "Password" : "ಗುಪ್ತ ಪದ", - "Continue" : "ಮುಂದುವರಿಸಿ" -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/kn.json b/apps/user_ldap/l10n/kn.json deleted file mode 100644 index 39705ffba6a..00000000000 --- a/apps/user_ldap/l10n/kn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "translations": { - "Users" : "ಬಳಕೆದಾರರು", - "Groups" : "ಗುಂಪುಗಳು", - "Help" : "ಸಹಾಯ", - "Host" : "ಅತಿಥೆಯ-ಗಣಕ", - "Port" : "ರೇವು", - "Password" : "ಗುಪ್ತ ಪದ", - "Continue" : "ಮುಂದುವರಿಸಿ" -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ko.js b/apps/user_ldap/l10n/ko.js index ec42c72ee84..3081e8b2e5c 100644 --- a/apps/user_ldap/l10n/ko.js +++ b/apps/user_ldap/l10n/ko.js @@ -6,11 +6,10 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "설정 잘못됨: 익명 바인딩이 허용되지 않습니다.", "Valid configuration, connection established!" : "설정 올바름, 연결되었습니다!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "설정이 올바르지만 바인딩이 실패했습니다. 서버 설정과 인증 정보를 확인하십시오.", - "Invalid configuration. Please have a look at the logs for further details." : "설정이 잘못되었습니다. 더 자세한 정보를 보려면 로그를 참조하십시오.", "No action specified" : "동작이 지정되지 않음", "No configuration specified" : "설정이 지정되지 않음", "No data specified" : "데이터가 지정되지 않음", - " Could not set configuration %s" : " 설정 %s을(를) 지정할 수 없음", + "Invalid data specified" : "잘못된 데이터가 특정됨", "Action does not exist" : "동작이 존재하지 않음", "Renewing …" : "갱신 중 …", "Very weak password" : "매우 약한 암호", @@ -49,18 +48,22 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "검색 범위를 좁히십시오. 현재 설정으로 여러 사용자가 검색되었으며, 최초의 사용자만 로그인할 수 있습니다.", "An unspecified error occurred. Please check log and settings." : "지정하지 않은 오류가 발생했습니다. 로그와 설정을 확인하십시오.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "검색 필터가 잘못되었습니다. 열고 닫는 괄호 쌍이 맞지 않을 수도 있습니다. 확인 후 수정하십시오.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/AD 연결 오류가 발생했습니다. 호스트, 포트, 인증 정보를 확인하십시오.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "\"%uid\" 자리 비움자가 없습니다. LDAP/AD에 조회할 때 로그인 이름으로 대체됩니다.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP/AD 연결 오류가 발생했습니다. 호스트, 포트, 인증 정보를 확인하십시오.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "%uid 자리 비움자가 존재하지 않습니다. LDAP/AD에 조회할 때 로그인 사용자 이름으로 대체됩니다.", "Please provide a login name to test against" : "테스트할 로그인 사용자 이름을 입력하십시오", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP/AD 서버에서 memberOf를 지원하지 않아서 그룹 상자를 비활성화합니다.", - "Password change rejected. Hint: " : "암호 변경이 거부되었습니다. 힌트:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "LDAP/AD 서버에서 memberOf를 지원하지 않아서 그룹 상자를 비활성화합니다.", "Please login with the new password" : "새 암호로 로그인하십시오", + "LDAP User backend" : "사용자 백엔드", "Your password will expire tomorrow." : "내 암호가 내일 만료됩니다.", "Your password will expire today." : "내 암호가 오늘 만료됩니다.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["내 암호가 %n일 후 만료됩니다."], - "LDAP / AD integration" : "LDAP/AD 통합", - "_%s group found_::_%s groups found_" : ["그룹 %s개 찾음"], - "_%s user found_::_%s users found_" : ["사용자 %s명 찾음"], + "LDAP/AD integration" : "LDAP/AD 통합", + "Invalid LDAP UUIDs" : "잘못된 LDAP UUID", + "None found" : "아무것도 찾지 못함", + "_%n group found_::_%n groups found_" : ["그룹 %n개 찾음"], + "> 1000 groups found" : "그룹 1000개 초과 찾음", + "> 1000 users found" : "사용자 1000명 초과 찾음", + "_%n user found_::_%n users found_" : ["%n명의 사용자 찾음"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "사용자 표시 이름 속성을 찾을 수 없습니다. 고급 LDAP 설정에서 직접 지정하십시오.", "Could not find the desired feature" : "필요한 기능을 찾을 수 없음", "Invalid Host" : "잘못된 호스트", @@ -79,9 +82,9 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "이 필터는 %s에 접근할 수 있는 LDAP 그룹을 설정합니다.", "Verify settings and count the groups" : "설정을 확인하고 그룹 개수 세기", "When logging in, %s will find the user based on the following attributes:" : "로그인할 때 %s에서 다음 속성을 기반으로 사용자를 찾습니다:", - "LDAP / AD Username:" : "LDAP/AD 사용자 이름:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/AD 사용자 이름으로 로그인하는 것을 허용합니다. \"uid\" 및 \"sAMAccountName\" 중 하나이며 자동으로 감지합니다.", - "LDAP / AD Email Address:" : "LDAP/AD 이메일 주소:", + "LDAP/AD Username:" : "LDAP/AD 사용자 이름:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/AD 사용자 아이디로 로그인하는 것을 허용합니다. \"uid\" 및 \"sAMAccountName\" 중 하나이며 자동으로 감지합니다.", + "LDAP/AD Email Address:" : "LDAP/AD 이메일 주소:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "이메일 속성으로 로그인하는 것을 허용합니다. \"mail\" 및 \"mailPrimaryAddress\"를 사용할 수 있습니다.", "Other Attributes:" : "기타 속성:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "로그인을 시도했을 때 적용할 필터를 지정합니다. \"%%uid\"는 로그인을 시도한 사용자 이름으로 대체됩니다. 예: \"uid=%%uid\"", @@ -149,6 +152,8 @@ OC.L10N.register( "One User Base DN per line" : "사용자 DN을 한 줄에 하나씩 입력하십시오", "User Search Attributes" : "사용자 검색 속성", "Optional; one attribute per line" : "추가적, 한 줄에 하나의 속성을 입력하십시오", + "Disable users missing from LDAP" : "LDAP에서 유실된 사용자 비활성화", + "When switched on, users imported from LDAP which are then missing will be disabled" : "이 옵션을 켜면 LDAP에서 불러온 사용자 중 유실된 계정이 비활성화될 것입니다", "Group Display Name Field" : "그룹의 표시 이름 필드", "The LDAP attribute to use to generate the groups's display name." : "그룹 표시 이름을 생성할 때 사용할 LDAP 속성입니다.", "Base Group Tree" : "기본 그룹 트리", @@ -174,16 +179,38 @@ OC.L10N.register( "Email Field" : "이메일 필드", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "LDAP 속성에서 사용자의 이메일을 설정합니다. 기본 행동을 사용하려면 비워 두십시오.", "User Home Folder Naming Rule" : "사용자 홈 폴더 이름 규칙", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "사용자 이름을 사용하려면 비워 두십시오(기본값). 기타 경우 LDAP/AD 속성을 지정하십시오.", "\"$home\" Placeholder Field" : "\"$home\" 자리 비움자 필드", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "외부 저장소 설정에서 $home이 지정된 속성의 값으로 대체됩니다", + "User Profile Attributes" : "사용자 프로필 속성", + "Phone Field" : "전화번호 필드", + "User profile Phone will be set from the specified attribute" : "사용자 프로필의 전화번호가 지정된 속성으로 설정됩니다", + "Website Field" : "웹사이트 필드", + "User profile Website will be set from the specified attribute" : "사용자 프로필의 웹사이트가 지정된 속성으로 설정됩니다", + "Address Field" : "주소 필드", + "User profile Address will be set from the specified attribute" : "사용자 프로필의 주소가 지정된 속성으로 설정됩니다", + "Twitter Field" : "Twitter 필드", + "User profile Twitter will be set from the specified attribute" : "사용자 프로필의 Twitter가 지정된 속성으로 설정됩니다", + "Fediverse Field" : "Fediverse 필드", + "User profile Fediverse will be set from the specified attribute" : "사용자 프로필의 Fediverse가 지정된 속성으로 설정됩니다", + "Organisation Field" : "조직 필드", + "User profile Organisation will be set from the specified attribute" : "사용자 프로필의 조직 필드가 지정된 속성으로 설정됩니다", + "Role Field" : "직책 필드", + "User profile Role will be set from the specified attribute" : "사용자 프로필의 직책이 지정된 속성으로 설정됩니다", + "Headline Field" : "표제 필드", + "User profile Headline will be set from the specified attribute" : "사용자 프로필의 표제가 지정된 속성으로 설정됩니다", + "Biography Field" : "소개문구 필드", + "User profile Biography will be set from the specified attribute" : "사용자 프로필의 소개문구가 지정된 속성으로 설정됩니다", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "기본적으로 내부 사용자 이름은 UUID 속성에서 생성됩니다. 이를 통해서 사용자 이름이 유일하며 문자를 변환할 필요가 없도록 합니다. 내부 사용자 이름에는 다음 글자만 사용할 수 있습니다: [a-zA-Z0-9_.@-] 다른 모든 글자는 ASCII에 해당하는 글자로 대체되거나 생략됩니다. 충돌이 발생할 경우 숫자가 추가로 붙거나 증가합니다. 내부 사용자 이름은 사용자를 내부에서 식별하는 데에도 사용되며, 사용자 홈 폴더의 기본 이름입니다. 모든 *DAV 서비스 등에 사용되는 URL의 일부이기도 합니다. 이 설정을 사용하면 기본 행동을 사용자 정의할 수 있으며, 비워 두면 기본값을 사용합니다. 변경 사항은 새로 매핑 및 추가된 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." : "기본적으로 UUID 속성은 자동적으로 감지됩니다. 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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "사용자 이름은 메타데이터를 저장하고 할당하는 데 사용됩니다. 사용자를 정확히 식별하기 위해서 모든 LDAP 사용자는 내부 사용자 이름을 갖고 있습니다. 이 정보에 접근하려면 사용자 이름과 LDAP 사용자 사이의 연결을 알아야 합니다. 생성된 사용자 이름은 LDAP 사용자의 UUID에 연결됩니다. LDAP에 연결하는 횟수를 줄이기 위하여 DN을 캐시에 저장하지만, 식별에는 사용하지 않습니다. DN이 변경되었을 때 변경 사항이 적용됩니다. 내부 사용자 이름은 항상 사용됩니다. 매핑을 비우면 과거 매핑의 흔적이 남습니다. 매핑을 비우는 것은 설정에 관계 없이 적용되므로 모든 LDAP 설정에 영향을 줍니다! 테스트 및 실험 단계에서만 매핑을 비우고, 상용 환경에서는 매핑을 비우지 마십시오.", "Clear Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑 비우기", - "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기" + "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기", + "Invalid configuration. Please have a look at the logs for further details." : "설정이 잘못되었습니다. 더 자세한 정보를 보려면 로그를 참조하십시오." }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/ko.json b/apps/user_ldap/l10n/ko.json index f709382fb9a..7f19afbeea7 100644 --- a/apps/user_ldap/l10n/ko.json +++ b/apps/user_ldap/l10n/ko.json @@ -4,11 +4,10 @@ "Invalid configuration: Anonymous binding is not allowed." : "설정 잘못됨: 익명 바인딩이 허용되지 않습니다.", "Valid configuration, connection established!" : "설정 올바름, 연결되었습니다!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "설정이 올바르지만 바인딩이 실패했습니다. 서버 설정과 인증 정보를 확인하십시오.", - "Invalid configuration. Please have a look at the logs for further details." : "설정이 잘못되었습니다. 더 자세한 정보를 보려면 로그를 참조하십시오.", "No action specified" : "동작이 지정되지 않음", "No configuration specified" : "설정이 지정되지 않음", "No data specified" : "데이터가 지정되지 않음", - " Could not set configuration %s" : " 설정 %s을(를) 지정할 수 없음", + "Invalid data specified" : "잘못된 데이터가 특정됨", "Action does not exist" : "동작이 존재하지 않음", "Renewing …" : "갱신 중 …", "Very weak password" : "매우 약한 암호", @@ -47,18 +46,22 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "검색 범위를 좁히십시오. 현재 설정으로 여러 사용자가 검색되었으며, 최초의 사용자만 로그인할 수 있습니다.", "An unspecified error occurred. Please check log and settings." : "지정하지 않은 오류가 발생했습니다. 로그와 설정을 확인하십시오.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "검색 필터가 잘못되었습니다. 열고 닫는 괄호 쌍이 맞지 않을 수도 있습니다. 확인 후 수정하십시오.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/AD 연결 오류가 발생했습니다. 호스트, 포트, 인증 정보를 확인하십시오.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "\"%uid\" 자리 비움자가 없습니다. LDAP/AD에 조회할 때 로그인 이름으로 대체됩니다.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP/AD 연결 오류가 발생했습니다. 호스트, 포트, 인증 정보를 확인하십시오.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "%uid 자리 비움자가 존재하지 않습니다. LDAP/AD에 조회할 때 로그인 사용자 이름으로 대체됩니다.", "Please provide a login name to test against" : "테스트할 로그인 사용자 이름을 입력하십시오", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP/AD 서버에서 memberOf를 지원하지 않아서 그룹 상자를 비활성화합니다.", - "Password change rejected. Hint: " : "암호 변경이 거부되었습니다. 힌트:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "LDAP/AD 서버에서 memberOf를 지원하지 않아서 그룹 상자를 비활성화합니다.", "Please login with the new password" : "새 암호로 로그인하십시오", + "LDAP User backend" : "사용자 백엔드", "Your password will expire tomorrow." : "내 암호가 내일 만료됩니다.", "Your password will expire today." : "내 암호가 오늘 만료됩니다.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["내 암호가 %n일 후 만료됩니다."], - "LDAP / AD integration" : "LDAP/AD 통합", - "_%s group found_::_%s groups found_" : ["그룹 %s개 찾음"], - "_%s user found_::_%s users found_" : ["사용자 %s명 찾음"], + "LDAP/AD integration" : "LDAP/AD 통합", + "Invalid LDAP UUIDs" : "잘못된 LDAP UUID", + "None found" : "아무것도 찾지 못함", + "_%n group found_::_%n groups found_" : ["그룹 %n개 찾음"], + "> 1000 groups found" : "그룹 1000개 초과 찾음", + "> 1000 users found" : "사용자 1000명 초과 찾음", + "_%n user found_::_%n users found_" : ["%n명의 사용자 찾음"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "사용자 표시 이름 속성을 찾을 수 없습니다. 고급 LDAP 설정에서 직접 지정하십시오.", "Could not find the desired feature" : "필요한 기능을 찾을 수 없음", "Invalid Host" : "잘못된 호스트", @@ -77,9 +80,9 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "이 필터는 %s에 접근할 수 있는 LDAP 그룹을 설정합니다.", "Verify settings and count the groups" : "설정을 확인하고 그룹 개수 세기", "When logging in, %s will find the user based on the following attributes:" : "로그인할 때 %s에서 다음 속성을 기반으로 사용자를 찾습니다:", - "LDAP / AD Username:" : "LDAP/AD 사용자 이름:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/AD 사용자 이름으로 로그인하는 것을 허용합니다. \"uid\" 및 \"sAMAccountName\" 중 하나이며 자동으로 감지합니다.", - "LDAP / AD Email Address:" : "LDAP/AD 이메일 주소:", + "LDAP/AD Username:" : "LDAP/AD 사용자 이름:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/AD 사용자 아이디로 로그인하는 것을 허용합니다. \"uid\" 및 \"sAMAccountName\" 중 하나이며 자동으로 감지합니다.", + "LDAP/AD Email Address:" : "LDAP/AD 이메일 주소:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "이메일 속성으로 로그인하는 것을 허용합니다. \"mail\" 및 \"mailPrimaryAddress\"를 사용할 수 있습니다.", "Other Attributes:" : "기타 속성:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "로그인을 시도했을 때 적용할 필터를 지정합니다. \"%%uid\"는 로그인을 시도한 사용자 이름으로 대체됩니다. 예: \"uid=%%uid\"", @@ -147,6 +150,8 @@ "One User Base DN per line" : "사용자 DN을 한 줄에 하나씩 입력하십시오", "User Search Attributes" : "사용자 검색 속성", "Optional; one attribute per line" : "추가적, 한 줄에 하나의 속성을 입력하십시오", + "Disable users missing from LDAP" : "LDAP에서 유실된 사용자 비활성화", + "When switched on, users imported from LDAP which are then missing will be disabled" : "이 옵션을 켜면 LDAP에서 불러온 사용자 중 유실된 계정이 비활성화될 것입니다", "Group Display Name Field" : "그룹의 표시 이름 필드", "The LDAP attribute to use to generate the groups's display name." : "그룹 표시 이름을 생성할 때 사용할 LDAP 속성입니다.", "Base Group Tree" : "기본 그룹 트리", @@ -172,16 +177,38 @@ "Email Field" : "이메일 필드", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "LDAP 속성에서 사용자의 이메일을 설정합니다. 기본 행동을 사용하려면 비워 두십시오.", "User Home Folder Naming Rule" : "사용자 홈 폴더 이름 규칙", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "사용자 이름을 사용하려면 비워 두십시오(기본값). 기타 경우 LDAP/AD 속성을 지정하십시오.", "\"$home\" Placeholder Field" : "\"$home\" 자리 비움자 필드", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "외부 저장소 설정에서 $home이 지정된 속성의 값으로 대체됩니다", + "User Profile Attributes" : "사용자 프로필 속성", + "Phone Field" : "전화번호 필드", + "User profile Phone will be set from the specified attribute" : "사용자 프로필의 전화번호가 지정된 속성으로 설정됩니다", + "Website Field" : "웹사이트 필드", + "User profile Website will be set from the specified attribute" : "사용자 프로필의 웹사이트가 지정된 속성으로 설정됩니다", + "Address Field" : "주소 필드", + "User profile Address will be set from the specified attribute" : "사용자 프로필의 주소가 지정된 속성으로 설정됩니다", + "Twitter Field" : "Twitter 필드", + "User profile Twitter will be set from the specified attribute" : "사용자 프로필의 Twitter가 지정된 속성으로 설정됩니다", + "Fediverse Field" : "Fediverse 필드", + "User profile Fediverse will be set from the specified attribute" : "사용자 프로필의 Fediverse가 지정된 속성으로 설정됩니다", + "Organisation Field" : "조직 필드", + "User profile Organisation will be set from the specified attribute" : "사용자 프로필의 조직 필드가 지정된 속성으로 설정됩니다", + "Role Field" : "직책 필드", + "User profile Role will be set from the specified attribute" : "사용자 프로필의 직책이 지정된 속성으로 설정됩니다", + "Headline Field" : "표제 필드", + "User profile Headline will be set from the specified attribute" : "사용자 프로필의 표제가 지정된 속성으로 설정됩니다", + "Biography Field" : "소개문구 필드", + "User profile Biography will be set from the specified attribute" : "사용자 프로필의 소개문구가 지정된 속성으로 설정됩니다", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "기본적으로 내부 사용자 이름은 UUID 속성에서 생성됩니다. 이를 통해서 사용자 이름이 유일하며 문자를 변환할 필요가 없도록 합니다. 내부 사용자 이름에는 다음 글자만 사용할 수 있습니다: [a-zA-Z0-9_.@-] 다른 모든 글자는 ASCII에 해당하는 글자로 대체되거나 생략됩니다. 충돌이 발생할 경우 숫자가 추가로 붙거나 증가합니다. 내부 사용자 이름은 사용자를 내부에서 식별하는 데에도 사용되며, 사용자 홈 폴더의 기본 이름입니다. 모든 *DAV 서비스 등에 사용되는 URL의 일부이기도 합니다. 이 설정을 사용하면 기본 행동을 사용자 정의할 수 있으며, 비워 두면 기본값을 사용합니다. 변경 사항은 새로 매핑 및 추가된 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." : "기본적으로 UUID 속성은 자동적으로 감지됩니다. 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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "사용자 이름은 메타데이터를 저장하고 할당하는 데 사용됩니다. 사용자를 정확히 식별하기 위해서 모든 LDAP 사용자는 내부 사용자 이름을 갖고 있습니다. 이 정보에 접근하려면 사용자 이름과 LDAP 사용자 사이의 연결을 알아야 합니다. 생성된 사용자 이름은 LDAP 사용자의 UUID에 연결됩니다. LDAP에 연결하는 횟수를 줄이기 위하여 DN을 캐시에 저장하지만, 식별에는 사용하지 않습니다. DN이 변경되었을 때 변경 사항이 적용됩니다. 내부 사용자 이름은 항상 사용됩니다. 매핑을 비우면 과거 매핑의 흔적이 남습니다. 매핑을 비우는 것은 설정에 관계 없이 적용되므로 모든 LDAP 설정에 영향을 줍니다! 테스트 및 실험 단계에서만 매핑을 비우고, 상용 환경에서는 매핑을 비우지 마십시오.", "Clear Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑 비우기", - "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기" + "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기", + "Invalid configuration. Please have a look at the logs for further details." : "설정이 잘못되었습니다. 더 자세한 정보를 보려면 로그를 참조하십시오." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ku_IQ.js b/apps/user_ldap/l10n/ku_IQ.js deleted file mode 100644 index 35a4747c8e1..00000000000 --- a/apps/user_ldap/l10n/ku_IQ.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "بهكارهێنهر", - "Help" : "یارمەتی", - "Password" : "وشەی تێپەربو", - "Advanced" : "ههڵبژاردنی پیشكهوتوو" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ku_IQ.json b/apps/user_ldap/l10n/ku_IQ.json deleted file mode 100644 index 0b776905a9a..00000000000 --- a/apps/user_ldap/l10n/ku_IQ.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "Users" : "بهكارهێنهر", - "Help" : "یارمەتی", - "Password" : "وشەی تێپەربو", - "Advanced" : "ههڵبژاردنی پیشكهوتوو" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/lb.js b/apps/user_ldap/l10n/lb.js deleted file mode 100644 index f62d2924488..00000000000 --- a/apps/user_ldap/l10n/lb.js +++ /dev/null @@ -1,51 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to delete the server configuration" : "D'Server-Konfiguratioun konnt net geläscht ginn", - "The configuration is invalid: anonymous bind is not allowed." : "Dës Konfiguratioun ass ongëlteg: eng anonym Bindung ass net erlaabt.", - "Action does not exist" : "Dës Aktioun gëtt et net", - "Testing configuration…" : "D'Konfiguratioun gëtt getest...", - "Configuration incorrect" : "D'Konfiguratioun ass net korrekt", - "Configuration incomplete" : "D'Konfiguratioun ass net komplett", - "Configuration OK" : "Konfiguratioun OK", - "Select groups" : "Wiel Gruppen äus", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "D'Späicheren huet net geklappt. W.e.g. géi sécher dass Datebank an der Operatioun ass. Lued nach emol éiers de weider fiers.", - "Select attributes" : "Wiel Attributer aus", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "De Benotzer konnt net fonnt ginn. W.e.g. kuck deng Login Attributer a Benotzernumm no. \n ", - "_%s group found_::_%s groups found_" : ["%s Grupp fonnt","%s Gruppe fonnt"], - "_%s user found_::_%s users found_" : ["%s Benotzer fonnt","%s Benotzere fonnt"], - "Could not find the desired feature" : "Déi gewënschte Funktioun konnt net fonnt ginn", - "Server" : "Server", - "Users" : "Benotzer", - "Groups" : "Gruppen", - "Test Configuration" : "Konfiguratiounstest", - "Help" : "Hëllef", - "Groups meeting these criteria are available in %s:" : "D'Gruppen, déi dës Critèren erfëllen sinn am %s:", - "Only these object classes:" : "Nëmmen des Klass vun Objeten:", - "Only from these groups:" : "Nëmme vun dëse Gruppen:", - "Search groups" : "Sich Gruppen", - "Available groups" : "Disponibel Gruppen", - "Selected groups" : "Ausgewielte Gruppen", - "Test Loginname" : "Test Benotzernumm", - "Verify settings" : "Astellungen iwwerpréiwen", - "1. Server" : "1. Server", - "%s. Server:" : "%s. Server", - "Delete the current configuration" : "Läsch déi aktuell Konfiguratioun", - "Host" : "Host", - "Port" : "Port", - "User DN" : "Benotzer DN", - "Password" : "Passwuert", - "Saving" : "Speicheren...", - "Back" : "Zeréck", - "Continue" : "Weider", - "Advanced" : "Erweidert", - "Connection Settings" : "D'Astellunge vun der Verbindung", - "Configuration Active" : "D'Konfiguratioun ass aktiv", - "When unchecked, this configuration will be skipped." : "Ouni Iwwerpréiwung wäert dës Konfiguratioun iwwergaange ginn.", - "Directory Settings" : "Dossier's Astellungen", - "in bytes" : "A Bytes", - "Email Field" : "Email Feld", - "Internal Username" : "Interne Benotzernumm", - "Internal Username Attribute:" : "Interne Benotzernumm Attribut:" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/lb.json b/apps/user_ldap/l10n/lb.json deleted file mode 100644 index e869a5821b1..00000000000 --- a/apps/user_ldap/l10n/lb.json +++ /dev/null @@ -1,49 +0,0 @@ -{ "translations": { - "Failed to delete the server configuration" : "D'Server-Konfiguratioun konnt net geläscht ginn", - "The configuration is invalid: anonymous bind is not allowed." : "Dës Konfiguratioun ass ongëlteg: eng anonym Bindung ass net erlaabt.", - "Action does not exist" : "Dës Aktioun gëtt et net", - "Testing configuration…" : "D'Konfiguratioun gëtt getest...", - "Configuration incorrect" : "D'Konfiguratioun ass net korrekt", - "Configuration incomplete" : "D'Konfiguratioun ass net komplett", - "Configuration OK" : "Konfiguratioun OK", - "Select groups" : "Wiel Gruppen äus", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "D'Späicheren huet net geklappt. W.e.g. géi sécher dass Datebank an der Operatioun ass. Lued nach emol éiers de weider fiers.", - "Select attributes" : "Wiel Attributer aus", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "De Benotzer konnt net fonnt ginn. W.e.g. kuck deng Login Attributer a Benotzernumm no. \n ", - "_%s group found_::_%s groups found_" : ["%s Grupp fonnt","%s Gruppe fonnt"], - "_%s user found_::_%s users found_" : ["%s Benotzer fonnt","%s Benotzere fonnt"], - "Could not find the desired feature" : "Déi gewënschte Funktioun konnt net fonnt ginn", - "Server" : "Server", - "Users" : "Benotzer", - "Groups" : "Gruppen", - "Test Configuration" : "Konfiguratiounstest", - "Help" : "Hëllef", - "Groups meeting these criteria are available in %s:" : "D'Gruppen, déi dës Critèren erfëllen sinn am %s:", - "Only these object classes:" : "Nëmmen des Klass vun Objeten:", - "Only from these groups:" : "Nëmme vun dëse Gruppen:", - "Search groups" : "Sich Gruppen", - "Available groups" : "Disponibel Gruppen", - "Selected groups" : "Ausgewielte Gruppen", - "Test Loginname" : "Test Benotzernumm", - "Verify settings" : "Astellungen iwwerpréiwen", - "1. Server" : "1. Server", - "%s. Server:" : "%s. Server", - "Delete the current configuration" : "Läsch déi aktuell Konfiguratioun", - "Host" : "Host", - "Port" : "Port", - "User DN" : "Benotzer DN", - "Password" : "Passwuert", - "Saving" : "Speicheren...", - "Back" : "Zeréck", - "Continue" : "Weider", - "Advanced" : "Erweidert", - "Connection Settings" : "D'Astellunge vun der Verbindung", - "Configuration Active" : "D'Konfiguratioun ass aktiv", - "When unchecked, this configuration will be skipped." : "Ouni Iwwerpréiwung wäert dës Konfiguratioun iwwergaange ginn.", - "Directory Settings" : "Dossier's Astellungen", - "in bytes" : "A Bytes", - "Email Field" : "Email Feld", - "Internal Username" : "Interne Benotzernumm", - "Internal Username Attribute:" : "Interne Benotzernumm Attribut:" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/lo.js b/apps/user_ldap/l10n/lo.js deleted file mode 100644 index 5494dcae62e..00000000000 --- a/apps/user_ldap/l10n/lo.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : [""], - "_%s user found_::_%s users found_" : [""] -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/lo.json b/apps/user_ldap/l10n/lo.json deleted file mode 100644 index 75f0f056cc4..00000000000 --- a/apps/user_ldap/l10n/lo.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : [""], - "_%s user found_::_%s users found_" : [""] -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/lt_LT.js b/apps/user_ldap/l10n/lt_LT.js index 2a8a3633529..9b5d942ba0e 100644 --- a/apps/user_ldap/l10n/lt_LT.js +++ b/apps/user_ldap/l10n/lt_LT.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Neteisinga konfigūracija: Anoniminis prisijungimas neleidžiamas.", "Valid configuration, connection established!" : "Konfigūracija teisinga, ryšys užmegztas!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfigūracija teisinga, bet prisijungimas nepavyko. Patikrinkite serverio nustatymus ir prisijungimo duomenis.", - "Invalid configuration. Please have a look at the logs for further details." : "Neteisinga konfigūracija. Išsamesnei informacijai, žiūrėkite žurnalus.", "No action specified" : "Nenurodytas veiksmas", "No configuration specified" : "Nenurodyta jokia konfigūracija", "No data specified" : "Nepateikta duomenų", - " Could not set configuration %s" : "Nepavyko nustatyti konfigūracijos %s", "Action does not exist" : "Veiksmo nėra", "Renewing …" : "Atnaujinama ...", "Very weak password" : "Labai silpnas slaptažodis", @@ -48,18 +46,12 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Apsvarstykite galimybę susiaurinti paiešką, nes ji apima daug naudotojų, ir tik pirmasis iš jų galės prisijungti.", "An unspecified error occurred. Please check log and settings." : "Įvyko nenustatyta klaida. Patikrinkite žurnalo įrašus ir nustatymus.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Paieškos filtras netinkamas, greičiausiai dėl sintaksės problemų, tokių kaip nevienodas atidarytų ir uždarų skliaustų skaičius. Prašome patikrinkite.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Įvyko sujungimo su LDAP/ AD klaida, patikrinkite serverį, prievadus ir prisijungimo duomenis.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Trūksta \"%u\" vietaženklio. Jis bus pakeistas prisijungimo vardu, siunčiant užklausas LDAP / AD. ", "Please provide a login name to test against" : "Pateikite prisijungimo vardą, kurį norite patikrinti", - "Password change rejected. Hint: " : "Slaptažodžio keitimas atmestas. Patarimas: ", "Please login with the new password" : "Prisijunkite naudodami naują slaptažodį", "LDAP User backend" : "LDAP naudotojo vidinė pusė", "Your password will expire tomorrow." : "Jūsų slaptažodžio galiojimo laikas pasibaigs rytoj.", "Your password will expire today." : "Jūsų slaptažodžio galiojimo laikas baigiasi šiandien.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Jūsų slaptažodis nustos galioti po %n dienos.","Jūsų slaptažodis nustos galioti po %n dienų.","Jūsų slaptažodis nustos galioti po %n dienų.","Jūsų slaptažodis nustos galioti po %n dienos."], - "LDAP / AD integration" : "LDAP / AD integracija", - "_%s group found_::_%s groups found_" : ["Rasta %s grupė","Rastos %s grupės","Rasta %s grupių","Rasta %s grupė"], - "_%s user found_::_%s users found_" : ["Rastas %s naudotojas","Rasti %s naudotojai","Rasta %s naudotojų","Rastas %s naudotojas"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nepavyko aptikti naudotojo rodomo vardo požymio. Nurodykite jį patys išplėstiniuose LDAP nustatymuose.", "Could not find the desired feature" : "Nepavyko rasti pageidaujamos ypatybės", "Invalid Host" : "Neteisingas serveris", @@ -77,8 +69,8 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtras nurodo, kurios LDAP grupės turi turėti prieigą prie %s", "Verify settings and count the groups" : "Patikrinkite nustatymus ir suskaičiuokite grupes", "When logging in, %s will find the user based on the following attributes:" : "Prisijungiant, %s suras naudotoją, remiantis šiais požymiais:", - "LDAP / AD Username:" : "LDAP / AD naudotojo vardas:", - "LDAP / AD Email Address:" : "LDAP / AD el. pašto adresas:", + "LDAP/AD Username:" : "LDAP/AD naudotojo vardas:", + "LDAP/AD Email Address:" : "LDAP/AD el. pašto adresas:", "Other Attributes:" : "Kiti požymiai:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Apibrėžia filtrą, kuris taikomas bandant prisijungti. \"%%uid\" pakeičia naudotojo vardą prisijungimo metu. Pavyzdys: \"uid=%%uid\"", "Test Loginname" : "Ištestuokite prisijungimo vardą", @@ -167,13 +159,13 @@ OC.L10N.register( "User Home Folder Naming Rule" : "Naudotojo namų aplanko pavadinimo taisyklė", "\"$home\" Placeholder Field" : "\"$home\" vietaženklio laukas", "Internal Username" : "Vidinis naudotojo vardas", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Pagal numatymą vidinis naudotojo vardas bus sukurtas iš UUID požymio. Tai užtikrina naudotojo vardo unikalumą ir tuo pačiu nereikia konvertuoti simbolių. Vidinis naudotojo vardas turi apribojimą, leidžiantį tik šiuos simbolius: [ a-zA-Z0-9 _. @ - ]. Kiti simboliai pakeičiami ASCII atitikmenimis arba tiesiog praleidžiami. Sutapimų konflikto atveju yra pridedamas/padidinamas skaičius. Vidinis naudotojo vardas yra naudojamas identifikuoti naudotoją viduje. Tai kartu yra numatytasis naudotojo aplanko pavadinimas. Taip pat jis yra nuotolinių URL dalimi, pavyzdžiui, visoms *DAV paslaugoms. Naudojant šį nustatymą, numatytoji elgsena gali būti nustelbta. Palikite tuščią, jei norite kad galiotų numatytoji elgsena. Pakeitimai įsigalios tik naujai priskirtiems (pridėtiems) LDAP naudotojams.", "Internal Username Attribute:" : "Vidinis naudotojo vardo požymis:", "Override UUID detection" : "Perrašyti UUID aptikimą", "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." : "Pagal numatymą, UUID požymis yra aptinkamas automatiškai. UUID požymis yra naudojamas neabejotinai identifikuoti LDAP naudotojus ir grupes. Be to, vidinis naudotojo vardas bus sukurtas remiantis UUID, jei nenurodyta kitaip. Jūs galite nustelbti nustatymą ir perduoti savo pasirinktą požymį. Turite įsitikinti, kad jūsų pasirinktą požymį gali gauti tiek naudotojai, tiek grupės ir, kad jis yra unikalus. Numatytajai elgsenai, palikite tuščią. Pakeitimai turės įtakos tik naujai susiejamiems (pridedamiems) LDAP naudotojams ir grupėms.", "UUID Attribute for Users:" : "UUID požymis naudotojams:", "UUID Attribute for Groups:" : "UUID požymis grupėms:", "Username-LDAP User Mapping" : "Naudotojo vardo - LDAP naudotojo sąsaja", - "Clear Username-LDAP User Mapping" : "Išvalyti naudotojo vardo - LDAP naudotojo sąsają" + "Clear Username-LDAP User Mapping" : "Išvalyti naudotojo vardo - LDAP naudotojo sąsają", + "Invalid configuration. Please have a look at the logs for further details." : "Neteisinga konfigūracija. Išsamesnei informacijai, žiūrėkite žurnalus." }, "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/apps/user_ldap/l10n/lt_LT.json b/apps/user_ldap/l10n/lt_LT.json index 26bc3ae1520..6eb4a8a3756 100644 --- a/apps/user_ldap/l10n/lt_LT.json +++ b/apps/user_ldap/l10n/lt_LT.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Neteisinga konfigūracija: Anoniminis prisijungimas neleidžiamas.", "Valid configuration, connection established!" : "Konfigūracija teisinga, ryšys užmegztas!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfigūracija teisinga, bet prisijungimas nepavyko. Patikrinkite serverio nustatymus ir prisijungimo duomenis.", - "Invalid configuration. Please have a look at the logs for further details." : "Neteisinga konfigūracija. Išsamesnei informacijai, žiūrėkite žurnalus.", "No action specified" : "Nenurodytas veiksmas", "No configuration specified" : "Nenurodyta jokia konfigūracija", "No data specified" : "Nepateikta duomenų", - " Could not set configuration %s" : "Nepavyko nustatyti konfigūracijos %s", "Action does not exist" : "Veiksmo nėra", "Renewing …" : "Atnaujinama ...", "Very weak password" : "Labai silpnas slaptažodis", @@ -46,18 +44,12 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Apsvarstykite galimybę susiaurinti paiešką, nes ji apima daug naudotojų, ir tik pirmasis iš jų galės prisijungti.", "An unspecified error occurred. Please check log and settings." : "Įvyko nenustatyta klaida. Patikrinkite žurnalo įrašus ir nustatymus.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Paieškos filtras netinkamas, greičiausiai dėl sintaksės problemų, tokių kaip nevienodas atidarytų ir uždarų skliaustų skaičius. Prašome patikrinkite.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Įvyko sujungimo su LDAP/ AD klaida, patikrinkite serverį, prievadus ir prisijungimo duomenis.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Trūksta \"%u\" vietaženklio. Jis bus pakeistas prisijungimo vardu, siunčiant užklausas LDAP / AD. ", "Please provide a login name to test against" : "Pateikite prisijungimo vardą, kurį norite patikrinti", - "Password change rejected. Hint: " : "Slaptažodžio keitimas atmestas. Patarimas: ", "Please login with the new password" : "Prisijunkite naudodami naują slaptažodį", "LDAP User backend" : "LDAP naudotojo vidinė pusė", "Your password will expire tomorrow." : "Jūsų slaptažodžio galiojimo laikas pasibaigs rytoj.", "Your password will expire today." : "Jūsų slaptažodžio galiojimo laikas baigiasi šiandien.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Jūsų slaptažodis nustos galioti po %n dienos.","Jūsų slaptažodis nustos galioti po %n dienų.","Jūsų slaptažodis nustos galioti po %n dienų.","Jūsų slaptažodis nustos galioti po %n dienos."], - "LDAP / AD integration" : "LDAP / AD integracija", - "_%s group found_::_%s groups found_" : ["Rasta %s grupė","Rastos %s grupės","Rasta %s grupių","Rasta %s grupė"], - "_%s user found_::_%s users found_" : ["Rastas %s naudotojas","Rasti %s naudotojai","Rasta %s naudotojų","Rastas %s naudotojas"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nepavyko aptikti naudotojo rodomo vardo požymio. Nurodykite jį patys išplėstiniuose LDAP nustatymuose.", "Could not find the desired feature" : "Nepavyko rasti pageidaujamos ypatybės", "Invalid Host" : "Neteisingas serveris", @@ -75,8 +67,8 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtras nurodo, kurios LDAP grupės turi turėti prieigą prie %s", "Verify settings and count the groups" : "Patikrinkite nustatymus ir suskaičiuokite grupes", "When logging in, %s will find the user based on the following attributes:" : "Prisijungiant, %s suras naudotoją, remiantis šiais požymiais:", - "LDAP / AD Username:" : "LDAP / AD naudotojo vardas:", - "LDAP / AD Email Address:" : "LDAP / AD el. pašto adresas:", + "LDAP/AD Username:" : "LDAP/AD naudotojo vardas:", + "LDAP/AD Email Address:" : "LDAP/AD el. pašto adresas:", "Other Attributes:" : "Kiti požymiai:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Apibrėžia filtrą, kuris taikomas bandant prisijungti. \"%%uid\" pakeičia naudotojo vardą prisijungimo metu. Pavyzdys: \"uid=%%uid\"", "Test Loginname" : "Ištestuokite prisijungimo vardą", @@ -165,13 +157,13 @@ "User Home Folder Naming Rule" : "Naudotojo namų aplanko pavadinimo taisyklė", "\"$home\" Placeholder Field" : "\"$home\" vietaženklio laukas", "Internal Username" : "Vidinis naudotojo vardas", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Pagal numatymą vidinis naudotojo vardas bus sukurtas iš UUID požymio. Tai užtikrina naudotojo vardo unikalumą ir tuo pačiu nereikia konvertuoti simbolių. Vidinis naudotojo vardas turi apribojimą, leidžiantį tik šiuos simbolius: [ a-zA-Z0-9 _. @ - ]. Kiti simboliai pakeičiami ASCII atitikmenimis arba tiesiog praleidžiami. Sutapimų konflikto atveju yra pridedamas/padidinamas skaičius. Vidinis naudotojo vardas yra naudojamas identifikuoti naudotoją viduje. Tai kartu yra numatytasis naudotojo aplanko pavadinimas. Taip pat jis yra nuotolinių URL dalimi, pavyzdžiui, visoms *DAV paslaugoms. Naudojant šį nustatymą, numatytoji elgsena gali būti nustelbta. Palikite tuščią, jei norite kad galiotų numatytoji elgsena. Pakeitimai įsigalios tik naujai priskirtiems (pridėtiems) LDAP naudotojams.", "Internal Username Attribute:" : "Vidinis naudotojo vardo požymis:", "Override UUID detection" : "Perrašyti UUID aptikimą", "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." : "Pagal numatymą, UUID požymis yra aptinkamas automatiškai. UUID požymis yra naudojamas neabejotinai identifikuoti LDAP naudotojus ir grupes. Be to, vidinis naudotojo vardas bus sukurtas remiantis UUID, jei nenurodyta kitaip. Jūs galite nustelbti nustatymą ir perduoti savo pasirinktą požymį. Turite įsitikinti, kad jūsų pasirinktą požymį gali gauti tiek naudotojai, tiek grupės ir, kad jis yra unikalus. Numatytajai elgsenai, palikite tuščią. Pakeitimai turės įtakos tik naujai susiejamiems (pridedamiems) LDAP naudotojams ir grupėms.", "UUID Attribute for Users:" : "UUID požymis naudotojams:", "UUID Attribute for Groups:" : "UUID požymis grupėms:", "Username-LDAP User Mapping" : "Naudotojo vardo - LDAP naudotojo sąsaja", - "Clear Username-LDAP User Mapping" : "Išvalyti naudotojo vardo - LDAP naudotojo sąsają" + "Clear Username-LDAP User Mapping" : "Išvalyti naudotojo vardo - LDAP naudotojo sąsają", + "Invalid configuration. Please have a look at the logs for further details." : "Neteisinga konfigūracija. Išsamesnei informacijai, žiūrėkite žurnalus." },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/lv.js b/apps/user_ldap/l10n/lv.js deleted file mode 100644 index 8449d761456..00000000000 --- a/apps/user_ldap/l10n/lv.js +++ /dev/null @@ -1,117 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Neizdevās nodzēstu samērošanu.", - "Failed to delete the server configuration" : "Neizdevās izdzēst servera konfigurāciju", - "No action specified" : "Nav norādīta darbība", - "No configuration specified" : "Nav norādīta konfigurācija", - "No data specified" : "Nav norādīti dati", - " Could not set configuration %s" : "Nevarēja iestatīt konfigurāciju %s", - "Action does not exist" : "Darbība neeksistē", - "Very weak password" : "Ļoti vāja parole", - "Weak password" : "Vāja parole", - "So-so password" : "Normāla parole", - "Good password" : "Laba parole", - "Strong password" : "Lieliska parole", - "The Base DN appears to be wrong" : "DN bāze šķiet nepareiza", - "Testing configuration…" : "Konfigurācijas pārbaude...", - "Configuration incorrect" : "Nepareiza konfigurācija", - "Configuration incomplete" : "Nepilnīga konfigurācija", - "Configuration OK" : "Konfigurācija OK", - "Select groups" : "Izvēlieties grupas", - "Select object classes" : "Atlasiet objektu klases", - "Please check the credentials, they seem to be wrong." : "Lūdzu, pārbaudiet akreditācijas datus, tie šķiet nepareizi.", - "Please specify the port, it could not be auto-detected." : "Lūdzu, norādiet portu, tas nevarēja būt noteikts automātiski.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "DN bāzi nevarēja noteikt, lūdzu, pārskatiet datus, resursdatoru un portu.", - "Could not detect Base DN, please enter it manually." : "Nevarēja noteikt DN bāzi, lūdzu, ievadiet to manuāli.", - "{nthServer}. Server" : "{nthServer}. Serveris", - "No object found in the given Base DN. Please revise." : "Neviens objekts nav atrasts konkrētā DN bāzē. Lūdzu pārskatīt.", - "More than 1,000 directory entries available." : "Vairāk nekā 1,000 kataloga ieraksti ir pieejami.", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Radās kļūda. Lūdzu, pārbaudiet bāzes DN, kā arī savienojuma iestatījumus vai akreditācijas datus.", - "Do you really want to delete the current Server Configuration?" : "Vai tiešām vēlaties dzēst pašreizējo servera konfigurāciju?", - "Confirm Deletion" : "Apstiprināt dzēšanu", - "Mappings cleared successfully!" : "Kartējumi notīrīta veiksmīgi!", - "Error while clearing the mappings." : "Kļūda, dzēšot kartējumus.", - "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP operācijas kļūda. Anonīma sasaiste, iespējams, nav atļauta.", - "Select attributes" : "Atlasīt atribūtus", - "Password change rejected. Hint: " : "Paroles maiņas noraidīja. Padoms:", - "LDAP / AD integration" : "LDAP / AD integrācija", - "_%s group found_::_%s groups found_" : ["%s grupas atrastas","%s grupas atrastas","%s grupas atrastas"], - "_%s user found_::_%s users found_" : ["%s lietotāji atrasti","%s lietotāji atrasti","%s lietotāji atrasti"], - "Invalid Host" : "Nederīgs resursdators", - "Test Configuration" : "Testa konfigurācija", - "Help" : "Palīdzība", - "Only these object classes:" : "Tikai šo objektu kategorijas:", - "Only from these groups:" : "Tikai no šīm grupām:", - "Search groups" : "Meklēt grupas", - "Available groups" : "Pieejamās grupas", - "Selected groups" : "Izvēlētās grupas", - "Edit LDAP Query" : "Labot LDAP vaicājumu", - "LDAP Filter:" : "LDAP filtrs:", - "LDAP / AD Username:" : "LDAP / AD lietotājvārds:", - "LDAP / AD Email Address:" : "LDAP / AD e-pasta adrese:", - "Other Attributes:" : "Citi atribūti:", - "Test Loginname" : "Pārbaudiet lietotājvārdu", - "Verify settings" : "Pārbaudīt iestatījumus", - "%s. Server:" : "%s. Serveris:", - "Host" : "Resursdators", - "Port" : "Ports", - "Detect Port" : "Noteikt portu", - "User DN" : "Lietotāja 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." : "Klienta lietotāja DN, ar ko veiks sasaisti, piemēram, uid=agent,dc=example,dc=com. Lai piekļūtu anonīmi, atstājiet DN un paroli tukšu.", - "Password" : "Parole", - "For anonymous access, leave DN and Password empty." : "Lai piekļūtu anonīmi, atstājiet DN un paroli tukšu.", - "One Base DN per line" : "Viena bāzes DN rindā", - "You can specify Base DN for users and groups in the Advanced tab" : "Lietotājiem un grupām var norādīt bāzes DN cilnē “Paplašināti”", - "Detect Base DN" : "Noteikt bāzes DN", - "Test Base DN" : "Testēt bāzes DN", - "Saving" : "Saglabā", - "Back" : "Atpakaļ", - "Continue" : "Turpināt", - "An internal error occurred." : "Radās iekšēja kļūda.", - "Please try again or contact your administrator." : "Lūdzu, mēģiniet vēlreiz vai sazinieties ar administratoru.", - "Current password" : "Pašreizējā parole", - "New password" : "Jauna parole", - "Wrong password." : "Nepareiza parole.", - "Cancel" : "Atcelt", - "Server" : "Serveris", - "Users" : "Lietotāji", - "Login Attributes" : "Pieteikšanās atribūti", - "Groups" : "Grupas", - "Expert" : "Eksperts", - "Advanced" : "Paplašināti", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Brīdinājums:</b> PHP LDAP modulis nav uzinstalēts, aizmugure nedarbosies. Lūdzu, prasiet savam sistēmas administratoram kādu no tām deaktivēt.", - "Connection Settings" : "Savienojuma iestatījumi", - "Configuration Active" : "Konfigurācija ir aktīva", - "When unchecked, this configuration will be skipped." : "Ja nav atzīmēts, šī konfigurācija tiks izlaista.", - "Backup (Replica) Host" : "Rezerves (kopija) serveris", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Norādi rezerves serveri (nav obligāti). Tam ir jābūt galvenā LDAP/AD servera kopijai.", - "Backup (Replica) Port" : "Rezerves (kopijas) ports", - "Disable Main Server" : "Deaktivēt galveno serveri", - "Turn off SSL certificate validation." : "Izslēgt SSL sertifikātu validēšanu.", - "Cache Time-To-Live" : "Kešatmiņas dzīvlaiks", - "in seconds. A change empties the cache." : "sekundēs. Izmaiņas iztukšos kešatmiņu.", - "Directory Settings" : "Direktorijas iestatījumi", - "User Display Name Field" : "Lietotāja redzamā vārda lauks", - "Base User Tree" : "Bāzes lietotāju koks", - "One User Base DN per line" : "Viens lietotājs bāzes DN rindā", - "User Search Attributes" : "Lietotāju meklēšanas atribūts", - "Optional; one attribute per line" : "Neobligāti; viens atribūts rindā", - "Group Display Name Field" : "Grupas redzamā nosaukuma lauks", - "Base Group Tree" : "Bāzes grupu koks", - "One Group Base DN per line" : "Viena grupu bāzes DN rindā", - "Group Search Attributes" : "Grupu meklēšanas atribūts", - "Group-Member association" : "Grupu piederības asociācija", - "Enable LDAP password changes per user" : "Iespējot LDAP paroles maiņu katram lietotājam", - "(New password is sent as plain text to LDAP)" : "(Jaunā parole tiek nosūtīta kā vienkāršs teksts ar LDAP)", - "Special Attributes" : "Īpašie atribūti", - "Quota Field" : "Kvotu lauks", - "Quota Default" : "Kvotas noklusējums", - "Email Field" : "E-pasta lauks", - "User Home Folder Naming Rule" : "Lietotāja mājas mapes nosaukšanas kārtula", - "Internal Username" : "Iekšējais lietotājvārds", - "Override UUID detection" : "Ignorēt UUID noteikšanu", - "UUID Attribute for Users:" : "UUID atribūti lietotājiem:", - "UUID Attribute for Groups:" : "UUID atribūti grupām:" -}, -"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/user_ldap/l10n/lv.json b/apps/user_ldap/l10n/lv.json deleted file mode 100644 index aa85574ca7e..00000000000 --- a/apps/user_ldap/l10n/lv.json +++ /dev/null @@ -1,115 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Neizdevās nodzēstu samērošanu.", - "Failed to delete the server configuration" : "Neizdevās izdzēst servera konfigurāciju", - "No action specified" : "Nav norādīta darbība", - "No configuration specified" : "Nav norādīta konfigurācija", - "No data specified" : "Nav norādīti dati", - " Could not set configuration %s" : "Nevarēja iestatīt konfigurāciju %s", - "Action does not exist" : "Darbība neeksistē", - "Very weak password" : "Ļoti vāja parole", - "Weak password" : "Vāja parole", - "So-so password" : "Normāla parole", - "Good password" : "Laba parole", - "Strong password" : "Lieliska parole", - "The Base DN appears to be wrong" : "DN bāze šķiet nepareiza", - "Testing configuration…" : "Konfigurācijas pārbaude...", - "Configuration incorrect" : "Nepareiza konfigurācija", - "Configuration incomplete" : "Nepilnīga konfigurācija", - "Configuration OK" : "Konfigurācija OK", - "Select groups" : "Izvēlieties grupas", - "Select object classes" : "Atlasiet objektu klases", - "Please check the credentials, they seem to be wrong." : "Lūdzu, pārbaudiet akreditācijas datus, tie šķiet nepareizi.", - "Please specify the port, it could not be auto-detected." : "Lūdzu, norādiet portu, tas nevarēja būt noteikts automātiski.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "DN bāzi nevarēja noteikt, lūdzu, pārskatiet datus, resursdatoru un portu.", - "Could not detect Base DN, please enter it manually." : "Nevarēja noteikt DN bāzi, lūdzu, ievadiet to manuāli.", - "{nthServer}. Server" : "{nthServer}. Serveris", - "No object found in the given Base DN. Please revise." : "Neviens objekts nav atrasts konkrētā DN bāzē. Lūdzu pārskatīt.", - "More than 1,000 directory entries available." : "Vairāk nekā 1,000 kataloga ieraksti ir pieejami.", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Radās kļūda. Lūdzu, pārbaudiet bāzes DN, kā arī savienojuma iestatījumus vai akreditācijas datus.", - "Do you really want to delete the current Server Configuration?" : "Vai tiešām vēlaties dzēst pašreizējo servera konfigurāciju?", - "Confirm Deletion" : "Apstiprināt dzēšanu", - "Mappings cleared successfully!" : "Kartējumi notīrīta veiksmīgi!", - "Error while clearing the mappings." : "Kļūda, dzēšot kartējumus.", - "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP operācijas kļūda. Anonīma sasaiste, iespējams, nav atļauta.", - "Select attributes" : "Atlasīt atribūtus", - "Password change rejected. Hint: " : "Paroles maiņas noraidīja. Padoms:", - "LDAP / AD integration" : "LDAP / AD integrācija", - "_%s group found_::_%s groups found_" : ["%s grupas atrastas","%s grupas atrastas","%s grupas atrastas"], - "_%s user found_::_%s users found_" : ["%s lietotāji atrasti","%s lietotāji atrasti","%s lietotāji atrasti"], - "Invalid Host" : "Nederīgs resursdators", - "Test Configuration" : "Testa konfigurācija", - "Help" : "Palīdzība", - "Only these object classes:" : "Tikai šo objektu kategorijas:", - "Only from these groups:" : "Tikai no šīm grupām:", - "Search groups" : "Meklēt grupas", - "Available groups" : "Pieejamās grupas", - "Selected groups" : "Izvēlētās grupas", - "Edit LDAP Query" : "Labot LDAP vaicājumu", - "LDAP Filter:" : "LDAP filtrs:", - "LDAP / AD Username:" : "LDAP / AD lietotājvārds:", - "LDAP / AD Email Address:" : "LDAP / AD e-pasta adrese:", - "Other Attributes:" : "Citi atribūti:", - "Test Loginname" : "Pārbaudiet lietotājvārdu", - "Verify settings" : "Pārbaudīt iestatījumus", - "%s. Server:" : "%s. Serveris:", - "Host" : "Resursdators", - "Port" : "Ports", - "Detect Port" : "Noteikt portu", - "User DN" : "Lietotāja 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." : "Klienta lietotāja DN, ar ko veiks sasaisti, piemēram, uid=agent,dc=example,dc=com. Lai piekļūtu anonīmi, atstājiet DN un paroli tukšu.", - "Password" : "Parole", - "For anonymous access, leave DN and Password empty." : "Lai piekļūtu anonīmi, atstājiet DN un paroli tukšu.", - "One Base DN per line" : "Viena bāzes DN rindā", - "You can specify Base DN for users and groups in the Advanced tab" : "Lietotājiem un grupām var norādīt bāzes DN cilnē “Paplašināti”", - "Detect Base DN" : "Noteikt bāzes DN", - "Test Base DN" : "Testēt bāzes DN", - "Saving" : "Saglabā", - "Back" : "Atpakaļ", - "Continue" : "Turpināt", - "An internal error occurred." : "Radās iekšēja kļūda.", - "Please try again or contact your administrator." : "Lūdzu, mēģiniet vēlreiz vai sazinieties ar administratoru.", - "Current password" : "Pašreizējā parole", - "New password" : "Jauna parole", - "Wrong password." : "Nepareiza parole.", - "Cancel" : "Atcelt", - "Server" : "Serveris", - "Users" : "Lietotāji", - "Login Attributes" : "Pieteikšanās atribūti", - "Groups" : "Grupas", - "Expert" : "Eksperts", - "Advanced" : "Paplašināti", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Brīdinājums:</b> PHP LDAP modulis nav uzinstalēts, aizmugure nedarbosies. Lūdzu, prasiet savam sistēmas administratoram kādu no tām deaktivēt.", - "Connection Settings" : "Savienojuma iestatījumi", - "Configuration Active" : "Konfigurācija ir aktīva", - "When unchecked, this configuration will be skipped." : "Ja nav atzīmēts, šī konfigurācija tiks izlaista.", - "Backup (Replica) Host" : "Rezerves (kopija) serveris", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Norādi rezerves serveri (nav obligāti). Tam ir jābūt galvenā LDAP/AD servera kopijai.", - "Backup (Replica) Port" : "Rezerves (kopijas) ports", - "Disable Main Server" : "Deaktivēt galveno serveri", - "Turn off SSL certificate validation." : "Izslēgt SSL sertifikātu validēšanu.", - "Cache Time-To-Live" : "Kešatmiņas dzīvlaiks", - "in seconds. A change empties the cache." : "sekundēs. Izmaiņas iztukšos kešatmiņu.", - "Directory Settings" : "Direktorijas iestatījumi", - "User Display Name Field" : "Lietotāja redzamā vārda lauks", - "Base User Tree" : "Bāzes lietotāju koks", - "One User Base DN per line" : "Viens lietotājs bāzes DN rindā", - "User Search Attributes" : "Lietotāju meklēšanas atribūts", - "Optional; one attribute per line" : "Neobligāti; viens atribūts rindā", - "Group Display Name Field" : "Grupas redzamā nosaukuma lauks", - "Base Group Tree" : "Bāzes grupu koks", - "One Group Base DN per line" : "Viena grupu bāzes DN rindā", - "Group Search Attributes" : "Grupu meklēšanas atribūts", - "Group-Member association" : "Grupu piederības asociācija", - "Enable LDAP password changes per user" : "Iespējot LDAP paroles maiņu katram lietotājam", - "(New password is sent as plain text to LDAP)" : "(Jaunā parole tiek nosūtīta kā vienkāršs teksts ar LDAP)", - "Special Attributes" : "Īpašie atribūti", - "Quota Field" : "Kvotu lauks", - "Quota Default" : "Kvotas noklusējums", - "Email Field" : "E-pasta lauks", - "User Home Folder Naming Rule" : "Lietotāja mājas mapes nosaukšanas kārtula", - "Internal Username" : "Iekšējais lietotājvārds", - "Override UUID detection" : "Ignorēt UUID noteikšanu", - "UUID Attribute for Users:" : "UUID atribūti lietotājiem:", - "UUID Attribute for Groups:" : "UUID atribūti grupām:" -},"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/user_ldap/l10n/mg.js b/apps/user_ldap/l10n/mg.js deleted file mode 100644 index 95c97db2f9c..00000000000 --- a/apps/user_ldap/l10n/mg.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n > 1);"); diff --git a/apps/user_ldap/l10n/mg.json b/apps/user_ldap/l10n/mg.json deleted file mode 100644 index 8e0cd6f6783..00000000000 --- a/apps/user_ldap/l10n/mg.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n > 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/mk.js b/apps/user_ldap/l10n/mk.js deleted file mode 100644 index 39fe8f5da90..00000000000 --- a/apps/user_ldap/l10n/mk.js +++ /dev/null @@ -1,18 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Неуспешно бришење на мапирањстс.", - "Select groups" : "Одбери групи", - "Confirm Deletion" : "Потврдете го бришењето", - "Users" : "Корисници", - "Groups" : "Групи", - "Help" : "Помош", - "Host" : "Домаќин", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Може да го скокнете протколот освен ако не ви треба SSL. Тогаш ставете ldaps://", - "Port" : "Порта", - "Password" : "Лозинка", - "Back" : "Назад", - "Continue" : "Продолжи", - "Advanced" : "Напредно" -}, -"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/apps/user_ldap/l10n/mk.json b/apps/user_ldap/l10n/mk.json deleted file mode 100644 index 238bd2a8ebc..00000000000 --- a/apps/user_ldap/l10n/mk.json +++ /dev/null @@ -1,16 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Неуспешно бришење на мапирањстс.", - "Select groups" : "Одбери групи", - "Confirm Deletion" : "Потврдете го бришењето", - "Users" : "Корисници", - "Groups" : "Групи", - "Help" : "Помош", - "Host" : "Домаќин", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Може да го скокнете протколот освен ако не ви треба SSL. Тогаш ставете ldaps://", - "Port" : "Порта", - "Password" : "Лозинка", - "Back" : "Назад", - "Continue" : "Продолжи", - "Advanced" : "Напредно" -},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ml.js b/apps/user_ldap/l10n/ml.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/ml.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ml.json b/apps/user_ldap/l10n/ml.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/ml.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ml_IN.js b/apps/user_ldap/l10n/ml_IN.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/ml_IN.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ml_IN.json b/apps/user_ldap/l10n/ml_IN.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/ml_IN.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/mn.js b/apps/user_ldap/l10n/mn.js deleted file mode 100644 index 304c0247840..00000000000 --- a/apps/user_ldap/l10n/mn.js +++ /dev/null @@ -1,6 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Password" : "Нууц үг" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/mn.json b/apps/user_ldap/l10n/mn.json deleted file mode 100644 index 13788221f43..00000000000 --- a/apps/user_ldap/l10n/mn.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "translations": { - "Password" : "Нууц үг" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/mr.js b/apps/user_ldap/l10n/mr.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/mr.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/mr.json b/apps/user_ldap/l10n/mr.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/mr.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ms_MY.js b/apps/user_ldap/l10n/ms_MY.js deleted file mode 100644 index 74bdc1b820f..00000000000 --- a/apps/user_ldap/l10n/ms_MY.js +++ /dev/null @@ -1,11 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "Pengguna", - "Groups" : "Kumpulan", - "Help" : "Bantuan", - "Password" : "Kata laluan", - "Back" : "Kembali", - "Advanced" : "Maju" -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/ms_MY.json b/apps/user_ldap/l10n/ms_MY.json deleted file mode 100644 index 1d26cfcaf3d..00000000000 --- a/apps/user_ldap/l10n/ms_MY.json +++ /dev/null @@ -1,9 +0,0 @@ -{ "translations": { - "Users" : "Pengguna", - "Groups" : "Kumpulan", - "Help" : "Bantuan", - "Password" : "Kata laluan", - "Back" : "Kembali", - "Advanced" : "Maju" -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/mt_MT.js b/apps/user_ldap/l10n/mt_MT.js deleted file mode 100644 index 8b3fcfae910..00000000000 --- a/apps/user_ldap/l10n/mt_MT.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["","","",""], - "_%s user found_::_%s users found_" : ["","","",""] -}, -"nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);"); diff --git a/apps/user_ldap/l10n/mt_MT.json b/apps/user_ldap/l10n/mt_MT.json deleted file mode 100644 index cbda8c83cca..00000000000 --- a/apps/user_ldap/l10n/mt_MT.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["","","",""], - "_%s user found_::_%s users found_" : ["","","",""] -},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/my_MM.js b/apps/user_ldap/l10n/my_MM.js deleted file mode 100644 index 5af581c8593..00000000000 --- a/apps/user_ldap/l10n/my_MM.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "သုံးစွဲသူ", - "Help" : "အကူအညီ", - "Password" : "စကားဝှက်", - "Advanced" : "အဆင့်မြင့်" -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/my_MM.json b/apps/user_ldap/l10n/my_MM.json deleted file mode 100644 index f057d32bc24..00000000000 --- a/apps/user_ldap/l10n/my_MM.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "Users" : "သုံးစွဲသူ", - "Help" : "အကူအညီ", - "Password" : "စကားဝှက်", - "Advanced" : "အဆင့်မြင့်" -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/nb.js b/apps/user_ldap/l10n/nb.js index e33b296f763..50b9e2a40ff 100644 --- a/apps/user_ldap/l10n/nb.js +++ b/apps/user_ldap/l10n/nb.js @@ -6,11 +6,10 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Oppsettet er ugyldig: Anonym binding er ikke tillatt.", "Valid configuration, connection established!" : "Gyldig oppsett, tilkoblet.", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Oppsettet er i orden, men binding mislyktes. Sjekk server-oppsettet og påloggingsinformasjonen.", - "Invalid configuration. Please have a look at the logs for further details." : "Oppsettet er ikke gyldig. Sjekk loggene for flere detaljer.", "No action specified" : "Ingen handling spesifisert", "No configuration specified" : "Ingen oppsett spesifisert", "No data specified" : "Ingen data spesifisert", - " Could not set configuration %s" : "Klarte ikke å utføre oppsett %s", + "Invalid data specified" : "Ugyldige data er spesifisert", "Action does not exist" : "Handlingen finnes ikke", "Renewing …" : "Fornyer…", "Very weak password" : "Veldig svakt passord", @@ -33,7 +32,7 @@ OC.L10N.register( "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt base DN. Revider oppsettet.", "More than 1,000 directory entries available." : "Mer enn 1.000 oppføringer er tilgjengelig i katalog.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} oppføring tilgjengelig i den angitte Base DN","{objectsFound} oppføringer tilgjengelig i den angitte Base DN"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk base-DN, tilkoblingsoppsett og påloggingsdetaljer.", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppsto en feil. Sjekk base-DN, tilkoblingsoppsett og påloggingsdetaljer.", "Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette den aktiver serverkonfigurasjon?", "Confirm Deletion" : "Bekreft sletting", "Mappings cleared successfully!" : "Tilknytningene ble fjernet!", @@ -47,21 +46,26 @@ OC.L10N.register( "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Bruker ikke funnet. Sjekk påloggingsattributtene og brukernavnet. Virksomt filter (kopier og lim inn for validering på kommandolinjen): <br/>", "User found and settings verified." : "Bruker funnet og innstillinger bekreftet.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Overvei å snevre inn søket ditt, siden det spenner over mange brukere, bare den første derav vil kunne logge inn.", - "An unspecified error occurred. Please check log and settings." : "En uspesifisert feil oppstod. Sjekk loggen og innstillingene.", + "An unspecified error occurred. Please check log and settings." : "En uspesifisert feil oppsto. Sjekk loggen og innstillingene.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søkefilteret er ugyldig, antakelig pga. syntaksproblemer som ulikt antall start- og sluttparenteser. Sjekk det.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Det oppstod en feil ved tilkobling til LDAP / AD. Sjekk vertsnavn, portnummer og påloggingsdetaljer.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder \"%uid\" mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Det oppsto en tilkoblingsfeil til LDAP/AD. Vennligst sjekk vert, port og legitimasjon.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Plassholderen \"%uid\" mangler. Det vil bli erstattet med påloggingsnavnet når det spørres etter LDAP/AD.", "Please provide a login name to test against" : "Oppgi et påloggingsnavn å teste mot", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-serveren ikke støtter memberOf.", - "Password change rejected. Hint: " : "Passordendring avslått. Hint:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP/AD-serveren ikke støtter memberOf.", "Please login with the new password" : "Logg inn med det nye passordet", "LDAP User backend" : "LDAP-brukerbackend", "Your password will expire tomorrow." : "Passordet ditt utløper i morgen.", "Your password will expire today." : "Passordet ditt utløper i dag.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Passordet ditt utløper om %n dag.","Passordet ditt utløper om %n dager."], - "LDAP / AD integration" : "LDAP / AD integrasjon", - "_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"], - "_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"], + "LDAP/AD integration" : "LDAP/AD-integrasjon", + "LDAP Connection" : "LDAP-forbindelse", + "Invalid LDAP UUIDs" : "Ugyldige LDAP UUID-er", + "None found" : "Ingen funnet", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Det er funnet ugyldige UUID-er for LDAP-brukere eller -grupper. Gå gjennom innstillingene for «Overstyr UUID-deteksjon» i Ekspert-delen av LDAP-konfigurasjonen, og bruk «occ ldap:update-uuid» for å oppdatere dem.", + "_%n group found_::_%n groups found_" : ["%n gruppe funnet","%n grupper funnet"], + "> 1000 groups found" : "> 1000 grupper funnet", + "> 1000 users found" : "> 1000 brukere funnet", + "_%n user found_::_%n users found_" : ["%n bruker funnet","%n brukere funnet"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.", "Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten", "Invalid Host" : "Ugyldig server", @@ -81,13 +85,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-grupper som skal ha tilgang til %s-instansen.", "Verify settings and count the groups" : "Bekreft innstillingene og tell gruppene", "When logging in, %s will find the user based on the following attributes:" : "Ved pålogging vil %s finne brukeren basert på følgende attributter:", - "LDAP / AD Username:" : "LDAP / AD brukernavn:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillatter innlogging mot LDAP / AD-brukernavn, som er enten \"uid\" eller \"sAMAccountName\" og vil oppdages.", - "LDAP / AD Email Address:" : "LDAP / AD e-post adresse:", + "LDAP/AD Username:" : "LDAP/AD-brukernavn:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillater pålogging mot LDAP/AD-brukernavnet, som enten er \"uid\" eller \"sAMAccountName\" og vil bli oppdaget.", + "LDAP/AD Email Address:" : "LDAP/AD e-postadresse:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Tillater innlogging mot en e-postattributt. \"mail\" og \"mailPrimaryAddress\" tillates.", "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 et filter å legge til, når innlogging forsøkes. \"%%uid\" erstatter brukernavnet i innloggingshandlingen. Eksempel: \"uid=%%uid\"", "Test Loginname" : "Test påloggingsnavn", + "Attempts to receive a DN for the given loginname and the current login filter" : "Forsøk på å motta en DN for det gitte påloggingsnavnet og det gjeldende påloggingsfilteret", "Verify settings" : "Sjekk innstillinger", "%s. Server:" : "%s. server:", "Add a new configuration" : "Legger til nytt oppsett", @@ -116,7 +121,7 @@ OC.L10N.register( "Back" : "Tilbake", "Continue" : "Fortsett", "Please renew your password." : "Forny passordet ditt.", - "An internal error occurred." : "En intern feil oppstod", + "An internal error occurred." : "En intern feil oppsto", "Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.", "Current password" : "Nåværende passord", "New password" : "Nytt passord", @@ -151,6 +156,8 @@ OC.L10N.register( "One User Base DN per line" : "En base DN for brukere pr. linje", "User Search Attributes" : "Attributter for brukersøk", "Optional; one attribute per line" : "Valgfritt, en attributt per linje", + "Disable users missing from LDAP" : "Deaktiver brukere som mangler fra LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Når den er slått på, deaktiveres brukere importert fra LDAP som da mangler", "Group Display Name Field" : "Felt med gruppens visningsnavn", "The LDAP attribute to use to generate the groups's display name." : "LDAP attributten som skal brukes til å generere gruppens visningsnavn.", "Base Group Tree" : "Base for gruppetre", @@ -179,8 +186,29 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "La det være tomt for brukernavnet (standard). Ellers spesifiserer du et LDAP/AD-attributt.", "\"$home\" Placeholder Field" : "\"$home\" Plassholderfelt", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$homei en ekstern lagringskonfigurasjon vil bli erstattet med verdien for det angitte attributtet", + "User Profile Attributes" : "Attributter for brukerprofil", + "Phone Field" : "Telefonfelt", + "User profile Phone will be set from the specified attribute" : "Brukerprofil Telefon vil bli satt fra det angitte attributtet", + "Website Field" : "Nettstedfelt", + "User profile Website will be set from the specified attribute" : "Brukerprofil Nettsted vil bli satt fra det angitte attributtet", + "Address Field" : "Adressefelt", + "User profile Address will be set from the specified attribute" : "Brukerprofil Adresse vil bli satt fra det angitte attributtet", + "Twitter Field" : "Twitterfelt", + "User profile Twitter will be set from the specified attribute" : "Brukerprofil Twitter vil bli satt fra det angitte attributtet", + "Fediverse Field" : "Fediverse felt", + "User profile Fediverse will be set from the specified attribute" : "Brukerprofil Fediverse vil bli satt fra det angitte attributtet", + "Organisation Field" : "Organisasjonsfelt", + "User profile Organisation will be set from the specified attribute" : "Brukerprofil Organisasjon vil bli satt fra det angitte attributtet", + "Role Field" : "Rollefelt", + "User profile Role will be set from the specified attribute" : "Brukerprofil Rolle vil bli satt fra det angitte attributtet", + "Headline Field" : "Overskriftsfelt", + "User profile Headline will be set from the specified attribute" : "Brukerprofil Overskrift vil bli satt fra det angitte attributtet", + "Biography Field" : "Biografifelt", + "User profile Biography will be set from the specified attribute" : "Brukerprofil Biografi vil bli satt fra det angitte attributtet", + "Birthdate Field" : "Felt for fødselsdato", + "User profile Date of birth will be set from the specified attribute" : "Brukerprofil Fødselsdato vil bli satt fra det angitte attributtet", "Internal Username" : "Internt brukernavn", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som forvalg vil det interne brukernavnet opprettes fra UUID-attributten. Det sørger for at brukernavnet er unikt og at tegnene ikke må konverteres. Det interne brukernavnet har en begrensning i at bare disse tegnene tillates: [ a-zA-Z0-9_.@- ]. Andre tegn erstattes av deres motsatser i ASCII, eller blir sett bort fra. Ved kollisjoner vil et nummer bli lagt til/økt. Det interne brukernavnet brukes til å identifisere en bruker internt. Det er også forvalgt navn for brukerens hjemmemappe. Det er også en del av URL-er eksternt, for eksempel alle *DAV-tjenester. Med denne innstillingen, kan forvalgt oppførsel overstyres. La stå tom for forvalgt oppførsel. Endringer vil bare ha effekt på nylig knyttede (tillagte) LDAP brukere.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Som standard vil det interne brukernavnet bli opprettet fra UUID-attributten. Den sørger for at brukernavnet er unikt og at tegn ikke trenger å konverteres. Det interne brukernavnet har en begrensning at kun disse tegnene er tillatt: [a-zA-Z0-9_.@-]. Andre tegn erstattes med deres ASCII-ekvivalent eller bare utelatt. Ved kollisjoner vil et tall legges til/økes. Det interne brukernavnet brukes til å identifisere en bruker internt. Det er også standardnavnet for brukerens hjemmeområde. Det er også en del av eksterne URL-er, for eksempel for alle DAV-tjenester. Med denne innstillingen kan standardoppførselen overstyres. Endringer vil bare ha effekt på nylig kartlagte (tillagte) LDAP-brukere. La det stå tomt for standard oppførsel.", "Internal Username Attribute:" : "Attributt for internt brukernavn:", "Override UUID detection" : "Overstyr UUID detektering", "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." : "Som forvalg blir UUID attributten påvist automatisk. UUID attributten brukes til å identifisere LDAP brukere og grupper unikt. Det interne brukernavnet vil også bli laget basert på UUID, hvis ikke annet er spesifisert ovenfor. Du kan overstyre innstillingen og oppgi den attributten du ønsker. Du må forsikre deg om at din valgte attributt kan hentes ut både for brukere og for grupper og at den er unik. La stå tomt for forvalgt ppførsel. Endringer vil kun påvirke nylig tilknyttede (opprettede) LDAP brukere og grupper.", @@ -189,6 +217,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP bruker", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Brukernavn brukes til å lagre og tildele metadata. For å identifisere og gjenkjenne brukere nøyaktig, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en kartlegging fra brukernavn til LDAP-bruker. Det opprettede brukernavnet tilordnes UUID for LDAP-brukeren. I tillegg er DN også hurtigbufret for å redusere LDAP-interaksjon, men den brukes ikke til identifikasjon. Hvis DN endres, vil endringene bli funnet. Det interne brukernavnet brukes overalt. Å rydde kartleggingen vil ha rester overalt. Å rydde tilordningene er ikke konfigurasjonsfølsom, det påvirker alle LDAP-konfigurasjoner! Tøm aldri kartleggingen i et produksjonsmiljø, bare i et test- eller eksperimentelt stadium.", "Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP bruker", - "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP gruppe" + "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP gruppe", + "Invalid configuration. Please have a look at the logs for further details." : "Oppsettet er ikke gyldig. Sjekk loggene for flere detaljer." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/nb.json b/apps/user_ldap/l10n/nb.json index 1ece7940d57..d39154abc80 100644 --- a/apps/user_ldap/l10n/nb.json +++ b/apps/user_ldap/l10n/nb.json @@ -4,11 +4,10 @@ "Invalid configuration: Anonymous binding is not allowed." : "Oppsettet er ugyldig: Anonym binding er ikke tillatt.", "Valid configuration, connection established!" : "Gyldig oppsett, tilkoblet.", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Oppsettet er i orden, men binding mislyktes. Sjekk server-oppsettet og påloggingsinformasjonen.", - "Invalid configuration. Please have a look at the logs for further details." : "Oppsettet er ikke gyldig. Sjekk loggene for flere detaljer.", "No action specified" : "Ingen handling spesifisert", "No configuration specified" : "Ingen oppsett spesifisert", "No data specified" : "Ingen data spesifisert", - " Could not set configuration %s" : "Klarte ikke å utføre oppsett %s", + "Invalid data specified" : "Ugyldige data er spesifisert", "Action does not exist" : "Handlingen finnes ikke", "Renewing …" : "Fornyer…", "Very weak password" : "Veldig svakt passord", @@ -31,7 +30,7 @@ "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt base DN. Revider oppsettet.", "More than 1,000 directory entries available." : "Mer enn 1.000 oppføringer er tilgjengelig i katalog.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} oppføring tilgjengelig i den angitte Base DN","{objectsFound} oppføringer tilgjengelig i den angitte Base DN"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk base-DN, tilkoblingsoppsett og påloggingsdetaljer.", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppsto en feil. Sjekk base-DN, tilkoblingsoppsett og påloggingsdetaljer.", "Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette den aktiver serverkonfigurasjon?", "Confirm Deletion" : "Bekreft sletting", "Mappings cleared successfully!" : "Tilknytningene ble fjernet!", @@ -45,21 +44,26 @@ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Bruker ikke funnet. Sjekk påloggingsattributtene og brukernavnet. Virksomt filter (kopier og lim inn for validering på kommandolinjen): <br/>", "User found and settings verified." : "Bruker funnet og innstillinger bekreftet.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Overvei å snevre inn søket ditt, siden det spenner over mange brukere, bare den første derav vil kunne logge inn.", - "An unspecified error occurred. Please check log and settings." : "En uspesifisert feil oppstod. Sjekk loggen og innstillingene.", + "An unspecified error occurred. Please check log and settings." : "En uspesifisert feil oppsto. Sjekk loggen og innstillingene.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søkefilteret er ugyldig, antakelig pga. syntaksproblemer som ulikt antall start- og sluttparenteser. Sjekk det.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Det oppstod en feil ved tilkobling til LDAP / AD. Sjekk vertsnavn, portnummer og påloggingsdetaljer.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder \"%uid\" mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Det oppsto en tilkoblingsfeil til LDAP/AD. Vennligst sjekk vert, port og legitimasjon.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Plassholderen \"%uid\" mangler. Det vil bli erstattet med påloggingsnavnet når det spørres etter LDAP/AD.", "Please provide a login name to test against" : "Oppgi et påloggingsnavn å teste mot", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-serveren ikke støtter memberOf.", - "Password change rejected. Hint: " : "Passordendring avslått. Hint:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP/AD-serveren ikke støtter memberOf.", "Please login with the new password" : "Logg inn med det nye passordet", "LDAP User backend" : "LDAP-brukerbackend", "Your password will expire tomorrow." : "Passordet ditt utløper i morgen.", "Your password will expire today." : "Passordet ditt utløper i dag.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Passordet ditt utløper om %n dag.","Passordet ditt utløper om %n dager."], - "LDAP / AD integration" : "LDAP / AD integrasjon", - "_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"], - "_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"], + "LDAP/AD integration" : "LDAP/AD-integrasjon", + "LDAP Connection" : "LDAP-forbindelse", + "Invalid LDAP UUIDs" : "Ugyldige LDAP UUID-er", + "None found" : "Ingen funnet", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Det er funnet ugyldige UUID-er for LDAP-brukere eller -grupper. Gå gjennom innstillingene for «Overstyr UUID-deteksjon» i Ekspert-delen av LDAP-konfigurasjonen, og bruk «occ ldap:update-uuid» for å oppdatere dem.", + "_%n group found_::_%n groups found_" : ["%n gruppe funnet","%n grupper funnet"], + "> 1000 groups found" : "> 1000 grupper funnet", + "> 1000 users found" : "> 1000 brukere funnet", + "_%n user found_::_%n users found_" : ["%n bruker funnet","%n brukere funnet"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.", "Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten", "Invalid Host" : "Ugyldig server", @@ -79,13 +83,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-grupper som skal ha tilgang til %s-instansen.", "Verify settings and count the groups" : "Bekreft innstillingene og tell gruppene", "When logging in, %s will find the user based on the following attributes:" : "Ved pålogging vil %s finne brukeren basert på følgende attributter:", - "LDAP / AD Username:" : "LDAP / AD brukernavn:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillatter innlogging mot LDAP / AD-brukernavn, som er enten \"uid\" eller \"sAMAccountName\" og vil oppdages.", - "LDAP / AD Email Address:" : "LDAP / AD e-post adresse:", + "LDAP/AD Username:" : "LDAP/AD-brukernavn:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillater pålogging mot LDAP/AD-brukernavnet, som enten er \"uid\" eller \"sAMAccountName\" og vil bli oppdaget.", + "LDAP/AD Email Address:" : "LDAP/AD e-postadresse:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Tillater innlogging mot en e-postattributt. \"mail\" og \"mailPrimaryAddress\" tillates.", "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 et filter å legge til, når innlogging forsøkes. \"%%uid\" erstatter brukernavnet i innloggingshandlingen. Eksempel: \"uid=%%uid\"", "Test Loginname" : "Test påloggingsnavn", + "Attempts to receive a DN for the given loginname and the current login filter" : "Forsøk på å motta en DN for det gitte påloggingsnavnet og det gjeldende påloggingsfilteret", "Verify settings" : "Sjekk innstillinger", "%s. Server:" : "%s. server:", "Add a new configuration" : "Legger til nytt oppsett", @@ -114,7 +119,7 @@ "Back" : "Tilbake", "Continue" : "Fortsett", "Please renew your password." : "Forny passordet ditt.", - "An internal error occurred." : "En intern feil oppstod", + "An internal error occurred." : "En intern feil oppsto", "Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.", "Current password" : "Nåværende passord", "New password" : "Nytt passord", @@ -149,6 +154,8 @@ "One User Base DN per line" : "En base DN for brukere pr. linje", "User Search Attributes" : "Attributter for brukersøk", "Optional; one attribute per line" : "Valgfritt, en attributt per linje", + "Disable users missing from LDAP" : "Deaktiver brukere som mangler fra LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Når den er slått på, deaktiveres brukere importert fra LDAP som da mangler", "Group Display Name Field" : "Felt med gruppens visningsnavn", "The LDAP attribute to use to generate the groups's display name." : "LDAP attributten som skal brukes til å generere gruppens visningsnavn.", "Base Group Tree" : "Base for gruppetre", @@ -177,8 +184,29 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "La det være tomt for brukernavnet (standard). Ellers spesifiserer du et LDAP/AD-attributt.", "\"$home\" Placeholder Field" : "\"$home\" Plassholderfelt", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$homei en ekstern lagringskonfigurasjon vil bli erstattet med verdien for det angitte attributtet", + "User Profile Attributes" : "Attributter for brukerprofil", + "Phone Field" : "Telefonfelt", + "User profile Phone will be set from the specified attribute" : "Brukerprofil Telefon vil bli satt fra det angitte attributtet", + "Website Field" : "Nettstedfelt", + "User profile Website will be set from the specified attribute" : "Brukerprofil Nettsted vil bli satt fra det angitte attributtet", + "Address Field" : "Adressefelt", + "User profile Address will be set from the specified attribute" : "Brukerprofil Adresse vil bli satt fra det angitte attributtet", + "Twitter Field" : "Twitterfelt", + "User profile Twitter will be set from the specified attribute" : "Brukerprofil Twitter vil bli satt fra det angitte attributtet", + "Fediverse Field" : "Fediverse felt", + "User profile Fediverse will be set from the specified attribute" : "Brukerprofil Fediverse vil bli satt fra det angitte attributtet", + "Organisation Field" : "Organisasjonsfelt", + "User profile Organisation will be set from the specified attribute" : "Brukerprofil Organisasjon vil bli satt fra det angitte attributtet", + "Role Field" : "Rollefelt", + "User profile Role will be set from the specified attribute" : "Brukerprofil Rolle vil bli satt fra det angitte attributtet", + "Headline Field" : "Overskriftsfelt", + "User profile Headline will be set from the specified attribute" : "Brukerprofil Overskrift vil bli satt fra det angitte attributtet", + "Biography Field" : "Biografifelt", + "User profile Biography will be set from the specified attribute" : "Brukerprofil Biografi vil bli satt fra det angitte attributtet", + "Birthdate Field" : "Felt for fødselsdato", + "User profile Date of birth will be set from the specified attribute" : "Brukerprofil Fødselsdato vil bli satt fra det angitte attributtet", "Internal Username" : "Internt brukernavn", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som forvalg vil det interne brukernavnet opprettes fra UUID-attributten. Det sørger for at brukernavnet er unikt og at tegnene ikke må konverteres. Det interne brukernavnet har en begrensning i at bare disse tegnene tillates: [ a-zA-Z0-9_.@- ]. Andre tegn erstattes av deres motsatser i ASCII, eller blir sett bort fra. Ved kollisjoner vil et nummer bli lagt til/økt. Det interne brukernavnet brukes til å identifisere en bruker internt. Det er også forvalgt navn for brukerens hjemmemappe. Det er også en del av URL-er eksternt, for eksempel alle *DAV-tjenester. Med denne innstillingen, kan forvalgt oppførsel overstyres. La stå tom for forvalgt oppførsel. Endringer vil bare ha effekt på nylig knyttede (tillagte) LDAP brukere.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Som standard vil det interne brukernavnet bli opprettet fra UUID-attributten. Den sørger for at brukernavnet er unikt og at tegn ikke trenger å konverteres. Det interne brukernavnet har en begrensning at kun disse tegnene er tillatt: [a-zA-Z0-9_.@-]. Andre tegn erstattes med deres ASCII-ekvivalent eller bare utelatt. Ved kollisjoner vil et tall legges til/økes. Det interne brukernavnet brukes til å identifisere en bruker internt. Det er også standardnavnet for brukerens hjemmeområde. Det er også en del av eksterne URL-er, for eksempel for alle DAV-tjenester. Med denne innstillingen kan standardoppførselen overstyres. Endringer vil bare ha effekt på nylig kartlagte (tillagte) LDAP-brukere. La det stå tomt for standard oppførsel.", "Internal Username Attribute:" : "Attributt for internt brukernavn:", "Override UUID detection" : "Overstyr UUID detektering", "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." : "Som forvalg blir UUID attributten påvist automatisk. UUID attributten brukes til å identifisere LDAP brukere og grupper unikt. Det interne brukernavnet vil også bli laget basert på UUID, hvis ikke annet er spesifisert ovenfor. Du kan overstyre innstillingen og oppgi den attributten du ønsker. Du må forsikre deg om at din valgte attributt kan hentes ut både for brukere og for grupper og at den er unik. La stå tomt for forvalgt ppførsel. Endringer vil kun påvirke nylig tilknyttede (opprettede) LDAP brukere og grupper.", @@ -187,6 +215,7 @@ "Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP bruker", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Brukernavn brukes til å lagre og tildele metadata. For å identifisere og gjenkjenne brukere nøyaktig, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en kartlegging fra brukernavn til LDAP-bruker. Det opprettede brukernavnet tilordnes UUID for LDAP-brukeren. I tillegg er DN også hurtigbufret for å redusere LDAP-interaksjon, men den brukes ikke til identifikasjon. Hvis DN endres, vil endringene bli funnet. Det interne brukernavnet brukes overalt. Å rydde kartleggingen vil ha rester overalt. Å rydde tilordningene er ikke konfigurasjonsfølsom, det påvirker alle LDAP-konfigurasjoner! Tøm aldri kartleggingen i et produksjonsmiljø, bare i et test- eller eksperimentelt stadium.", "Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP bruker", - "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP gruppe" + "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP gruppe", + "Invalid configuration. Please have a look at the logs for further details." : "Oppsettet er ikke gyldig. Sjekk loggene for flere detaljer." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/nb_NO.js b/apps/user_ldap/l10n/nb_NO.js deleted file mode 100644 index 9c8b69b18fe..00000000000 --- a/apps/user_ldap/l10n/nb_NO.js +++ /dev/null @@ -1,162 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Klarte ikke å nullstille tilknytningene.", - "Failed to delete the server configuration" : "Klarte ikke å slette tjener-konfigurasjonen.", - "The configuration is invalid: anonymous bind is not allowed." : "Konfigurasjonen er ugyldig: Anonym binding er ikke tillatt.", - "The configuration is valid and the connection could be established!" : "Konfigurasjonen er i orden og tilkoblingen skal være etablert!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Konfigurasjonen er i orden, men binding mislyktes. Vennligst sjekk tjener-konfigurasjonen og påloggingsinformasjonen.", - "The configuration is invalid. Please have a look at the logs for further details." : "Konfigurasjonen er ikke gyldig. Sjekk loggene for flere detaljer.", - "No action specified" : "Ingen handling spesifisert", - "No configuration specified" : "Ingen konfigurasjon spesifisert", - "No data specified" : "Ingen data spesifisert", - " Could not set configuration %s" : "Klarte ikke å sette konfigurasjon %s", - "Action does not exist" : "Aksjonen eksisterer ikke", - "The Base DN appears to be wrong" : "Basis-DN ser ut til å være feil", - "Testing configuration…" : "Tester konfigurasjonen...", - "Configuration incorrect" : "Konfigurasjon feil", - "Configuration incomplete" : "Konfigurasjon ufullstendig", - "Configuration OK" : "Konfigurasjon OK", - "Select groups" : "Velg grupper", - "Select object classes" : "Velg objektklasser", - "Please check the credentials, they seem to be wrong." : "Sjekk påloggingsdetaljene; de ser ut til å være feil.", - "Please specify the port, it could not be auto-detected." : "Vennligst spesifiser porten. Den kunne ikke påvises automatisk.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Basis-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.", - "Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise basis-DN. Det må skrives inn manuelt.", - "{nthServer}. Server" : "{nthServer}. tjener", - "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt basis-DN. Revider oppsettet.", - "More than 1,000 directory entries available." : "Mer enn 1.000 katalogoppføringer tilgjengelig.", - " entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt basis-DN", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk basis-DN, tilkoblingsoppsett og påloggingsdetaljer.", - "Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette den aktiver tjenerkonfigurasjon?", - "Confirm Deletion" : "Bekreft sletting", - "Mappings cleared successfully!" : "Tilknytningene ble nullstilt!", - "Error while clearing the mappings." : "Feil ved nullstilling av tilknytningene.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym binding er ikke tillatt. Oppgi en bruker-DN og passord.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Feil ved LDAP-operasjon. Anonym binding er kanskje ikke tillatt.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lagring fellet. Forsikre deg om at database er i gang. Last på nytt før du fortsetter.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Endring av modus vil aktivere automatiske LDAP-spørringer. Avhengig av din LDAP-størrelse kan de ta litt tid. Vil du likevel endre modus?", - "Mode switch" : "Endring av modus", - "Select attributes" : "Velg attributter", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Bruker ikke funnet. Sjekk påloggingsattributtene og brukernavnet. Virksomt filter (kopier og lim inn for validering på kommandolinjen): <br/>", - "User found and settings verified." : "Bruker funnet og innstillingene sjekket.", - "An unspecified error occurred. Please check the settings and the log." : "En uspesifisert feil oppstod. Sjekk innstillingene og loggen.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søkefilteret er ugyldig, antakelig pga. syntaksproblemer som ulikt antall start- og sluttparenteser. Vennligst sjekk.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Det oppstod en feil ved tilkobling til LDAP / AD. Sjekk vertsnavn, portnummer og påloggingsdetaljer.", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder %uid mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.", - "Please provide a login name to test against" : "Vennligst oppgi et påloggingsnavn å teste mot", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-tjeneren ikke støtter memberOf.", - "LDAP / AD integration" : "LDAP / AD integrasjon", - "_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"], - "_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.", - "Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten", - "Invalid Host" : "Ugyldig tjener", - "Test Configuration" : "Test konfigurasjonen", - "Help" : "Hjelp", - "Groups meeting these criteria are available in %s:" : "Grupper som tilfredsstiller disse kriteriene er tilgjengelige i %s:", - "Only these object classes:" : "Kun disse objektklassene:", - "Only from these groups:" : "Kun fra disse gruppene:", - "Search groups" : "Søk i grupper", - "Available groups" : "Tilgjengelige grupper", - "Selected groups" : "Valgte grupper", - "Edit LDAP Query" : "Rediger LDAP-spørring", - "LDAP Filter:" : "LDAP-filter:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-grupper som skal ha tilgang til %s-instansen.", - "Verify settings and count groups" : "Sjekk innstillinger og tell grupper", - "When logging in, %s will find the user based on the following attributes:" : "Ved pålogging vil %s finne brukeren basert på følgende attributter:", - "LDAP / AD Username:" : "LDAP / AD brukernavn:", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Tillater pålogging med LDAP / AD brukernavn, som er enten uid eller samaccountname og vil bli oppdaget.", - "LDAP / AD Email Address:" : "LDAP / AD Epost-adresse:", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Log alltid på med en epost-attributt. Mail og mailPrimaryAddress vil være tillatt.", - "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 filteret som skal brukes når noen prøver å logge inn. %%uid erstatter brukernavnet i innloggingen. Eksempel: \"uid=%%uid\"", - "Test Loginname" : "Test påloggingsnavn", - "Verify settings" : "Sjekk innstillinger", - "1. Server" : "1. Tjener", - "%s. Server:" : "%s. tjener:", - "Add a new and blank configuration" : "Legg til en ny tom konfigurasjon", - "Copy current configuration into new directory binding" : "Kopier gjeldende konfigurasjon til ny katalogbinding", - "Delete the current configuration" : "Slett gjeldende konfigurasjon", - "Host" : "Tjener", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kan utelate protokollen, men du er påkrevd å bruke SSL. Deretter starte med ldaps://", - "Port" : "Port", - "Detect Port" : "Påvis port", - "User DN" : "Bruker 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 for klientbrukeren som binding skal gjøres med, f.eks. uid=agent,dc=example,dc=com. For anonym tilgang, la DN og passord stå tomme.", - "Password" : "Passord", - "For anonymous access, leave DN and Password empty." : "For anonym tilgang, la DN- og passord-feltet stå tomt.", - "One Base DN per line" : "En basis-DN pr. linje", - "You can specify Base DN for users and groups in the Advanced tab" : "Du kan spesifisere basis-DN for brukere og grupper under Avansert fanen", - "Detect Base DN" : "Påvis basis-DN", - "Test Base DN" : "Test basis-DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.", - "Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)", - "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 mest vanlige objektklassene for brukere er organizationalPerson, person, user og inetOrgPerson. Kontakt katalogadministratoren hvis du er usikker på hvilken objektklasse du skal velge.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-brukere som skal ha tilgang til %s-instansen.", - "Verify settings and count users" : "Sjekk innstillinger og tell brukere", - "Saving" : "Lagrer", - "Back" : "Tilbake", - "Continue" : "Fortsett", - "LDAP" : "LDAP", - "Server" : "Tjener", - "Users" : "Brukere", - "Login Attributes" : "Påloggingsattributter", - "Groups" : "Grupper", - "Expert" : "Ekspert", - "Advanced" : "Avansert", - "<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>Advarsel:</b> Appene user_ldap og user_webdavauth er ikke kompatible med hverandre. Uventet oppførsel kan forekomme. Be systemadministratoren om å deaktivere en av dem.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og serveren vil ikke virke. Vennligst be systemadministratoren installere den.", - "Connection Settings" : "Innstillinger for tilkobling", - "Configuration Active" : "Konfigurasjon aktiv", - "When unchecked, this configuration will be skipped." : "Når ikke huket av så vil denne konfigurasjonen bli hoppet over.", - "Backup (Replica) Host" : "Sikkerhetskopierings (Replica) vert", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Oppgi en valgfri reservetjener. Den må være en replika av hovedtjeneren for LDAP/AD.", - "Backup (Replica) Port" : "Reserve (Replika) Port", - "Disable Main Server" : "Deaktiver hovedtjeneren", - "Only connect to the replica server." : "Koble til bare replika-tjeneren.", - "Turn off SSL certificate validation." : "Slå av SSL-sertifikat validering", - "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." : "Ikke anbefalt, bruk kun for testing! Hvis tilkobling bare virker med dette valget, importer LDAP-tjenerens SSL-sertifikat i %s-tjeneren din.", - "Cache Time-To-Live" : "Levetid i mellomlager", - "in seconds. A change empties the cache." : "i sekunder. En endring tømmer bufferen.", - "Directory Settings" : "Innstillinger for katalog", - "User Display Name Field" : "Felt med brukerens visningsnavn", - "The LDAP attribute to use to generate the user's display name." : "LDAP-attributten som skal brukes til å generere brukerens visningsnavn.", - "2nd User Display Name Field" : "2. felt med brukerens visningsnavn", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Valgfritt. En LDAP-attributt som skal legges til visningsnavnet i parentes. Resulterer i f.eks. »John Doe (john.doe@example.org)«.", - "Base User Tree" : "Basis for bruker-tre", - "One User Base DN per line" : "En basis-DN for brukere pr. linje", - "User Search Attributes" : "Attributter for brukersøk", - "Optional; one attribute per line" : "Valgfritt, en attributt pr. linje", - "Group Display Name Field" : "Felt med gruppens visningsnavn", - "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributten som skal brukes til å generere gruppens visningsnavn.", - "Base Group Tree" : "Basis for gruppe-tre", - "One Group Base DN per line" : "En basis-DN for grupper pr. linje", - "Group Search Attributes" : "Attributter for gruppesøk", - "Group-Member association" : "gruppe-medlem assosiasjon", - "Dynamic Group Member URL" : "URL for dynamisk gruppemedlem", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP-attributten som, på gruppe-objekter, inneholder en LDAP søke-URL som bestemmer hvilke objekter som hører til gruppen. (En tom innstilling deaktiverer funksjonaliteten for dynamisk gruppemedlemskap.)", - "Nested Groups" : "Nestede grupper", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Grupper som inneholder grupper er tillatt når denne er slått på. (Virker bare hvis gruppenes member-attributt inneholder DN-er.)", - "Paging chunksize" : "Sidestørrelse", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Sidestørrelsen brukes for sidevise (paged) LDAP-søk som kan returnere store resultater, som f.eks. gjennomløping av brukere eller grupper. (Sett til 0 for å deaktivere sidevis LDAP-spørring i disse situasjonene.)", - "Special Attributes" : "Spesielle attributter", - "Quota Field" : "Felt med lagringskvote", - "Quota Default" : "Standard lagringskvote", - "in bytes" : "i bytes", - "Email Field" : "Felt med e-postadresse", - "User Home Folder Naming Rule" : "Navneregel for brukers hjemmemappe", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "La stå tom for brukernavn (standard). Ellers, spesifiser en LDAP/AD attributt.", - "Internal Username" : "Internt brukernavn", - "Internal Username Attribute:" : "Attributt for internt brukernavn:", - "Override UUID detection" : "Overstyr UUID-påvisning", - "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." : "Som standard blir UUID-attributten påvist automatisk. UUID-attributten brukes til å identifisere LDAP-brukere og -grupper unikt. Det interne brukernavnet vil også bli laget basert på UUID, hvis ikke annet er spesifisert ovenfor. Du kan overstyre innstillingen og oppgi den attributten du ønsker. Du må forsikre deg om at din valgte attributt kan hentes ut både for brukere og for grupper og at den er unik. La stå tomt for standard oppførsel. Endringer vil kun påvirke nylig tilknyttede (opprettede) LDAP-brukere og -grupper.", - "UUID Attribute for Users:" : "UUID-attributt for brukere:", - "UUID Attribute for Groups:" : "UUID-attributt for grupper:", - "Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP-bruker", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Brukernavn brukes til å lagre og tilordne (meta)data. For at brukere skal identifiseres og gjenkjennes presist, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en tilknytning fra brukernavn til LDAP-bruker. Brukernavn som opprettes blir knyttet til LDAP-brukerens UUID. I tillegg mellomlagres DN for å redusere LDAP-kommunikasjon, men det brukes ikke til identifisering. Hvis DN endres vil endringene bli oppdaget. Det interne brukernavnet brukes alle steder. Nullstilling av tilknytningene vil etterlate seg rester overalt. Nullstilling av tilknytningene skjer ikke pr. konfigurasjon, det påvirker alle LDAP-konfigurasjoner! Nullstill aldri tilknytningene i et produksjonsmiljø, kun ved testing eller eksperimentering.", - "Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker", - "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Innstillinger sjekket, men en bruker funnet. Kun den første vil kunne logge inn. Vurder et smalere filter." -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/nb_NO.json b/apps/user_ldap/l10n/nb_NO.json deleted file mode 100644 index 386c0f9fd00..00000000000 --- a/apps/user_ldap/l10n/nb_NO.json +++ /dev/null @@ -1,160 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Klarte ikke å nullstille tilknytningene.", - "Failed to delete the server configuration" : "Klarte ikke å slette tjener-konfigurasjonen.", - "The configuration is invalid: anonymous bind is not allowed." : "Konfigurasjonen er ugyldig: Anonym binding er ikke tillatt.", - "The configuration is valid and the connection could be established!" : "Konfigurasjonen er i orden og tilkoblingen skal være etablert!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Konfigurasjonen er i orden, men binding mislyktes. Vennligst sjekk tjener-konfigurasjonen og påloggingsinformasjonen.", - "The configuration is invalid. Please have a look at the logs for further details." : "Konfigurasjonen er ikke gyldig. Sjekk loggene for flere detaljer.", - "No action specified" : "Ingen handling spesifisert", - "No configuration specified" : "Ingen konfigurasjon spesifisert", - "No data specified" : "Ingen data spesifisert", - " Could not set configuration %s" : "Klarte ikke å sette konfigurasjon %s", - "Action does not exist" : "Aksjonen eksisterer ikke", - "The Base DN appears to be wrong" : "Basis-DN ser ut til å være feil", - "Testing configuration…" : "Tester konfigurasjonen...", - "Configuration incorrect" : "Konfigurasjon feil", - "Configuration incomplete" : "Konfigurasjon ufullstendig", - "Configuration OK" : "Konfigurasjon OK", - "Select groups" : "Velg grupper", - "Select object classes" : "Velg objektklasser", - "Please check the credentials, they seem to be wrong." : "Sjekk påloggingsdetaljene; de ser ut til å være feil.", - "Please specify the port, it could not be auto-detected." : "Vennligst spesifiser porten. Den kunne ikke påvises automatisk.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Basis-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.", - "Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise basis-DN. Det må skrives inn manuelt.", - "{nthServer}. Server" : "{nthServer}. tjener", - "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt basis-DN. Revider oppsettet.", - "More than 1,000 directory entries available." : "Mer enn 1.000 katalogoppføringer tilgjengelig.", - " entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt basis-DN", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk basis-DN, tilkoblingsoppsett og påloggingsdetaljer.", - "Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette den aktiver tjenerkonfigurasjon?", - "Confirm Deletion" : "Bekreft sletting", - "Mappings cleared successfully!" : "Tilknytningene ble nullstilt!", - "Error while clearing the mappings." : "Feil ved nullstilling av tilknytningene.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym binding er ikke tillatt. Oppgi en bruker-DN og passord.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Feil ved LDAP-operasjon. Anonym binding er kanskje ikke tillatt.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lagring fellet. Forsikre deg om at database er i gang. Last på nytt før du fortsetter.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Endring av modus vil aktivere automatiske LDAP-spørringer. Avhengig av din LDAP-størrelse kan de ta litt tid. Vil du likevel endre modus?", - "Mode switch" : "Endring av modus", - "Select attributes" : "Velg attributter", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Bruker ikke funnet. Sjekk påloggingsattributtene og brukernavnet. Virksomt filter (kopier og lim inn for validering på kommandolinjen): <br/>", - "User found and settings verified." : "Bruker funnet og innstillingene sjekket.", - "An unspecified error occurred. Please check the settings and the log." : "En uspesifisert feil oppstod. Sjekk innstillingene og loggen.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søkefilteret er ugyldig, antakelig pga. syntaksproblemer som ulikt antall start- og sluttparenteser. Vennligst sjekk.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Det oppstod en feil ved tilkobling til LDAP / AD. Sjekk vertsnavn, portnummer og påloggingsdetaljer.", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder %uid mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.", - "Please provide a login name to test against" : "Vennligst oppgi et påloggingsnavn å teste mot", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-tjeneren ikke støtter memberOf.", - "LDAP / AD integration" : "LDAP / AD integrasjon", - "_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"], - "_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.", - "Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten", - "Invalid Host" : "Ugyldig tjener", - "Test Configuration" : "Test konfigurasjonen", - "Help" : "Hjelp", - "Groups meeting these criteria are available in %s:" : "Grupper som tilfredsstiller disse kriteriene er tilgjengelige i %s:", - "Only these object classes:" : "Kun disse objektklassene:", - "Only from these groups:" : "Kun fra disse gruppene:", - "Search groups" : "Søk i grupper", - "Available groups" : "Tilgjengelige grupper", - "Selected groups" : "Valgte grupper", - "Edit LDAP Query" : "Rediger LDAP-spørring", - "LDAP Filter:" : "LDAP-filter:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-grupper som skal ha tilgang til %s-instansen.", - "Verify settings and count groups" : "Sjekk innstillinger og tell grupper", - "When logging in, %s will find the user based on the following attributes:" : "Ved pålogging vil %s finne brukeren basert på følgende attributter:", - "LDAP / AD Username:" : "LDAP / AD brukernavn:", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Tillater pålogging med LDAP / AD brukernavn, som er enten uid eller samaccountname og vil bli oppdaget.", - "LDAP / AD Email Address:" : "LDAP / AD Epost-adresse:", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Log alltid på med en epost-attributt. Mail og mailPrimaryAddress vil være tillatt.", - "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 filteret som skal brukes når noen prøver å logge inn. %%uid erstatter brukernavnet i innloggingen. Eksempel: \"uid=%%uid\"", - "Test Loginname" : "Test påloggingsnavn", - "Verify settings" : "Sjekk innstillinger", - "1. Server" : "1. Tjener", - "%s. Server:" : "%s. tjener:", - "Add a new and blank configuration" : "Legg til en ny tom konfigurasjon", - "Copy current configuration into new directory binding" : "Kopier gjeldende konfigurasjon til ny katalogbinding", - "Delete the current configuration" : "Slett gjeldende konfigurasjon", - "Host" : "Tjener", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kan utelate protokollen, men du er påkrevd å bruke SSL. Deretter starte med ldaps://", - "Port" : "Port", - "Detect Port" : "Påvis port", - "User DN" : "Bruker 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 for klientbrukeren som binding skal gjøres med, f.eks. uid=agent,dc=example,dc=com. For anonym tilgang, la DN og passord stå tomme.", - "Password" : "Passord", - "For anonymous access, leave DN and Password empty." : "For anonym tilgang, la DN- og passord-feltet stå tomt.", - "One Base DN per line" : "En basis-DN pr. linje", - "You can specify Base DN for users and groups in the Advanced tab" : "Du kan spesifisere basis-DN for brukere og grupper under Avansert fanen", - "Detect Base DN" : "Påvis basis-DN", - "Test Base DN" : "Test basis-DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.", - "Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)", - "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 mest vanlige objektklassene for brukere er organizationalPerson, person, user og inetOrgPerson. Kontakt katalogadministratoren hvis du er usikker på hvilken objektklasse du skal velge.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-brukere som skal ha tilgang til %s-instansen.", - "Verify settings and count users" : "Sjekk innstillinger og tell brukere", - "Saving" : "Lagrer", - "Back" : "Tilbake", - "Continue" : "Fortsett", - "LDAP" : "LDAP", - "Server" : "Tjener", - "Users" : "Brukere", - "Login Attributes" : "Påloggingsattributter", - "Groups" : "Grupper", - "Expert" : "Ekspert", - "Advanced" : "Avansert", - "<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>Advarsel:</b> Appene user_ldap og user_webdavauth er ikke kompatible med hverandre. Uventet oppførsel kan forekomme. Be systemadministratoren om å deaktivere en av dem.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og serveren vil ikke virke. Vennligst be systemadministratoren installere den.", - "Connection Settings" : "Innstillinger for tilkobling", - "Configuration Active" : "Konfigurasjon aktiv", - "When unchecked, this configuration will be skipped." : "Når ikke huket av så vil denne konfigurasjonen bli hoppet over.", - "Backup (Replica) Host" : "Sikkerhetskopierings (Replica) vert", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Oppgi en valgfri reservetjener. Den må være en replika av hovedtjeneren for LDAP/AD.", - "Backup (Replica) Port" : "Reserve (Replika) Port", - "Disable Main Server" : "Deaktiver hovedtjeneren", - "Only connect to the replica server." : "Koble til bare replika-tjeneren.", - "Turn off SSL certificate validation." : "Slå av SSL-sertifikat validering", - "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." : "Ikke anbefalt, bruk kun for testing! Hvis tilkobling bare virker med dette valget, importer LDAP-tjenerens SSL-sertifikat i %s-tjeneren din.", - "Cache Time-To-Live" : "Levetid i mellomlager", - "in seconds. A change empties the cache." : "i sekunder. En endring tømmer bufferen.", - "Directory Settings" : "Innstillinger for katalog", - "User Display Name Field" : "Felt med brukerens visningsnavn", - "The LDAP attribute to use to generate the user's display name." : "LDAP-attributten som skal brukes til å generere brukerens visningsnavn.", - "2nd User Display Name Field" : "2. felt med brukerens visningsnavn", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Valgfritt. En LDAP-attributt som skal legges til visningsnavnet i parentes. Resulterer i f.eks. »John Doe (john.doe@example.org)«.", - "Base User Tree" : "Basis for bruker-tre", - "One User Base DN per line" : "En basis-DN for brukere pr. linje", - "User Search Attributes" : "Attributter for brukersøk", - "Optional; one attribute per line" : "Valgfritt, en attributt pr. linje", - "Group Display Name Field" : "Felt med gruppens visningsnavn", - "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributten som skal brukes til å generere gruppens visningsnavn.", - "Base Group Tree" : "Basis for gruppe-tre", - "One Group Base DN per line" : "En basis-DN for grupper pr. linje", - "Group Search Attributes" : "Attributter for gruppesøk", - "Group-Member association" : "gruppe-medlem assosiasjon", - "Dynamic Group Member URL" : "URL for dynamisk gruppemedlem", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP-attributten som, på gruppe-objekter, inneholder en LDAP søke-URL som bestemmer hvilke objekter som hører til gruppen. (En tom innstilling deaktiverer funksjonaliteten for dynamisk gruppemedlemskap.)", - "Nested Groups" : "Nestede grupper", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Grupper som inneholder grupper er tillatt når denne er slått på. (Virker bare hvis gruppenes member-attributt inneholder DN-er.)", - "Paging chunksize" : "Sidestørrelse", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Sidestørrelsen brukes for sidevise (paged) LDAP-søk som kan returnere store resultater, som f.eks. gjennomløping av brukere eller grupper. (Sett til 0 for å deaktivere sidevis LDAP-spørring i disse situasjonene.)", - "Special Attributes" : "Spesielle attributter", - "Quota Field" : "Felt med lagringskvote", - "Quota Default" : "Standard lagringskvote", - "in bytes" : "i bytes", - "Email Field" : "Felt med e-postadresse", - "User Home Folder Naming Rule" : "Navneregel for brukers hjemmemappe", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "La stå tom for brukernavn (standard). Ellers, spesifiser en LDAP/AD attributt.", - "Internal Username" : "Internt brukernavn", - "Internal Username Attribute:" : "Attributt for internt brukernavn:", - "Override UUID detection" : "Overstyr UUID-påvisning", - "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." : "Som standard blir UUID-attributten påvist automatisk. UUID-attributten brukes til å identifisere LDAP-brukere og -grupper unikt. Det interne brukernavnet vil også bli laget basert på UUID, hvis ikke annet er spesifisert ovenfor. Du kan overstyre innstillingen og oppgi den attributten du ønsker. Du må forsikre deg om at din valgte attributt kan hentes ut både for brukere og for grupper og at den er unik. La stå tomt for standard oppførsel. Endringer vil kun påvirke nylig tilknyttede (opprettede) LDAP-brukere og -grupper.", - "UUID Attribute for Users:" : "UUID-attributt for brukere:", - "UUID Attribute for Groups:" : "UUID-attributt for grupper:", - "Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP-bruker", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Brukernavn brukes til å lagre og tilordne (meta)data. For at brukere skal identifiseres og gjenkjennes presist, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en tilknytning fra brukernavn til LDAP-bruker. Brukernavn som opprettes blir knyttet til LDAP-brukerens UUID. I tillegg mellomlagres DN for å redusere LDAP-kommunikasjon, men det brukes ikke til identifisering. Hvis DN endres vil endringene bli oppdaget. Det interne brukernavnet brukes alle steder. Nullstilling av tilknytningene vil etterlate seg rester overalt. Nullstilling av tilknytningene skjer ikke pr. konfigurasjon, det påvirker alle LDAP-konfigurasjoner! Nullstill aldri tilknytningene i et produksjonsmiljø, kun ved testing eller eksperimentering.", - "Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker", - "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Innstillinger sjekket, men en bruker funnet. Kun den første vil kunne logge inn. Vurder et smalere filter." -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/nds.js b/apps/user_ldap/l10n/nds.js deleted file mode 100644 index 7fe0e420a11..00000000000 --- a/apps/user_ldap/l10n/nds.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Host" : "Host", - "Port" : "Port", - "Password" : "Passwort", - "Continue" : "Fortsetzen" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/nds.json b/apps/user_ldap/l10n/nds.json deleted file mode 100644 index 78a3e1c8efd..00000000000 --- a/apps/user_ldap/l10n/nds.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "Host" : "Host", - "Port" : "Port", - "Password" : "Passwort", - "Continue" : "Fortsetzen" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index 1ddfd85a435..2d3fd78aa99 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -5,12 +5,10 @@ OC.L10N.register( "Failed to delete the server configuration" : "Verwijderen serverconfiguratie mislukt", "Invalid configuration: Anonymous binding is not allowed." : "De configuratie is ongeldig: anonieme bind is niet toegestaan.", "Valid configuration, connection established!" : "Geldige configuratie, verbinding tot stand gebracht", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Geldige configuratie, maar Binding mislukte. Controleer de serverinstellingen en inloggegevens.", - "Invalid configuration. Please have a look at the logs for further details." : "Ongeldige configuratie. Bekijk de logbestanden voor meer details.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Geldige configuratie, maar Binding mislukte. Controleer de serverinstellingen en inloggegevens.", "No action specified" : "Geen actie opgegeven", "No configuration specified" : "Geen configuratie opgegeven", "No data specified" : "Geen gegevens verstrekt", - " Could not set configuration %s" : "Kon configuratie %s niet instellen", "Action does not exist" : "Actie bestaat niet", "Renewing …" : "Herstellen ...", "Very weak password" : "Zeer zwak wachtwoord", @@ -44,24 +42,21 @@ OC.L10N.register( "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Omschakelen van de modus schakelt hat bevragen van LDAP in. Afhankelijk van je LDAP omvang kan dat even duren. Wil je nog steeds omschakelen?", "Mode switch" : "Omschakelen modus", "Select attributes" : "Selecteer attributen", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Gebruiker niet gevonden. Verifieer je inloggegevens en gebruikersnaam. Geldig filter (kopiëren en plakken voor commandoregel validatie): <br/>", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Gebruiker niet gevonden. Controleer je inloggegevens en gebruikersnaam. Geldig filter (kopiëren en plakken voor commandoregel validatie): <br/>", "User found and settings verified." : "Gebruiker gevonden en instellingen geverifieerd.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Bekijk of je je zoekopdracht kunt verfijnen omdat die nu meerdere gebruikers treft en alleen de eerste gebruiker zal kunnen inloggen.", "An unspecified error occurred. Please check log and settings." : "Er trad een ongedefinieerde fout op. Controleer de log en de instellingen.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Het zoekfilter is ongeldig, waarschijnlijk door syntax problemen zoals een ongelijk aantal open- en sluithaakjes. Graag aanpassen.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Er trad een verbindingsfout naar LDAP / AD op, verifieer servernaam, poort en inloggegevens.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "De \"%uid\" opvultekst ontbreekt. Die wordt vervangen door de inlognaam bij het bevragen van LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Er trad een verbindingsfout naar LDAP/AD op, controleer servernaam, poort en inloggegevens.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "De \"%uid\" opvultekst ontbreekt. Die wordt vervangen door de inlognaam bij het bevragen van LDAP/AD.", "Please provide a login name to test against" : "Geef een inlognaam op om opnieuw tegen te testen", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "De groepsbox was uitgeschakeld, omdat de LDAP / AD server het attribuut memberOf niet ondersteunt.", - "Password change rejected. Hint: " : "Wachtwoordwijziging geweigerd. Hint:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "De groepsbox was uitgeschakeld, omdat de LDAP/AD server het attribuut memberOf niet ondersteunt.", "Please login with the new password" : "Login met je nieuwe wachtwoord", "LDAP User backend" : "LDAP User backend", "Your password will expire tomorrow." : "Je wachtwoord vervalt morgen.", "Your password will expire today." : "Je wachtwoord vervalt vandaag.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Je wachtwoord verloopt binnen %n dag.","Je wachtwoord vervalt over %n dagen."], - "LDAP / AD integration" : "LDAP / AD integratie", - "_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"], - "_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"], + "LDAP/AD integration" : "LDAP/AD integratie", "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde LDAP instellingen.", "Could not find the desired feature" : "Kon de gewenste functie niet vinden", "Invalid Host" : "Ongeldige server", @@ -81,9 +76,9 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Dit filter geeft aan welke LDAP groepen toegang hebben tot %s.", "Verify settings and count the groups" : "Verifiëren instellingen en tellen groepen", "When logging in, %s will find the user based on the following attributes:" : "Bij inloggen vindt %s de gebruiker gebaseerd op de volgende attributen:", - "LDAP / AD Username:" : "LDAP / AD gebruikersnaam:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Maakt inloggen tegen de LDAP / AD gebruikersnaam mogelijk, zowel \"uid\" en \"sAMAccountname\" wordt gedetecteerd.", - "LDAP / AD Email Address:" : "LDAP / AD e-mailadres:", + "LDAP/AD Username:" : "LDAP/AD gebruikersnaam:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Maakt inloggen tegen de LDAP/AD gebruikersnaam mogelijk, zowel \"uid\" en \"sAMAccountname\" worden gedetecteerd.", + "LDAP/AD Email Address:" : "LDAP/AD e-mailadres:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Maak inloggen tegen een e-mailattribuut mogelijk. \"mail\" en \"mailPrimaryAddress\" zijn mogelijk.", "Other Attributes:" : "Overige attributen:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definiëert het toe te passen filter als er geprobeerd wordt in te loggen. \"%%uid\" vervangt de gebruikersnaam bij het inloggen. Bijvoorbeeld: \"uid=%%uid\"", @@ -180,15 +175,15 @@ OC.L10N.register( "\"$home\" Placeholder Field" : "\"$home\" Plaatshouder veld", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in een externe opslag configuratie wordt vervangen door de waarde van het gespecificeerde attribuut", "Internal Username" : "Interne gebruikersnaam", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standaard wordt de interne gebruikersnaam afgeleid van het UUID attribuut. dat zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft de beperking dat alleen deze tekens zijn toegestaan: [ a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun overeenkomstige ASCII-waarde of simpelweg weggelaten. Bij conflicten wordt een nummer toegevoegd/verhoogd. De interne gebruikersnaam wordt gebruikt om een gebruiker intern te identificeren. Het is ook de standaardnaam voor de thuis-map van de gebruiker. Het is ook onderdeel van de externe URLs, bijvoorbeeld voor alle *DAV services. Met deze instelling kan het standaardgedrag worden overschreven. Laat het leeg voor de standaardwerkwijze. Wijzigingen hebben alleen effect voor nieuw gekoppelde (toegevoegde) LDAP gebruikers.", "Internal Username Attribute:" : "Interne gebruikersnaam attribuut:", - "Override UUID detection" : "Negeren UUID detectie", + "Override UUID detection" : "UUID-detectie negeren", "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." : "Standaard wordt het UUID-attribuut automatisch herkend. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. Je kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. Je moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", - "UUID Attribute for Users:" : "UUID attribuut voor gebruikers:", - "UUID Attribute for Groups:" : "UUID attribuut voor groepen:", + "UUID Attribute for Users:" : "UUID-attribuut voor gebruikers:", + "UUID Attribute for Groups:" : "UUID-attribuut voor groepen:", "Username-LDAP User Mapping" : "Gebruikersnaam-LDAP gebruikers vertaling", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Gebruikersnamen worden gebruikt om metadata op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de gebruikersnaam naar een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne gebruikersnaam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", "Clear Username-LDAP User Mapping" : "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling", - "Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling" + "Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling", + "Invalid configuration. Please have a look at the logs for further details." : "Ongeldige configuratie. Bekijk de logbestanden voor meer details." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index f893221df1a..a54db70c9e7 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -3,12 +3,10 @@ "Failed to delete the server configuration" : "Verwijderen serverconfiguratie mislukt", "Invalid configuration: Anonymous binding is not allowed." : "De configuratie is ongeldig: anonieme bind is niet toegestaan.", "Valid configuration, connection established!" : "Geldige configuratie, verbinding tot stand gebracht", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Geldige configuratie, maar Binding mislukte. Controleer de serverinstellingen en inloggegevens.", - "Invalid configuration. Please have a look at the logs for further details." : "Ongeldige configuratie. Bekijk de logbestanden voor meer details.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Geldige configuratie, maar Binding mislukte. Controleer de serverinstellingen en inloggegevens.", "No action specified" : "Geen actie opgegeven", "No configuration specified" : "Geen configuratie opgegeven", "No data specified" : "Geen gegevens verstrekt", - " Could not set configuration %s" : "Kon configuratie %s niet instellen", "Action does not exist" : "Actie bestaat niet", "Renewing …" : "Herstellen ...", "Very weak password" : "Zeer zwak wachtwoord", @@ -42,24 +40,21 @@ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Omschakelen van de modus schakelt hat bevragen van LDAP in. Afhankelijk van je LDAP omvang kan dat even duren. Wil je nog steeds omschakelen?", "Mode switch" : "Omschakelen modus", "Select attributes" : "Selecteer attributen", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Gebruiker niet gevonden. Verifieer je inloggegevens en gebruikersnaam. Geldig filter (kopiëren en plakken voor commandoregel validatie): <br/>", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Gebruiker niet gevonden. Controleer je inloggegevens en gebruikersnaam. Geldig filter (kopiëren en plakken voor commandoregel validatie): <br/>", "User found and settings verified." : "Gebruiker gevonden en instellingen geverifieerd.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Bekijk of je je zoekopdracht kunt verfijnen omdat die nu meerdere gebruikers treft en alleen de eerste gebruiker zal kunnen inloggen.", "An unspecified error occurred. Please check log and settings." : "Er trad een ongedefinieerde fout op. Controleer de log en de instellingen.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Het zoekfilter is ongeldig, waarschijnlijk door syntax problemen zoals een ongelijk aantal open- en sluithaakjes. Graag aanpassen.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Er trad een verbindingsfout naar LDAP / AD op, verifieer servernaam, poort en inloggegevens.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "De \"%uid\" opvultekst ontbreekt. Die wordt vervangen door de inlognaam bij het bevragen van LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Er trad een verbindingsfout naar LDAP/AD op, controleer servernaam, poort en inloggegevens.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "De \"%uid\" opvultekst ontbreekt. Die wordt vervangen door de inlognaam bij het bevragen van LDAP/AD.", "Please provide a login name to test against" : "Geef een inlognaam op om opnieuw tegen te testen", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "De groepsbox was uitgeschakeld, omdat de LDAP / AD server het attribuut memberOf niet ondersteunt.", - "Password change rejected. Hint: " : "Wachtwoordwijziging geweigerd. Hint:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "De groepsbox was uitgeschakeld, omdat de LDAP/AD server het attribuut memberOf niet ondersteunt.", "Please login with the new password" : "Login met je nieuwe wachtwoord", "LDAP User backend" : "LDAP User backend", "Your password will expire tomorrow." : "Je wachtwoord vervalt morgen.", "Your password will expire today." : "Je wachtwoord vervalt vandaag.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Je wachtwoord verloopt binnen %n dag.","Je wachtwoord vervalt over %n dagen."], - "LDAP / AD integration" : "LDAP / AD integratie", - "_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"], - "_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"], + "LDAP/AD integration" : "LDAP/AD integratie", "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde LDAP instellingen.", "Could not find the desired feature" : "Kon de gewenste functie niet vinden", "Invalid Host" : "Ongeldige server", @@ -79,9 +74,9 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Dit filter geeft aan welke LDAP groepen toegang hebben tot %s.", "Verify settings and count the groups" : "Verifiëren instellingen en tellen groepen", "When logging in, %s will find the user based on the following attributes:" : "Bij inloggen vindt %s de gebruiker gebaseerd op de volgende attributen:", - "LDAP / AD Username:" : "LDAP / AD gebruikersnaam:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Maakt inloggen tegen de LDAP / AD gebruikersnaam mogelijk, zowel \"uid\" en \"sAMAccountname\" wordt gedetecteerd.", - "LDAP / AD Email Address:" : "LDAP / AD e-mailadres:", + "LDAP/AD Username:" : "LDAP/AD gebruikersnaam:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Maakt inloggen tegen de LDAP/AD gebruikersnaam mogelijk, zowel \"uid\" en \"sAMAccountname\" worden gedetecteerd.", + "LDAP/AD Email Address:" : "LDAP/AD e-mailadres:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Maak inloggen tegen een e-mailattribuut mogelijk. \"mail\" en \"mailPrimaryAddress\" zijn mogelijk.", "Other Attributes:" : "Overige attributen:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definiëert het toe te passen filter als er geprobeerd wordt in te loggen. \"%%uid\" vervangt de gebruikersnaam bij het inloggen. Bijvoorbeeld: \"uid=%%uid\"", @@ -178,15 +173,15 @@ "\"$home\" Placeholder Field" : "\"$home\" Plaatshouder veld", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in een externe opslag configuratie wordt vervangen door de waarde van het gespecificeerde attribuut", "Internal Username" : "Interne gebruikersnaam", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standaard wordt de interne gebruikersnaam afgeleid van het UUID attribuut. dat zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft de beperking dat alleen deze tekens zijn toegestaan: [ a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun overeenkomstige ASCII-waarde of simpelweg weggelaten. Bij conflicten wordt een nummer toegevoegd/verhoogd. De interne gebruikersnaam wordt gebruikt om een gebruiker intern te identificeren. Het is ook de standaardnaam voor de thuis-map van de gebruiker. Het is ook onderdeel van de externe URLs, bijvoorbeeld voor alle *DAV services. Met deze instelling kan het standaardgedrag worden overschreven. Laat het leeg voor de standaardwerkwijze. Wijzigingen hebben alleen effect voor nieuw gekoppelde (toegevoegde) LDAP gebruikers.", "Internal Username Attribute:" : "Interne gebruikersnaam attribuut:", - "Override UUID detection" : "Negeren UUID detectie", + "Override UUID detection" : "UUID-detectie negeren", "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." : "Standaard wordt het UUID-attribuut automatisch herkend. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. Je kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. Je moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", - "UUID Attribute for Users:" : "UUID attribuut voor gebruikers:", - "UUID Attribute for Groups:" : "UUID attribuut voor groepen:", + "UUID Attribute for Users:" : "UUID-attribuut voor gebruikers:", + "UUID Attribute for Groups:" : "UUID-attribuut voor groepen:", "Username-LDAP User Mapping" : "Gebruikersnaam-LDAP gebruikers vertaling", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Gebruikersnamen worden gebruikt om metadata op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de gebruikersnaam naar een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne gebruikersnaam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", "Clear Username-LDAP User Mapping" : "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling", - "Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling" + "Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling", + "Invalid configuration. Please have a look at the logs for further details." : "Ongeldige configuratie. Bekijk de logbestanden voor meer details." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/nn_NO.js b/apps/user_ldap/l10n/nn_NO.js deleted file mode 100644 index c14fc8b78b9..00000000000 --- a/apps/user_ldap/l10n/nn_NO.js +++ /dev/null @@ -1,14 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Select groups" : "Vel grupper", - "Users" : "Brukarar", - "Groups" : "Grupper", - "Help" : "Hjelp", - "Host" : "Tenar", - "Password" : "Passord", - "Back" : "Tilbake", - "Continue" : "Gå vidare", - "Advanced" : "Avansert" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/nn_NO.json b/apps/user_ldap/l10n/nn_NO.json deleted file mode 100644 index 4cd54c39e08..00000000000 --- a/apps/user_ldap/l10n/nn_NO.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "translations": { - "Select groups" : "Vel grupper", - "Users" : "Brukarar", - "Groups" : "Grupper", - "Help" : "Hjelp", - "Host" : "Tenar", - "Password" : "Passord", - "Back" : "Tilbake", - "Continue" : "Gå vidare", - "Advanced" : "Avansert" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/nqo.js b/apps/user_ldap/l10n/nqo.js deleted file mode 100644 index 5494dcae62e..00000000000 --- a/apps/user_ldap/l10n/nqo.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : [""], - "_%s user found_::_%s users found_" : [""] -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/nqo.json b/apps/user_ldap/l10n/nqo.json deleted file mode 100644 index 75f0f056cc4..00000000000 --- a/apps/user_ldap/l10n/nqo.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : [""], - "_%s user found_::_%s users found_" : [""] -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/oc.js b/apps/user_ldap/l10n/oc.js deleted file mode 100644 index 4a06d436198..00000000000 --- a/apps/user_ldap/l10n/oc.js +++ /dev/null @@ -1,157 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Error al moment de la supression de las associacions.", - "Failed to delete the server configuration" : "Fracàs de la supression de la configuracion del servidor", - "The configuration is invalid: anonymous bind is not allowed." : "La configuracion es pas valida : lo ligam anonim es pas autorizat.", - "The configuration is valid and the connection could be established!" : "La configuracion es valida e la connexion pòt èsser establida !", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuracion es valabla, mas lo bind a fracassat. Verificatz los paramètres del servidor e tanben vòstres identificants de connexion.", - "The configuration is invalid. Please have a look at the logs for further details." : "La configuracion es pas valabla. Consultatz los logs per mai de detalhs.", - "No action specified" : "Cap d'accion pas especificada", - "No configuration specified" : "Cap de configuration pas especificada", - "No data specified" : "Cap de donada pas especificada", - " Could not set configuration %s" : "Impossible d'especificar la configuracion %s", - "Action does not exist" : "L'accion existís pas", - "The Base DN appears to be wrong" : "Lo DN de basa es erronèu", - "Configuration incorrect" : "Configuracion incorrècta", - "Configuration incomplete" : "Configuracion incompleta", - "Configuration OK" : "Configuracion OK", - "Select groups" : "Seleccionatz los gropes", - "Select object classes" : "Seleccionar las classas d'objècte", - "Please check the credentials, they seem to be wrong." : "Verificatz vòstras informacions d'identificacion", - "Please specify the port, it could not be auto-detected." : "Especificatz lo pòrt, a pas pogut èsser detectat automaticament", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Lo DN de basa a pas pogut èsser detectat automaticament. Verificatz las informacions d'identificacion, l'òste e lo pòrt.", - "Could not detect Base DN, please enter it manually." : "Impossible de detectar lo DN de basa, especificatz-lo manualament", - "{nthServer}. Server" : "{nthServer}. Servidor", - "No object found in the given Base DN. Please revise." : "Cap d'objècte pas trobat dins lo DN de basa especificat. Verificatz-lo.", - "More than 1,000 directory entries available." : "I a mai de 1000 entradas de repertòri disponiblas.", - " entries available within the provided Base DN" : "entradas disponiblas dins lo DN de basa especificat", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Una error s'es produsida. Verificatz lo DN de basa, e tanben los paramètres de connexion e las informacions d'identificacion.", - "Do you really want to delete the current Server Configuration?" : "Sètz segur que volètz escafar la configuracion servidor actuala ?", - "Confirm Deletion" : "Confirmar la supression", - "Mappings cleared successfully!" : "Associacions suprimidas amb succès !", - "Error while clearing the mappings." : "Error al moment de la supression de las associacions.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Lo ligam anonim es pas autorizat. Mercé de provesir lo DN d'un utilizaire e un senhal.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Error LDAP. La connexion anonima al servidor es probablament pas acceptada.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lo salvament a fracassat. Verificatz que la banca de donadas es operacionala. Recargatz abans de contunhar.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar de mòde activarà las requèstas LDAP automaticas. Segon la talha de vòstre annuari LDAP, aquò pòt préner del temps. Volètz totjorn cambiar de mòde ?", - "Mode switch" : "Cambiar de mòde", - "Select attributes" : "Seleccionar los atributs", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilizaire introbable. Verificatz los atributs de login e lo nom d'utilizaire. Filtre efectiu (de copiar-pegar per validar en linha de comanda):<br/>", - "User found and settings verified." : "Utilizaire trobat e paramètres verificats.", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Paramètres verificats, mas sol lo primièr utilizaire se poirà connectar. Utilizatz puslèu un filtre mens restrictiu.", - "An unspecified error occurred. Please check the settings and the log." : "Una error desconeguda s'es produsida. Verificatz los paramètres e lo log.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Lo filtre de recèrca es pas valid, probablament a causa de problèmas de sintaxi tals coma de parentèsis mancantas. Corregissètz-los.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Una error s'es produsida al moment de la connexion al LDAP / AD. Verificatz l'òste, lo pòrt e las informacions d'identificacion.", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "La cadena %uid es mancanta. Aquesta cadena es remplaçada per l'identificant de connexion al moment de las requèstas LDAP / AD.", - "Please provide a login name to test against" : "Indicatz un identificant de connexion amb lo qual cal testar.", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Los gropes son desactivats perque lo servidor LDAP / AD pren pas en carga memberOf.", - "_%s group found_::_%s groups found_" : ["%s grop trobat","%s gropes trobats"], - "_%s user found_::_%s users found_" : ["%s utilizaire trobat","%s utilizaires trobats"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossible de detectar l'atribut que conten lo nom d'afichatge des utilizaires. Indicatz-lo vos-meteis dins los paramètres ldap avançats.", - "Could not find the desired feature" : "Impossible de trobar la foncion desirada", - "Invalid Host" : "Òste invalid", - "Server" : "Servidor", - "Users" : "Utilizaires", - "Login Attributes" : "Atributs de login", - "Groups" : "Gropes", - "Test Configuration" : "Testar la configuracion", - "Help" : "Ajuda", - "Groups meeting these criteria are available in %s:" : "Los gropes que respèctan aquestes critèris son disponibles dins %s :", - "Only these object classes:" : "Solament aquestas classes d'objèctes :", - "Only from these groups:" : "Solament dins aquestes gropes :", - "Search groups" : "Cercar dins los gropes", - "Available groups" : "Gropes disponibles", - "Selected groups" : "Gropes seleccionats", - "Edit LDAP Query" : "Modificar la requèsta LDAP", - "LDAP Filter:" : "Filtre LDAP :", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Lo filtre especifica quins gropes LDAP an accès a l'instància %s.", - "Verify settings and count groups" : "Verificar los paramètres e comptar los gropes", - "When logging in, %s will find the user based on the following attributes:" : "Al login, %s cercarà l'utilizaire sus basa d'aquestes atributs :", - "LDAP / AD Username:" : "Nom d'utilizaire LDAP / AD :", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Autorizar lo login amb lo nom d'utilizaire LDAP / AD (uid o samaccountname, la deteccion es automatica). ", - "LDAP / AD Email Address:" : "Adreça mail LDAP / AD :", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Autorizar lo login amb una adreça mail. Mail e mailPrimaryAddress son autorizats.", - "Other Attributes:" : "Autres atributs :", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definís lo filtre d'aplicar al moment d'una temptativa de connexion. %%uid remplaça lo nom d'utilizaire. Exemple : \"uid=%%uid\"", - "Test Loginname" : "Loginname de tèst", - "Verify settings" : "Testar los paramètres", - "1. Server" : "1. Servidor", - "%s. Server:" : "%s. Servidor :", - "Add a new and blank configuration" : "Apondre una novèla configuracion verge", - "Copy current configuration into new directory binding" : "Copiar la configuracion actuala cap a una novèla", - "Delete the current configuration" : "Suprimir la configuracion actuala", - "Host" : "Òste", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Podètz ometre lo protocòl, levat se avètz besonh de SSL. Dins aqueste cas, prefixatz amb ldaps://", - "Port" : "Pòrt", - "Detect Port" : "Detectar lo pòrt", - "User DN" : "DN Utilizaire", - "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 de l'utilizaire client pel qual la ligason se deu far, per exemple uid=agent,dc=example,dc=com. Per un accès anonim, daissar lo DN e lo senhal voids.", - "Password" : "Senhal", - "For anonymous access, leave DN and Password empty." : "Per un accès anonim, daissar lo DN utilizaire e lo senhal voids.", - "One Base DN per line" : "Un DN de basa per linha", - "You can specify Base DN for users and groups in the Advanced tab" : "Podètz especificar los DN de basa de vòstres utilizaires e gropes via l'onglet Avançat", - "Detect Base DN" : "Detectar lo DN de basa", - "Test Base DN" : "Testar lo DN de basa", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita las requèstas LDAP automaticas. Melhor per las installacions de grand ample, mas demanda de coneissenças en LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Sasir los filtres LDAP manualament (recomandat pels annuaris de grand ample)", - "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." : "Las classas d'objèctes frequentas pels utilizaires son : organizationalPerson, person, user e inetOrgPerson. Se sètz pas segur de la classa d'utilizar, demandatz a l'administrator de l'annuari.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Lo filtre especifica quins utilizaires LDAP auràn accès a l'instància %s.", - "Verify settings and count users" : "Verificar los paramètres e comptar los utilizaires", - "Saving" : "Enregistrament...", - "Back" : "Retorn", - "Continue" : "Contunhar", - "LDAP" : "LDAP", - "Expert" : "Expèrt", - "Advanced" : "Avançat", - "<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>Avertiment :</b> Las aplicacions user_ldap e user_webdavauth son incompatiblas. De disfoncionaments se pòdon provesir. Contactatz vòstre administrator sistèma per que ne desactive una.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Atencion :</b> Lo modul php LDAP es pas installat, per consequéncia aquesta extension poirà pas foncionar. Contactatz vòstre administrator sistèma per tal que l'installe.", - "Connection Settings" : "Paramètres de connexion", - "Configuration Active" : "Configuracion activa", - "When unchecked, this configuration will be skipped." : "Quand pas marcada, la configuracion serà ignorada.", - "Backup (Replica) Host" : "Servidor de backup (replica)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Provesir un servidor de backup opcional. Se deu agir d'una replica del servidor LDAP/AD principal.", - "Backup (Replica) Port" : "Pòrt del servidor de backup (replica)", - "Disable Main Server" : "Desactivar lo servidor principal", - "Only connect to the replica server." : "Se connectar unicament a la replica", - "Turn off SSL certificate validation." : "Desactivar la validacion dels certificats 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." : "Pas recomandat, d'utilizar amb d'objectius de tèsts unicament. Se la connexion fonciona pas qu'amb aquesta opcion, importatz lo certificat SSL del servidor LDAP dins lo servidor %s.", - "Cache Time-To-Live" : "Durada de vida de l'escondedor (TTL)", - "in seconds. A change empties the cache." : "en segondas. Tot cambiament voida l'escondedor.", - "Directory Settings" : "Paramètres del repertòri", - "User Display Name Field" : "Camp \"nom d'afichatge\" de l'utilizaire", - "The LDAP attribute to use to generate the user's display name." : "L'atribut LDAP utilizat per generar lo nom d'afichatge de l'utilizaire.", - "Base User Tree" : "DN raiç de l'arbre utilizaires", - "One User Base DN per line" : "Un DN de basa utilizaire per linha", - "User Search Attributes" : "Atributs de recèrca utilizaires", - "Optional; one attribute per line" : "Opcional, un atribut per linha", - "Group Display Name Field" : "Camp \"nom d'afichatge\" del grop", - "The LDAP attribute to use to generate the groups's display name." : "L'atribut LDAP utilizat per generar lo nom d'afichatge del grop.", - "Base Group Tree" : "DN raiç de l'arbre gropes", - "One Group Base DN per line" : "Un DN de basa grop per linha", - "Group Search Attributes" : "Atributs de recèrca des gropes", - "Group-Member association" : "Associacion grop-membre", - "Nested Groups" : "Gropes imbricats", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Se activat, los gropes que contenon d'autres gropes son preses en carga (fonciona unicament se l'atribut membre del grop conten de DNs).", - "Paging chunksize" : "Paging chunksize", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize utilizada per las recèrcas LDAP paginadas que pòdon tornar de resultats per lòts coma una enumeracion d'utilizaires o de gropes. (Configurar a 0 per desactivar las recèrcas LDAP paginadas)", - "Special Attributes" : "Atributs especials", - "Quota Field" : "Camp del quòta", - "Quota Default" : "Quòta per defaut", - "in bytes" : "en octets", - "Email Field" : "Camp Email", - "User Home Folder Naming Rule" : "Règla de nomenatge del repertòri utilizaire", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Daissar void per user name (defaut). Podètz tanben especificar un atribut LDAP / AD.", - "Internal Username" : "Nom d'utilizaire intèrne", - "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." : "Per defaut lo nom d'utilizaire intèrne serà creat a partir de l'atribut UUID. Aquò permet d'assegurar que lo nom d'utilizaire es unic e que los caractèrs necessitan pas de conversion. Lo nom d'utilizaire intèrne deu contenir unicament los caractèrs seguents : [ a-zA-Z0-9_.@- ]. Los autres caractèrs son remplaçats per lor correspondéncia ASCII o simplament omeses. En cas de collision, un nombre es apondut/incrementat. Lo nom d'utilizaire intèrne es utilizat per identificar l'utilizaire al dintre del sistèma. Es tanben lo nom per defaut del repertòri utilizaire dins ownCloud. Fa tanben partida de certans URL de servicis, per exemple per totes los servicis *DAV. Lo comportament per defaut pòt èsser modificat amb l'ajuda d'aqueste paramètre. Per obtenir un comportament similar a las versions precedentas a ownCloud 5, sasir lo nom d'utilizaire d'afichar dins lo camp seguent. Daissar a blanc pel comportement per defaut. Las modificacions prendràn efièch solament pels novèls (aponduts) utilizaires LDAP.", - "Internal Username Attribute:" : "Nom d'utilizaire intèrne :", - "Override UUID detection" : "Passar outra la deteccion des 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." : "Per defaut, l'atribut UUID es detectat automaticament. Aqueste atribut es utilizat per identificar los utilizaires e gropes de faiçon fisabla. Un nom d'utilizaire intèrne basat sus l'UUID serà automaticament creat, levat s'es especificat autrament çaisús. Podètz modificar aqueste comportament e definir l'atribut que volètz. Vos cal alara vos assegurar que l'atribut que volètz pòt èsser recuperat pels utilizaires e tanben pels gropes e que siá unic. Daissar a blanc pel comportament per defaut. Las modificacions seràn efectivas unicament pels novèls (aponduts) utilizaires e gropes LDAP.", - "UUID Attribute for Users:" : "Atribut UUID pels Utilizaires :", - "UUID Attribute for Groups:" : "Atribut UUID pels Gropes :", - "Username-LDAP User Mapping" : "Associacion Nom d'utilizaire-Utilizaire LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los noms d'utilizaires son utilizats per l'emmagazinatge e l'assignacion de (meta) donadas. Per identificar e reconéisser precisament los utilizaires, cada utilizaire LDAP aurà un nom intèrne especific. Aquò requerís l'associacion d'un nom d'utilizaire ownCloud a un nom d'utilizaire LDAP. Lo nom d'utilizaire creat es associat a l'atribut UUID de l'utilizaire LDAP. Amai, lo DN es memorizat en escondedor per limitar las interaccions LDAP mas es pas utilizat per l'identificacion. Se lo DN es modificat, aquelas modificacions seràn retrobadas. Sol lo nom intèrne a ownCloud es utilizat al dintre del produch. Suprimir las associacions crearà d'orfanèls e l'accion afectarà totas las configuracions LDAP. SUPRIMISSÈTZ PAS JAMAI LAS ASSOCIACIONS EN ENVIRONAMENT DE PRODUCCION, mas unicament sus d'environaments de tèsts e d'experimentacions.", - "Clear Username-LDAP User Mapping" : "Suprimir l'associacion utilizaire intèrne-utilizaire LDAP", - "Clear Groupname-LDAP Group Mapping" : "Suprimir l'associacion nom de grop-grop LDAP" -}, -"nplurals=2; plural=(n > 1);"); diff --git a/apps/user_ldap/l10n/oc.json b/apps/user_ldap/l10n/oc.json deleted file mode 100644 index ed63543180a..00000000000 --- a/apps/user_ldap/l10n/oc.json +++ /dev/null @@ -1,155 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Error al moment de la supression de las associacions.", - "Failed to delete the server configuration" : "Fracàs de la supression de la configuracion del servidor", - "The configuration is invalid: anonymous bind is not allowed." : "La configuracion es pas valida : lo ligam anonim es pas autorizat.", - "The configuration is valid and the connection could be established!" : "La configuracion es valida e la connexion pòt èsser establida !", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuracion es valabla, mas lo bind a fracassat. Verificatz los paramètres del servidor e tanben vòstres identificants de connexion.", - "The configuration is invalid. Please have a look at the logs for further details." : "La configuracion es pas valabla. Consultatz los logs per mai de detalhs.", - "No action specified" : "Cap d'accion pas especificada", - "No configuration specified" : "Cap de configuration pas especificada", - "No data specified" : "Cap de donada pas especificada", - " Could not set configuration %s" : "Impossible d'especificar la configuracion %s", - "Action does not exist" : "L'accion existís pas", - "The Base DN appears to be wrong" : "Lo DN de basa es erronèu", - "Configuration incorrect" : "Configuracion incorrècta", - "Configuration incomplete" : "Configuracion incompleta", - "Configuration OK" : "Configuracion OK", - "Select groups" : "Seleccionatz los gropes", - "Select object classes" : "Seleccionar las classas d'objècte", - "Please check the credentials, they seem to be wrong." : "Verificatz vòstras informacions d'identificacion", - "Please specify the port, it could not be auto-detected." : "Especificatz lo pòrt, a pas pogut èsser detectat automaticament", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Lo DN de basa a pas pogut èsser detectat automaticament. Verificatz las informacions d'identificacion, l'òste e lo pòrt.", - "Could not detect Base DN, please enter it manually." : "Impossible de detectar lo DN de basa, especificatz-lo manualament", - "{nthServer}. Server" : "{nthServer}. Servidor", - "No object found in the given Base DN. Please revise." : "Cap d'objècte pas trobat dins lo DN de basa especificat. Verificatz-lo.", - "More than 1,000 directory entries available." : "I a mai de 1000 entradas de repertòri disponiblas.", - " entries available within the provided Base DN" : "entradas disponiblas dins lo DN de basa especificat", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Una error s'es produsida. Verificatz lo DN de basa, e tanben los paramètres de connexion e las informacions d'identificacion.", - "Do you really want to delete the current Server Configuration?" : "Sètz segur que volètz escafar la configuracion servidor actuala ?", - "Confirm Deletion" : "Confirmar la supression", - "Mappings cleared successfully!" : "Associacions suprimidas amb succès !", - "Error while clearing the mappings." : "Error al moment de la supression de las associacions.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Lo ligam anonim es pas autorizat. Mercé de provesir lo DN d'un utilizaire e un senhal.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Error LDAP. La connexion anonima al servidor es probablament pas acceptada.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lo salvament a fracassat. Verificatz que la banca de donadas es operacionala. Recargatz abans de contunhar.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar de mòde activarà las requèstas LDAP automaticas. Segon la talha de vòstre annuari LDAP, aquò pòt préner del temps. Volètz totjorn cambiar de mòde ?", - "Mode switch" : "Cambiar de mòde", - "Select attributes" : "Seleccionar los atributs", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilizaire introbable. Verificatz los atributs de login e lo nom d'utilizaire. Filtre efectiu (de copiar-pegar per validar en linha de comanda):<br/>", - "User found and settings verified." : "Utilizaire trobat e paramètres verificats.", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Paramètres verificats, mas sol lo primièr utilizaire se poirà connectar. Utilizatz puslèu un filtre mens restrictiu.", - "An unspecified error occurred. Please check the settings and the log." : "Una error desconeguda s'es produsida. Verificatz los paramètres e lo log.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Lo filtre de recèrca es pas valid, probablament a causa de problèmas de sintaxi tals coma de parentèsis mancantas. Corregissètz-los.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Una error s'es produsida al moment de la connexion al LDAP / AD. Verificatz l'òste, lo pòrt e las informacions d'identificacion.", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "La cadena %uid es mancanta. Aquesta cadena es remplaçada per l'identificant de connexion al moment de las requèstas LDAP / AD.", - "Please provide a login name to test against" : "Indicatz un identificant de connexion amb lo qual cal testar.", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Los gropes son desactivats perque lo servidor LDAP / AD pren pas en carga memberOf.", - "_%s group found_::_%s groups found_" : ["%s grop trobat","%s gropes trobats"], - "_%s user found_::_%s users found_" : ["%s utilizaire trobat","%s utilizaires trobats"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossible de detectar l'atribut que conten lo nom d'afichatge des utilizaires. Indicatz-lo vos-meteis dins los paramètres ldap avançats.", - "Could not find the desired feature" : "Impossible de trobar la foncion desirada", - "Invalid Host" : "Òste invalid", - "Server" : "Servidor", - "Users" : "Utilizaires", - "Login Attributes" : "Atributs de login", - "Groups" : "Gropes", - "Test Configuration" : "Testar la configuracion", - "Help" : "Ajuda", - "Groups meeting these criteria are available in %s:" : "Los gropes que respèctan aquestes critèris son disponibles dins %s :", - "Only these object classes:" : "Solament aquestas classes d'objèctes :", - "Only from these groups:" : "Solament dins aquestes gropes :", - "Search groups" : "Cercar dins los gropes", - "Available groups" : "Gropes disponibles", - "Selected groups" : "Gropes seleccionats", - "Edit LDAP Query" : "Modificar la requèsta LDAP", - "LDAP Filter:" : "Filtre LDAP :", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Lo filtre especifica quins gropes LDAP an accès a l'instància %s.", - "Verify settings and count groups" : "Verificar los paramètres e comptar los gropes", - "When logging in, %s will find the user based on the following attributes:" : "Al login, %s cercarà l'utilizaire sus basa d'aquestes atributs :", - "LDAP / AD Username:" : "Nom d'utilizaire LDAP / AD :", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Autorizar lo login amb lo nom d'utilizaire LDAP / AD (uid o samaccountname, la deteccion es automatica). ", - "LDAP / AD Email Address:" : "Adreça mail LDAP / AD :", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Autorizar lo login amb una adreça mail. Mail e mailPrimaryAddress son autorizats.", - "Other Attributes:" : "Autres atributs :", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definís lo filtre d'aplicar al moment d'una temptativa de connexion. %%uid remplaça lo nom d'utilizaire. Exemple : \"uid=%%uid\"", - "Test Loginname" : "Loginname de tèst", - "Verify settings" : "Testar los paramètres", - "1. Server" : "1. Servidor", - "%s. Server:" : "%s. Servidor :", - "Add a new and blank configuration" : "Apondre una novèla configuracion verge", - "Copy current configuration into new directory binding" : "Copiar la configuracion actuala cap a una novèla", - "Delete the current configuration" : "Suprimir la configuracion actuala", - "Host" : "Òste", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Podètz ometre lo protocòl, levat se avètz besonh de SSL. Dins aqueste cas, prefixatz amb ldaps://", - "Port" : "Pòrt", - "Detect Port" : "Detectar lo pòrt", - "User DN" : "DN Utilizaire", - "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 de l'utilizaire client pel qual la ligason se deu far, per exemple uid=agent,dc=example,dc=com. Per un accès anonim, daissar lo DN e lo senhal voids.", - "Password" : "Senhal", - "For anonymous access, leave DN and Password empty." : "Per un accès anonim, daissar lo DN utilizaire e lo senhal voids.", - "One Base DN per line" : "Un DN de basa per linha", - "You can specify Base DN for users and groups in the Advanced tab" : "Podètz especificar los DN de basa de vòstres utilizaires e gropes via l'onglet Avançat", - "Detect Base DN" : "Detectar lo DN de basa", - "Test Base DN" : "Testar lo DN de basa", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita las requèstas LDAP automaticas. Melhor per las installacions de grand ample, mas demanda de coneissenças en LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Sasir los filtres LDAP manualament (recomandat pels annuaris de grand ample)", - "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." : "Las classas d'objèctes frequentas pels utilizaires son : organizationalPerson, person, user e inetOrgPerson. Se sètz pas segur de la classa d'utilizar, demandatz a l'administrator de l'annuari.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Lo filtre especifica quins utilizaires LDAP auràn accès a l'instància %s.", - "Verify settings and count users" : "Verificar los paramètres e comptar los utilizaires", - "Saving" : "Enregistrament...", - "Back" : "Retorn", - "Continue" : "Contunhar", - "LDAP" : "LDAP", - "Expert" : "Expèrt", - "Advanced" : "Avançat", - "<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>Avertiment :</b> Las aplicacions user_ldap e user_webdavauth son incompatiblas. De disfoncionaments se pòdon provesir. Contactatz vòstre administrator sistèma per que ne desactive una.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Atencion :</b> Lo modul php LDAP es pas installat, per consequéncia aquesta extension poirà pas foncionar. Contactatz vòstre administrator sistèma per tal que l'installe.", - "Connection Settings" : "Paramètres de connexion", - "Configuration Active" : "Configuracion activa", - "When unchecked, this configuration will be skipped." : "Quand pas marcada, la configuracion serà ignorada.", - "Backup (Replica) Host" : "Servidor de backup (replica)", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Provesir un servidor de backup opcional. Se deu agir d'una replica del servidor LDAP/AD principal.", - "Backup (Replica) Port" : "Pòrt del servidor de backup (replica)", - "Disable Main Server" : "Desactivar lo servidor principal", - "Only connect to the replica server." : "Se connectar unicament a la replica", - "Turn off SSL certificate validation." : "Desactivar la validacion dels certificats 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." : "Pas recomandat, d'utilizar amb d'objectius de tèsts unicament. Se la connexion fonciona pas qu'amb aquesta opcion, importatz lo certificat SSL del servidor LDAP dins lo servidor %s.", - "Cache Time-To-Live" : "Durada de vida de l'escondedor (TTL)", - "in seconds. A change empties the cache." : "en segondas. Tot cambiament voida l'escondedor.", - "Directory Settings" : "Paramètres del repertòri", - "User Display Name Field" : "Camp \"nom d'afichatge\" de l'utilizaire", - "The LDAP attribute to use to generate the user's display name." : "L'atribut LDAP utilizat per generar lo nom d'afichatge de l'utilizaire.", - "Base User Tree" : "DN raiç de l'arbre utilizaires", - "One User Base DN per line" : "Un DN de basa utilizaire per linha", - "User Search Attributes" : "Atributs de recèrca utilizaires", - "Optional; one attribute per line" : "Opcional, un atribut per linha", - "Group Display Name Field" : "Camp \"nom d'afichatge\" del grop", - "The LDAP attribute to use to generate the groups's display name." : "L'atribut LDAP utilizat per generar lo nom d'afichatge del grop.", - "Base Group Tree" : "DN raiç de l'arbre gropes", - "One Group Base DN per line" : "Un DN de basa grop per linha", - "Group Search Attributes" : "Atributs de recèrca des gropes", - "Group-Member association" : "Associacion grop-membre", - "Nested Groups" : "Gropes imbricats", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Se activat, los gropes que contenon d'autres gropes son preses en carga (fonciona unicament se l'atribut membre del grop conten de DNs).", - "Paging chunksize" : "Paging chunksize", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize utilizada per las recèrcas LDAP paginadas que pòdon tornar de resultats per lòts coma una enumeracion d'utilizaires o de gropes. (Configurar a 0 per desactivar las recèrcas LDAP paginadas)", - "Special Attributes" : "Atributs especials", - "Quota Field" : "Camp del quòta", - "Quota Default" : "Quòta per defaut", - "in bytes" : "en octets", - "Email Field" : "Camp Email", - "User Home Folder Naming Rule" : "Règla de nomenatge del repertòri utilizaire", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Daissar void per user name (defaut). Podètz tanben especificar un atribut LDAP / AD.", - "Internal Username" : "Nom d'utilizaire intèrne", - "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." : "Per defaut lo nom d'utilizaire intèrne serà creat a partir de l'atribut UUID. Aquò permet d'assegurar que lo nom d'utilizaire es unic e que los caractèrs necessitan pas de conversion. Lo nom d'utilizaire intèrne deu contenir unicament los caractèrs seguents : [ a-zA-Z0-9_.@- ]. Los autres caractèrs son remplaçats per lor correspondéncia ASCII o simplament omeses. En cas de collision, un nombre es apondut/incrementat. Lo nom d'utilizaire intèrne es utilizat per identificar l'utilizaire al dintre del sistèma. Es tanben lo nom per defaut del repertòri utilizaire dins ownCloud. Fa tanben partida de certans URL de servicis, per exemple per totes los servicis *DAV. Lo comportament per defaut pòt èsser modificat amb l'ajuda d'aqueste paramètre. Per obtenir un comportament similar a las versions precedentas a ownCloud 5, sasir lo nom d'utilizaire d'afichar dins lo camp seguent. Daissar a blanc pel comportement per defaut. Las modificacions prendràn efièch solament pels novèls (aponduts) utilizaires LDAP.", - "Internal Username Attribute:" : "Nom d'utilizaire intèrne :", - "Override UUID detection" : "Passar outra la deteccion des 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." : "Per defaut, l'atribut UUID es detectat automaticament. Aqueste atribut es utilizat per identificar los utilizaires e gropes de faiçon fisabla. Un nom d'utilizaire intèrne basat sus l'UUID serà automaticament creat, levat s'es especificat autrament çaisús. Podètz modificar aqueste comportament e definir l'atribut que volètz. Vos cal alara vos assegurar que l'atribut que volètz pòt èsser recuperat pels utilizaires e tanben pels gropes e que siá unic. Daissar a blanc pel comportament per defaut. Las modificacions seràn efectivas unicament pels novèls (aponduts) utilizaires e gropes LDAP.", - "UUID Attribute for Users:" : "Atribut UUID pels Utilizaires :", - "UUID Attribute for Groups:" : "Atribut UUID pels Gropes :", - "Username-LDAP User Mapping" : "Associacion Nom d'utilizaire-Utilizaire LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Los noms d'utilizaires son utilizats per l'emmagazinatge e l'assignacion de (meta) donadas. Per identificar e reconéisser precisament los utilizaires, cada utilizaire LDAP aurà un nom intèrne especific. Aquò requerís l'associacion d'un nom d'utilizaire ownCloud a un nom d'utilizaire LDAP. Lo nom d'utilizaire creat es associat a l'atribut UUID de l'utilizaire LDAP. Amai, lo DN es memorizat en escondedor per limitar las interaccions LDAP mas es pas utilizat per l'identificacion. Se lo DN es modificat, aquelas modificacions seràn retrobadas. Sol lo nom intèrne a ownCloud es utilizat al dintre del produch. Suprimir las associacions crearà d'orfanèls e l'accion afectarà totas las configuracions LDAP. SUPRIMISSÈTZ PAS JAMAI LAS ASSOCIACIONS EN ENVIRONAMENT DE PRODUCCION, mas unicament sus d'environaments de tèsts e d'experimentacions.", - "Clear Username-LDAP User Mapping" : "Suprimir l'associacion utilizaire intèrne-utilizaire LDAP", - "Clear Groupname-LDAP Group Mapping" : "Suprimir l'associacion nom de grop-grop LDAP" -},"pluralForm" :"nplurals=2; plural=(n > 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/pa.js b/apps/user_ldap/l10n/pa.js deleted file mode 100644 index ea1d1cce4e7..00000000000 --- a/apps/user_ldap/l10n/pa.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Groups" : "ਗਰੁੱਪ", - "Password" : "ਪਾਸਵਰ" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/pa.json b/apps/user_ldap/l10n/pa.json deleted file mode 100644 index d1943cb1ae1..00000000000 --- a/apps/user_ldap/l10n/pa.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "Groups" : "ਗਰੁੱਪ", - "Password" : "ਪਾਸਵਰ" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/pl.js b/apps/user_ldap/l10n/pl.js index e102f53fd1c..5ffcf80e841 100644 --- a/apps/user_ldap/l10n/pl.js +++ b/apps/user_ldap/l10n/pl.js @@ -5,12 +5,13 @@ OC.L10N.register( "Failed to delete the server configuration" : "Nie można usunąć konfiguracji serwera", "Invalid configuration: Anonymous binding is not allowed." : "Nieprawidłowa konfiguracja: Anonimowe podpinanie jest niedozwolone.", "Valid configuration, connection established!" : "Konfiguracja poprawna, połączenie ustanowione!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfiguracja prawidłowa, ale podpinanie nie powiodło się. Sprawdź konfigurację serwera i poświadczenia.", - "Invalid configuration. Please have a look at the logs for further details." : "Nieprawidłowa konfiguracja. Sprawdź logi po więcej szczegółów.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfiguracja poprawna, ale powiązanie nie powiodło się. Sprawdź konfigurację serwera i poświadczenia.", + "Invalid configuration: %s" : "Nieprawidłowa konfiguracja: %s", "No action specified" : "Nie określono akcji", "No configuration specified" : "Nie określono konfiguracji", "No data specified" : "Nie określono danych", - " Could not set configuration %s" : "Nie można ustawić konfiguracji %s", + "Invalid data specified" : "Podano nieprawidłowe dane", + "Could not set configuration %1$s to %2$s" : "Nie można ustawić konfiguracji %1$s na %2$s", "Action does not exist" : "Akcja nie istnieje", "Renewing …" : "Odnawianie…", "Very weak password" : "Bardzo słabe hasło", @@ -36,44 +37,61 @@ OC.L10N.register( "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Wystąpił błąd. Proszę sprawdzić Base DN oraz ustawienia połączenia i dane dostępowe.", "Do you really want to delete the current Server Configuration?" : "Czy chcesz usunąć bieżącą konfigurację serwera?", "Confirm Deletion" : "Potwierdź usunięcie", - "Mappings cleared successfully!" : "Mapowanie wyczyszczone!", + "Mappings cleared successfully!" : "Mapowania zostały pomyślnie wyczyszczone!", "Error while clearing the mappings." : "Błąd podczas czyszczenia mapowania.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonimowe połączenie nie jest dozwolone. Proszę podać DN użytkownika i hasło.", "LDAP Operations error. Anonymous bind might not be allowed." : "Błąd operacji LDAP. Anonimowe połączenie nie jest dozwolone.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Zapisywanie nie powiodło się. Upewnij się, że baza danych działa. Załaduj ponownie przed kontynuowaniem.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Zapisywanie nie powiodło się. Upewnij się, że baza danych działa. Wczytaj ponownie przed kontynuowaniem.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Zmiana trybu włączy automatyczne odpytywanie LDAP-a. W zależności od jego wielkości może to trochę potrwać. Nadal chcesz zmienić tryb?", "Mode switch" : "Przełącznik trybów", "Select attributes" : "Wybierz atrybuty", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Użytkownik nie znaleziony. Sprawdź nazwę i atrybuty logowania. Filtr efektywny (aby skopiować i wkleić do wiersza poleceń): <br/>", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Użytkownik nie znaleziony. Sprawdź atrybuty logowania i nazwę użytkownika. Filtr efektywny (do kopiowania i wklejania w celu sprawdzenia poprawności w wierszu poleceń): <br/>", "User found and settings verified." : "Znaleziono użytkownika i zweryfikowano ustawienia.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Rozważ zawężenie wyszukiwania, gdyż obejmuje ono wielu użytkowników, z tylko pierwszy będzie mógł się zalogować.", "An unspecified error occurred. Please check log and settings." : "Wystąpił nieoczekiwany błąd. Sprawdź logi i ustawienia.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr szukania jest nieprawidłowy, prawdopodobnie przez problem składniowy taki jak nierówna liczba otwartych i zamkniętych nawiasów. Zweryfikuj to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Wystąpił błąd połączenia z LDAP/AD, sprawdź host, port i poświadczenia.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Brakuje tekstu zastępczego \"%uid\". W trakcie odpytywania serwera LDAP/AD zostanie on zastąpiony nazwą logowania.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Wystąpił błąd połączenia z LDAP/AD. Sprawdź hosta, port i poświadczenia.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Brak symbolu zastępczego \"%uid\". Zostanie zastąpiony nazwą logowania podczas odpytywania LDAP/AD.", "Please provide a login name to test against" : "Wprowadź nazwę użytkownika, aby wykonać test ponownie", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Wpisy dla grup zostały wyłączone, ponieważ LDAP/AD nie wspiera memberOf.", - "Password change rejected. Hint: " : "Zmiana hasła odrzucona: Wskazówka:", - "Please login with the new password" : "Proszę się zalogować z nowym hasłem", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Pole do wpisu dla grupy zostało wyłączone, ponieważ LDAP/AD nie obsługuje memberOf.", + "Password change rejected. Hint: %s" : "Zmiana hasła odrzucona: Wskazówka: %s", + "Mandatory field \"%s\" left empty" : "Obowiązkowe pole \"%s\" pozostawiono puste", + "A password is given, but not an LDAP agent" : "Podano hasło, ale nie wskazano agenta LDAP", + "No password is given for the user agent" : "Nie podano hasła dla agenta użytkownika", + "No LDAP base DN was given" : "Nie podano bazowego DN LDAP", + "User base DN is not a subnode of global base DN" : "Bazowy DN użytkownika nie jest podwęzłem globalnego DN", + "Group base DN is not a subnode of global base DN" : "Bazowy DN grupy nie jest podwęzłem globalnego DN", + "Login filter does not contain %s placeholder." : "Filtr logowania nie zawiera zastępnika %s.", + "Please login with the new password" : "Zaloguj się przy użyciu nowego hasła", "LDAP User backend" : "Moduł użytkownika LDAP", "Your password will expire tomorrow." : "Twoje hasło wygasa jutro.", "Your password will expire today." : "Twoje hasło wygasa dzisiaj.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Twoje hasło wygaśnie w ciągu %n dnia.","Twoje hasło wygaśnie w ciągu %n dni.","Twoje hasło wygaśnie w ciągu %n dni.","Twoje hasło wygaśnie w ciągu %n dni."], - "LDAP / AD integration" : "Integracja z LDAP/AD", - "_%s group found_::_%s groups found_" : ["%s znaleziona grupa","%s znalezionych grup","%s znalezionych grup","%s znalezionych grup"], - "_%s user found_::_%s users found_" : ["%s znaleziony użytkownik","%s znalezionych użytkowników","%s znalezionych użytkowników","%s znalezionych użytkowników"], + "LDAP/AD integration" : "Integracja z LDAP/AD", + "LDAP Connection" : "Połączenie LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Dla tej konfiguracji LDAP: %s połączenie nie powiodło się","Połączenie nie powiodło się dla %n konfiguracji LDAP: %s","Połączenie nie powiodło się dla %n konfiguracji LDAP: %s","Połączenie nie powiodło się dla %n konfiguracji LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Dla tej konfiguracji LDAP: %s wyszukiwanie nie powiodło się ","Wyszukiwanie nie powiodło się dla %n konfiguracji LDAP: %s","Wyszukiwanie nie powiodło się dla %n konfiguracji LDAP: %s","Wyszukiwanie nie powiodło się dla %n konfiguracji LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Jest jedna nieaktywna konfiguracja LDAP\" %s","Istnieją %n nieaktywne konfiguracje LDAP: %s","Istnieje %n nieaktywnych konfiguracji LDAP: %s","Istnieje %n nieaktywnych konfiguracji LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Łączenie i wyszukiwanie działa dla skonfigurowanego połączenia LDAP (%s)","Łączenie i wyszukiwanie działa dla wszystkich %n skonfigurowanych połączeń LDAP (%s)","Łączenie i wyszukiwanie działa dla wszystkich %n skonfigurowanych połączeń LDAP (%s)","Łączenie i wyszukiwanie działa dla wszystkich %nskonfigurowanych połączeń LDAP (%s)"], + "Invalid LDAP UUIDs" : "Nieprawidłowy LDAP UUID", + "None found" : "Nie znaleziono", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Znaleziono nieprawidłowe identyfikatory UUID kont lub grup LDAP. Sprawdź ustawienia „Zastąp wykrywanie UUID” w części eksperckiej konfiguracji LDAP i użyj „occ ldap:update-uuid”, aby je zaktualizować.", + "_%n group found_::_%n groups found_" : ["Znaleziono %n grupę","Znaleziono %n grupy","Znaleziono %n grup","Znaleziono %n grup"], + "> 1000 groups found" : "> 1000 znalezionych grup", + "> 1000 users found" : "> 1000 znalezionych użytkowników", + "_%n user found_::_%n users found_" : ["Znaleziono %n użytkownika","Znaleziono %n użytkowników","Znaleziono %n użytkowników","Znaleziono %n użytkowników"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nie można wykryć atrybutu wyświetlania nazwy użytkownika.", "Could not find the desired feature" : "Nie można znaleźć żądanej funkcji", - "Invalid Host" : "Niepoprawny Host", + "Invalid Host" : "Nieprawidłowy host", "LDAP user and group backend" : "Zaplecze użytkowników i grup LDAP", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Ta aplikacja umożliwia administratorom podłączenie Nextcloud do katalogu użytkownika opartego na LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ta aplikacja umożliwia administratorom łączenie Nextcloud z katalogiem użytkowników opartym na LDAP w celu uwierzytelniania i udostępniania użytkowników, grup i atrybutów użytkowników. Administratorzy mogą skonfigurować tę aplikację do łączenia się z jednym lub większą liczbą katalogów LDAP lub katalogów aktywnych za pośrednictwem interfejsu LDAP. Atrybuty, takie jak limity użytkowników, wiadomości e-mail, zdjęcia awatarów, członkostwa w grupach i inne, można pobrać do Nextcloud z katalogu z odpowiednimi zapytaniami i filtrami.\n\nUżytkownik loguje się do Nextcloud za pomocą swoich poświadczeń LDAP lub AD i uzyskuje dostęp na podstawie żądania uwierzytelnienia obsługiwanego przez serwer LDAP lub AD. Nextcloud nie przechowuje haseł LDAP lub AD, poświadczenia te są użyte do uwierzytelnienia użytkownika. Następnie Nextcloud używa sesji dla ID użytkownika. Więcej informacji można znaleźć w dokumentacji użytkownika LDAP i zaplecza grupy.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aplikacja umożliwia administratorom podłączenie Nextcloud do katalogu użytkownika opartego na LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aplikacja umożliwia administratorom łączenie Nextcloud z katalogiem użytkowników opartym na LDAP w celu uwierzytelniania i udostępniania użytkowników, grup i atrybutów użytkowników. Administratorzy mogą skonfigurować tę aplikację do łączenia się z jednym lub większą liczbą katalogów LDAP lub katalogów aktywnych za pośrednictwem interfejsu LDAP. Atrybuty, takie jak limity użytkowników, wiadomości e-mail, zdjęcia awatarów, członkostwa w grupach i inne, można pobrać do Nextcloud z katalogu z odpowiednimi zapytaniami i filtrami.\n\nUżytkownik loguje się do Nextcloud za pomocą swoich poświadczeń LDAP lub AD i uzyskuje dostęp na podstawie żądania uwierzytelnienia obsługiwanego przez serwer LDAP lub AD. Nextcloud nie przechowuje haseł LDAP lub AD, poświadczenia te są użyte do uwierzytelnienia użytkownika. Następnie Nextcloud używa sesji dla ID użytkownika. Więcej informacji można znaleźć w dokumentacji użytkownika LDAP i zaplecza grupy.", "Test Configuration" : "Sprawdź konfigurację", "Help" : "Pomoc", - "Groups meeting these criteria are available in %s:" : "Przyłączenie do grupy z tymi ustawieniami dostępne jest w %s:", + "Groups meeting these criteria are available in %s:" : "Grupy spełniające te kryteria są dostępne w %s:", "Only these object classes:" : "Tylko te klasy obiektów:", "Only from these groups:" : "Tylko z tych grup:", - "Search groups" : "Przeszukaj grupy", + "Search groups" : "Szukaj grup", "Available groups" : "Dostępne grupy", "Selected groups" : "Wybrane grupy", "Edit LDAP Query" : "Edytuj zapytanie LDAP", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr określa, które grupy LDAP powinny mieć dostęp do instancji %s.", "Verify settings and count the groups" : "Zweryfikuj ustawienia i policz grupy", "When logging in, %s will find the user based on the following attributes:" : "Podczas logowania, %s znajdzie użytkownika na podstawie następujących atrybutów:", - "LDAP / AD Username:" : "Nazwa użytkownika LDAP/AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Zezwalaj również na logowanie typu LDAP/AD, który może być w postaci \"uid\" lub \"sAMAccountName\".", - "LDAP / AD Email Address:" : "Adres e-mail LDAP/AD:", + "LDAP/AD Username:" : "Nazwa użytkownika LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umożliwia logowanie przy użyciu nazwy użytkownika LDAP/AD, która ma postać \"uid\" lub \"sAMAccountName\" i zostanie wykryta.", + "LDAP/AD Email Address:" : "Adres e-mail LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Zezwalaj również na logowanie atrybutem e-mail. Dozwolone \"mail\" i \"mailPrimaryAddress\".", "Other Attributes:" : "Inne atrybuty:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definiuje filter do zastosowania podczas próby logowania. \"%%uid\" zastępuje nazwę użytkownika podczas logowania. Przykład: \"uid=%%uid\"", "Test Loginname" : "Testowa nazwa użytkownika", + "Attempts to receive a DN for the given loginname and the current login filter" : "Próbuje otrzymać nazwę wyróżniającą dla podanej nazwy użytkownika i bieżącego filtra logowania", "Verify settings" : "Weryfikuj ustawienia", "%s. Server:" : "%s. Serwer:", "Add a new configuration" : "Dodaj nową konfigurację", @@ -113,7 +132,7 @@ OC.L10N.register( "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr określa, którzy użytkownicy LDAP powinni mieć dostęp do instancji %s.", "Verify settings and count users" : "Sprawdź ustawienia i policz użytkowników", "Saving" : "Zapisuję", - "Back" : "Wróć", + "Back" : "Wstecz", "Continue" : "Kontynuuj ", "Please renew your password." : "Proszę odnowić hasło", "An internal error occurred." : "Wystąpił wewnętrzny błąd.", @@ -130,7 +149,7 @@ OC.L10N.register( "Expert" : "Eksperckie", "Advanced" : "Zaawansowane", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Ostrzeżenie:</b> Moduł PHP LDAP jest niezainstalowany i nie będzie działał. Poproś administratora systemu o zainstalowanie go.", - "Connection Settings" : "Konfiguracja połączeń", + "Connection Settings" : "Ustawienia połączenia", "Configuration Active" : "Konfiguracja archiwum", "When unchecked, this configuration will be skipped." : "Gdy niezaznaczone, ta konfiguracja zostanie pominięta.", "Backup (Replica) Host" : "Kopia zapasowa (repliki) host", @@ -151,6 +170,8 @@ OC.L10N.register( "One User Base DN per line" : "Jeden użytkownik Bazy DN na linię", "User Search Attributes" : "Szukaj atrybutów", "Optional; one attribute per line" : "Opcjonalnie; jeden atrybut w wierszu", + "Disable users missing from LDAP" : "Wyłącz brakujących użytkowników w LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Po włączeniu, użytkownicy zaimportowani z LDAP, których brakuje, zostaną wyłączeni", "Group Display Name Field" : "Pole wyświetlanej nazwy grupy", "The LDAP attribute to use to generate the groups's display name." : "Atrybut LDAP służący do generowania wyświetlanej nazwy grupy ownCloud.", "Base Group Tree" : "Drzewo bazy grup", @@ -158,7 +179,7 @@ OC.L10N.register( "Group Search Attributes" : "Grupa atrybutów wyszukaj", "Group-Member association" : "Członek grupy stowarzyszenia", "Dynamic Group Member URL" : "URL Członka Grupy Dynamicznej", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP przypisuje grupom obiekty, zawierające adres wyszukiwania LDAP-a, co determinuje, który obiekt należy do grupy. (Brak ustawienia wyłączy funkcjonalność dynamicznego członkostwa grup)", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Atrybut LDAP, który w obiektach grupy zawiera adres URL wyszukiwania LDAP określa, które obiekty należą do grupy. (Puste ustawienie wyłącza funkcję dynamicznego członkostwa w grupie.)", "Nested Groups" : "Grupy zagnieżdżone", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kiedy włączone, grupy, które zawierają grupy, są wspierane. (Działa tylko, jeśli członek grupy ma ustawienie DNs)", "Paging chunksize" : "Wielkość stronicowania", @@ -175,12 +196,35 @@ OC.L10N.register( "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Nadpisz domyślny limit przestrzeni dla użytkowników LDAP-a, którzy nie mają go ustawionego w \"Polu limitu prestrzeni\".", "Email Field" : "Pole e-mail", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Ustaw adres e-mail użytkowników z ich atrybutu LDAP. Zostaw puste dla domyślnego zachowania.", - "User Home Folder Naming Rule" : "Reguły nazewnictwa folderu domowego użytkownika", + "User Home Folder Naming Rule" : "Reguły nazewnictwa katalogu domowego użytkownika", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pozostaw puste dla nazwy użytkownika (domyślnie). W przeciwnym razie podaj atrybut LDAP/AD.", "\"$home\" Placeholder Field" : "Pole zastępcze \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home w zewnętrznej konfiguracji pamięci zostanie zastąpiony wartością określonego atrybutu", + "User Profile Attributes" : "Atrybuty profilu użytkownika", + "Phone Field" : "Pole Telefonu", + "User profile Phone will be set from the specified attribute" : "Telefon profilu użytkownika zostanie ustawiony na podstawie określonego atrybutu", + "Website Field" : "Pole witryny internetowej", + "User profile Website will be set from the specified attribute" : "Witryna internetowa profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Address Field" : "Pole adresu", + "User profile Address will be set from the specified attribute" : "Adres profilu użytkownika zostanie ustawiony na podstawie określonego atrybutu", + "Twitter Field" : "Pole Twittera/X", + "User profile Twitter will be set from the specified attribute" : "Twitter profilu użytkownika zostanie ustawiony na podstawie określonego atrybutu", + "Fediverse Field" : "Pole Fediversum", + "User profile Fediverse will be set from the specified attribute" : "Fediverse profilu użytkownika zostanie ustawione na podstawie określonego atrybutu", + "Organisation Field" : "Pole organizacji", + "User profile Organisation will be set from the specified attribute" : "Organizacja profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Role Field" : "Pole roli", + "User profile Role will be set from the specified attribute" : "Rola w profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Headline Field" : "Pole nagłówka", + "User profile Headline will be set from the specified attribute" : "Nagłówek profilu użytkownika zostanie ustawiony na podstawie określonego atrybutu", + "Biography Field" : "Pole biografii", + "User profile Biography will be set from the specified attribute" : "Biografia profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Birthdate Field" : "Pole daty urodzenia", + "User profile Date of birth will be set from the specified attribute" : "Data urodzenia w profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Pronouns Field" : "Pole zaimków", + "User profile Pronouns will be set from the specified attribute" : "Zaimki w profilu użytkownika zostaną ustawione na podstawie określonego atrybutu", "Internal Username" : "Wewnętrzna nazwa użytkownika", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Domyślnie wewnętrzne nazwy użytkowników będą takie same jak atrybut UUID. Zapewnia to unikalność nazw użytkowników, a znaki nie muszą być konwertowane. Znaki z jakich może się składać wewnętrzna nazwa użytkownika to: [ a-zA-Z0-9_.@- ]. Inne znaki są zastępowane przez ich odpowiedniki ASCII lub po prostu pomijane. Gdy nastąpi kolizja nazw zostanie dodany/zwiększony numer. Wewnętrzna nazwa użytkownika jest używana do identyfikacji użytkownika wewnętrznie. To również domyślna nazwa dla katalogu domowego użytkownika. To też część adresu zdalnego dla instancji dla wszystkich usług *DAV. Z tym ustawieniem domyślne zachowanie może być nadpisane. Zostaw to puste dla domyślnego zachowania. Zmiany będą miały miejsce tylko dla nowo zamapowanych (dodanych) użytkowników LDAP-a.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Domyślnie wewnętrzna nazwa użytkownika zostanie utworzona z atrybutu UUID. Zapewnia to unikalność nazwy użytkownika, a znaki nie muszą być konwertowane. Wewnętrzna nazwa użytkownika ma ograniczenie, dlatego dozwolone są tylko znaki: [a-zA-Z0-9_.@-]. Inne znaki są zastępowane przez ich odpowiedniki ASCII lub po prostu pomijane. W przypadku kolizji zostanie dodany/zwiększony numer. Wewnętrzna nazwa użytkownika służy do wewnętrznej identyfikacji użytkownika. Jest również domyślną nazwą katalogu domowego użytkownika oraz częścią zdalnych adresów URL, na przykład dla wszystkich usług DAV. Dzięki temu ustawieniu można zastąpić domyślne zachowanie. Zmiany będą miały wpływ tylko na nowo zmapowanych (dodanych) użytkowników LDAP. Dla domyślnego zachowania pozostaw to puste.", "Internal Username Attribute:" : "Wewnętrzny atrybut nazwy uzżytkownika:", "Override UUID detection" : "Zastąp wykrywanie 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." : "Domyślnie, atrybut UUID jest wykrywany automatycznie. Atrybut UUID jest używany do niepodważalnej identyfikacji użytkowników i grup LDAP. Również wewnętrzna nazwa użytkownika zostanie stworzona na bazie UUID, jeśli nie zostanie podana powyżej. Możesz nadpisać to ustawienie i użyć atrybutu wedle uznania. Musisz się jednak upewnić, że atrybut ten może zostać pobrany zarówno dla użytkowników, jak i grup i jest unikalny. Pozostaw puste dla domyślnego zachowania. Zmiany będą miały wpływ tylko na nowo przypisanych (dodanych) użytkowników i grupy LDAP.", @@ -189,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapowanie użytkownika LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Nazwy użytkowników służą do przechowywania i przypisywania metadanych. Aby precyzyjnie zidentyfikować i rozpoznać użytkowników, każdy użytkownik LDAP będzie miał wewnętrzną nazwę użytkownika. Wymaga to mapowania z nazwy użytkownika na użytkownika LDAP. Utworzona nazwa użytkownika jest mapowana na UUID użytkownika LDAP. Dodatkowo DN jest buforowany w celu zmniejszenia interakcji LDAP, ale nie jest używany do identyfikacji. Zmiany zostaną wykryte jeśli DN zmieni się. Wewnętrzna nazwa użytkownika jest używana wszędzie. Wyczyszczenie mapowań pozostawi pozostałości po nim. Wyczyszczenie mapowań nie ma wpływu na konfigurację, ale ma wpływ na wszystkie konfiguracje LDAP! Nigdy nie usuwaj mapowań w środowisku produkcyjnym, tylko na etapie testowym lub eksperymentalnym.", "Clear Username-LDAP User Mapping" : "Czyść Mapowanie użytkownika LDAP", - "Clear Groupname-LDAP Group Mapping" : "Czyść Mapowanie nazwy grupy LDAP" + "Clear Groupname-LDAP Group Mapping" : "Czyść Mapowanie nazwy grupy LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Nieprawidłowa konfiguracja. Sprawdź logi po więcej szczegółów." }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/apps/user_ldap/l10n/pl.json b/apps/user_ldap/l10n/pl.json index e21e6e50887..36ed7181b95 100644 --- a/apps/user_ldap/l10n/pl.json +++ b/apps/user_ldap/l10n/pl.json @@ -3,12 +3,13 @@ "Failed to delete the server configuration" : "Nie można usunąć konfiguracji serwera", "Invalid configuration: Anonymous binding is not allowed." : "Nieprawidłowa konfiguracja: Anonimowe podpinanie jest niedozwolone.", "Valid configuration, connection established!" : "Konfiguracja poprawna, połączenie ustanowione!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfiguracja prawidłowa, ale podpinanie nie powiodło się. Sprawdź konfigurację serwera i poświadczenia.", - "Invalid configuration. Please have a look at the logs for further details." : "Nieprawidłowa konfiguracja. Sprawdź logi po więcej szczegółów.", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfiguracja poprawna, ale powiązanie nie powiodło się. Sprawdź konfigurację serwera i poświadczenia.", + "Invalid configuration: %s" : "Nieprawidłowa konfiguracja: %s", "No action specified" : "Nie określono akcji", "No configuration specified" : "Nie określono konfiguracji", "No data specified" : "Nie określono danych", - " Could not set configuration %s" : "Nie można ustawić konfiguracji %s", + "Invalid data specified" : "Podano nieprawidłowe dane", + "Could not set configuration %1$s to %2$s" : "Nie można ustawić konfiguracji %1$s na %2$s", "Action does not exist" : "Akcja nie istnieje", "Renewing …" : "Odnawianie…", "Very weak password" : "Bardzo słabe hasło", @@ -34,44 +35,61 @@ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Wystąpił błąd. Proszę sprawdzić Base DN oraz ustawienia połączenia i dane dostępowe.", "Do you really want to delete the current Server Configuration?" : "Czy chcesz usunąć bieżącą konfigurację serwera?", "Confirm Deletion" : "Potwierdź usunięcie", - "Mappings cleared successfully!" : "Mapowanie wyczyszczone!", + "Mappings cleared successfully!" : "Mapowania zostały pomyślnie wyczyszczone!", "Error while clearing the mappings." : "Błąd podczas czyszczenia mapowania.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonimowe połączenie nie jest dozwolone. Proszę podać DN użytkownika i hasło.", "LDAP Operations error. Anonymous bind might not be allowed." : "Błąd operacji LDAP. Anonimowe połączenie nie jest dozwolone.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Zapisywanie nie powiodło się. Upewnij się, że baza danych działa. Załaduj ponownie przed kontynuowaniem.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Zapisywanie nie powiodło się. Upewnij się, że baza danych działa. Wczytaj ponownie przed kontynuowaniem.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Zmiana trybu włączy automatyczne odpytywanie LDAP-a. W zależności od jego wielkości może to trochę potrwać. Nadal chcesz zmienić tryb?", "Mode switch" : "Przełącznik trybów", "Select attributes" : "Wybierz atrybuty", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Użytkownik nie znaleziony. Sprawdź nazwę i atrybuty logowania. Filtr efektywny (aby skopiować i wkleić do wiersza poleceń): <br/>", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Użytkownik nie znaleziony. Sprawdź atrybuty logowania i nazwę użytkownika. Filtr efektywny (do kopiowania i wklejania w celu sprawdzenia poprawności w wierszu poleceń): <br/>", "User found and settings verified." : "Znaleziono użytkownika i zweryfikowano ustawienia.", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Rozważ zawężenie wyszukiwania, gdyż obejmuje ono wielu użytkowników, z tylko pierwszy będzie mógł się zalogować.", "An unspecified error occurred. Please check log and settings." : "Wystąpił nieoczekiwany błąd. Sprawdź logi i ustawienia.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr szukania jest nieprawidłowy, prawdopodobnie przez problem składniowy taki jak nierówna liczba otwartych i zamkniętych nawiasów. Zweryfikuj to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Wystąpił błąd połączenia z LDAP/AD, sprawdź host, port i poświadczenia.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Brakuje tekstu zastępczego \"%uid\". W trakcie odpytywania serwera LDAP/AD zostanie on zastąpiony nazwą logowania.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Wystąpił błąd połączenia z LDAP/AD. Sprawdź hosta, port i poświadczenia.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Brak symbolu zastępczego \"%uid\". Zostanie zastąpiony nazwą logowania podczas odpytywania LDAP/AD.", "Please provide a login name to test against" : "Wprowadź nazwę użytkownika, aby wykonać test ponownie", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Wpisy dla grup zostały wyłączone, ponieważ LDAP/AD nie wspiera memberOf.", - "Password change rejected. Hint: " : "Zmiana hasła odrzucona: Wskazówka:", - "Please login with the new password" : "Proszę się zalogować z nowym hasłem", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Pole do wpisu dla grupy zostało wyłączone, ponieważ LDAP/AD nie obsługuje memberOf.", + "Password change rejected. Hint: %s" : "Zmiana hasła odrzucona: Wskazówka: %s", + "Mandatory field \"%s\" left empty" : "Obowiązkowe pole \"%s\" pozostawiono puste", + "A password is given, but not an LDAP agent" : "Podano hasło, ale nie wskazano agenta LDAP", + "No password is given for the user agent" : "Nie podano hasła dla agenta użytkownika", + "No LDAP base DN was given" : "Nie podano bazowego DN LDAP", + "User base DN is not a subnode of global base DN" : "Bazowy DN użytkownika nie jest podwęzłem globalnego DN", + "Group base DN is not a subnode of global base DN" : "Bazowy DN grupy nie jest podwęzłem globalnego DN", + "Login filter does not contain %s placeholder." : "Filtr logowania nie zawiera zastępnika %s.", + "Please login with the new password" : "Zaloguj się przy użyciu nowego hasła", "LDAP User backend" : "Moduł użytkownika LDAP", "Your password will expire tomorrow." : "Twoje hasło wygasa jutro.", "Your password will expire today." : "Twoje hasło wygasa dzisiaj.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Twoje hasło wygaśnie w ciągu %n dnia.","Twoje hasło wygaśnie w ciągu %n dni.","Twoje hasło wygaśnie w ciągu %n dni.","Twoje hasło wygaśnie w ciągu %n dni."], - "LDAP / AD integration" : "Integracja z LDAP/AD", - "_%s group found_::_%s groups found_" : ["%s znaleziona grupa","%s znalezionych grup","%s znalezionych grup","%s znalezionych grup"], - "_%s user found_::_%s users found_" : ["%s znaleziony użytkownik","%s znalezionych użytkowników","%s znalezionych użytkowników","%s znalezionych użytkowników"], + "LDAP/AD integration" : "Integracja z LDAP/AD", + "LDAP Connection" : "Połączenie LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Dla tej konfiguracji LDAP: %s połączenie nie powiodło się","Połączenie nie powiodło się dla %n konfiguracji LDAP: %s","Połączenie nie powiodło się dla %n konfiguracji LDAP: %s","Połączenie nie powiodło się dla %n konfiguracji LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Dla tej konfiguracji LDAP: %s wyszukiwanie nie powiodło się ","Wyszukiwanie nie powiodło się dla %n konfiguracji LDAP: %s","Wyszukiwanie nie powiodło się dla %n konfiguracji LDAP: %s","Wyszukiwanie nie powiodło się dla %n konfiguracji LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Jest jedna nieaktywna konfiguracja LDAP\" %s","Istnieją %n nieaktywne konfiguracje LDAP: %s","Istnieje %n nieaktywnych konfiguracji LDAP: %s","Istnieje %n nieaktywnych konfiguracji LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Łączenie i wyszukiwanie działa dla skonfigurowanego połączenia LDAP (%s)","Łączenie i wyszukiwanie działa dla wszystkich %n skonfigurowanych połączeń LDAP (%s)","Łączenie i wyszukiwanie działa dla wszystkich %n skonfigurowanych połączeń LDAP (%s)","Łączenie i wyszukiwanie działa dla wszystkich %nskonfigurowanych połączeń LDAP (%s)"], + "Invalid LDAP UUIDs" : "Nieprawidłowy LDAP UUID", + "None found" : "Nie znaleziono", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Znaleziono nieprawidłowe identyfikatory UUID kont lub grup LDAP. Sprawdź ustawienia „Zastąp wykrywanie UUID” w części eksperckiej konfiguracji LDAP i użyj „occ ldap:update-uuid”, aby je zaktualizować.", + "_%n group found_::_%n groups found_" : ["Znaleziono %n grupę","Znaleziono %n grupy","Znaleziono %n grup","Znaleziono %n grup"], + "> 1000 groups found" : "> 1000 znalezionych grup", + "> 1000 users found" : "> 1000 znalezionych użytkowników", + "_%n user found_::_%n users found_" : ["Znaleziono %n użytkownika","Znaleziono %n użytkowników","Znaleziono %n użytkowników","Znaleziono %n użytkowników"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nie można wykryć atrybutu wyświetlania nazwy użytkownika.", "Could not find the desired feature" : "Nie można znaleźć żądanej funkcji", - "Invalid Host" : "Niepoprawny Host", + "Invalid Host" : "Nieprawidłowy host", "LDAP user and group backend" : "Zaplecze użytkowników i grup LDAP", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Ta aplikacja umożliwia administratorom podłączenie Nextcloud do katalogu użytkownika opartego na LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ta aplikacja umożliwia administratorom łączenie Nextcloud z katalogiem użytkowników opartym na LDAP w celu uwierzytelniania i udostępniania użytkowników, grup i atrybutów użytkowników. Administratorzy mogą skonfigurować tę aplikację do łączenia się z jednym lub większą liczbą katalogów LDAP lub katalogów aktywnych za pośrednictwem interfejsu LDAP. Atrybuty, takie jak limity użytkowników, wiadomości e-mail, zdjęcia awatarów, członkostwa w grupach i inne, można pobrać do Nextcloud z katalogu z odpowiednimi zapytaniami i filtrami.\n\nUżytkownik loguje się do Nextcloud za pomocą swoich poświadczeń LDAP lub AD i uzyskuje dostęp na podstawie żądania uwierzytelnienia obsługiwanego przez serwer LDAP lub AD. Nextcloud nie przechowuje haseł LDAP lub AD, poświadczenia te są użyte do uwierzytelnienia użytkownika. Następnie Nextcloud używa sesji dla ID użytkownika. Więcej informacji można znaleźć w dokumentacji użytkownika LDAP i zaplecza grupy.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Aplikacja umożliwia administratorom podłączenie Nextcloud do katalogu użytkownika opartego na LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Aplikacja umożliwia administratorom łączenie Nextcloud z katalogiem użytkowników opartym na LDAP w celu uwierzytelniania i udostępniania użytkowników, grup i atrybutów użytkowników. Administratorzy mogą skonfigurować tę aplikację do łączenia się z jednym lub większą liczbą katalogów LDAP lub katalogów aktywnych za pośrednictwem interfejsu LDAP. Atrybuty, takie jak limity użytkowników, wiadomości e-mail, zdjęcia awatarów, członkostwa w grupach i inne, można pobrać do Nextcloud z katalogu z odpowiednimi zapytaniami i filtrami.\n\nUżytkownik loguje się do Nextcloud za pomocą swoich poświadczeń LDAP lub AD i uzyskuje dostęp na podstawie żądania uwierzytelnienia obsługiwanego przez serwer LDAP lub AD. Nextcloud nie przechowuje haseł LDAP lub AD, poświadczenia te są użyte do uwierzytelnienia użytkownika. Następnie Nextcloud używa sesji dla ID użytkownika. Więcej informacji można znaleźć w dokumentacji użytkownika LDAP i zaplecza grupy.", "Test Configuration" : "Sprawdź konfigurację", "Help" : "Pomoc", - "Groups meeting these criteria are available in %s:" : "Przyłączenie do grupy z tymi ustawieniami dostępne jest w %s:", + "Groups meeting these criteria are available in %s:" : "Grupy spełniające te kryteria są dostępne w %s:", "Only these object classes:" : "Tylko te klasy obiektów:", "Only from these groups:" : "Tylko z tych grup:", - "Search groups" : "Przeszukaj grupy", + "Search groups" : "Szukaj grup", "Available groups" : "Dostępne grupy", "Selected groups" : "Wybrane grupy", "Edit LDAP Query" : "Edytuj zapytanie LDAP", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr określa, które grupy LDAP powinny mieć dostęp do instancji %s.", "Verify settings and count the groups" : "Zweryfikuj ustawienia i policz grupy", "When logging in, %s will find the user based on the following attributes:" : "Podczas logowania, %s znajdzie użytkownika na podstawie następujących atrybutów:", - "LDAP / AD Username:" : "Nazwa użytkownika LDAP/AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Zezwalaj również na logowanie typu LDAP/AD, który może być w postaci \"uid\" lub \"sAMAccountName\".", - "LDAP / AD Email Address:" : "Adres e-mail LDAP/AD:", + "LDAP/AD Username:" : "Nazwa użytkownika LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umożliwia logowanie przy użyciu nazwy użytkownika LDAP/AD, która ma postać \"uid\" lub \"sAMAccountName\" i zostanie wykryta.", + "LDAP/AD Email Address:" : "Adres e-mail LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Zezwalaj również na logowanie atrybutem e-mail. Dozwolone \"mail\" i \"mailPrimaryAddress\".", "Other Attributes:" : "Inne atrybuty:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definiuje filter do zastosowania podczas próby logowania. \"%%uid\" zastępuje nazwę użytkownika podczas logowania. Przykład: \"uid=%%uid\"", "Test Loginname" : "Testowa nazwa użytkownika", + "Attempts to receive a DN for the given loginname and the current login filter" : "Próbuje otrzymać nazwę wyróżniającą dla podanej nazwy użytkownika i bieżącego filtra logowania", "Verify settings" : "Weryfikuj ustawienia", "%s. Server:" : "%s. Serwer:", "Add a new configuration" : "Dodaj nową konfigurację", @@ -111,7 +130,7 @@ "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr określa, którzy użytkownicy LDAP powinni mieć dostęp do instancji %s.", "Verify settings and count users" : "Sprawdź ustawienia i policz użytkowników", "Saving" : "Zapisuję", - "Back" : "Wróć", + "Back" : "Wstecz", "Continue" : "Kontynuuj ", "Please renew your password." : "Proszę odnowić hasło", "An internal error occurred." : "Wystąpił wewnętrzny błąd.", @@ -128,7 +147,7 @@ "Expert" : "Eksperckie", "Advanced" : "Zaawansowane", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Ostrzeżenie:</b> Moduł PHP LDAP jest niezainstalowany i nie będzie działał. Poproś administratora systemu o zainstalowanie go.", - "Connection Settings" : "Konfiguracja połączeń", + "Connection Settings" : "Ustawienia połączenia", "Configuration Active" : "Konfiguracja archiwum", "When unchecked, this configuration will be skipped." : "Gdy niezaznaczone, ta konfiguracja zostanie pominięta.", "Backup (Replica) Host" : "Kopia zapasowa (repliki) host", @@ -149,6 +168,8 @@ "One User Base DN per line" : "Jeden użytkownik Bazy DN na linię", "User Search Attributes" : "Szukaj atrybutów", "Optional; one attribute per line" : "Opcjonalnie; jeden atrybut w wierszu", + "Disable users missing from LDAP" : "Wyłącz brakujących użytkowników w LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Po włączeniu, użytkownicy zaimportowani z LDAP, których brakuje, zostaną wyłączeni", "Group Display Name Field" : "Pole wyświetlanej nazwy grupy", "The LDAP attribute to use to generate the groups's display name." : "Atrybut LDAP służący do generowania wyświetlanej nazwy grupy ownCloud.", "Base Group Tree" : "Drzewo bazy grup", @@ -156,7 +177,7 @@ "Group Search Attributes" : "Grupa atrybutów wyszukaj", "Group-Member association" : "Członek grupy stowarzyszenia", "Dynamic Group Member URL" : "URL Członka Grupy Dynamicznej", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP przypisuje grupom obiekty, zawierające adres wyszukiwania LDAP-a, co determinuje, który obiekt należy do grupy. (Brak ustawienia wyłączy funkcjonalność dynamicznego członkostwa grup)", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Atrybut LDAP, który w obiektach grupy zawiera adres URL wyszukiwania LDAP określa, które obiekty należą do grupy. (Puste ustawienie wyłącza funkcję dynamicznego członkostwa w grupie.)", "Nested Groups" : "Grupy zagnieżdżone", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kiedy włączone, grupy, które zawierają grupy, są wspierane. (Działa tylko, jeśli członek grupy ma ustawienie DNs)", "Paging chunksize" : "Wielkość stronicowania", @@ -173,12 +194,35 @@ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Nadpisz domyślny limit przestrzeni dla użytkowników LDAP-a, którzy nie mają go ustawionego w \"Polu limitu prestrzeni\".", "Email Field" : "Pole e-mail", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Ustaw adres e-mail użytkowników z ich atrybutu LDAP. Zostaw puste dla domyślnego zachowania.", - "User Home Folder Naming Rule" : "Reguły nazewnictwa folderu domowego użytkownika", + "User Home Folder Naming Rule" : "Reguły nazewnictwa katalogu domowego użytkownika", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pozostaw puste dla nazwy użytkownika (domyślnie). W przeciwnym razie podaj atrybut LDAP/AD.", "\"$home\" Placeholder Field" : "Pole zastępcze \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home w zewnętrznej konfiguracji pamięci zostanie zastąpiony wartością określonego atrybutu", + "User Profile Attributes" : "Atrybuty profilu użytkownika", + "Phone Field" : "Pole Telefonu", + "User profile Phone will be set from the specified attribute" : "Telefon profilu użytkownika zostanie ustawiony na podstawie określonego atrybutu", + "Website Field" : "Pole witryny internetowej", + "User profile Website will be set from the specified attribute" : "Witryna internetowa profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Address Field" : "Pole adresu", + "User profile Address will be set from the specified attribute" : "Adres profilu użytkownika zostanie ustawiony na podstawie określonego atrybutu", + "Twitter Field" : "Pole Twittera/X", + "User profile Twitter will be set from the specified attribute" : "Twitter profilu użytkownika zostanie ustawiony na podstawie określonego atrybutu", + "Fediverse Field" : "Pole Fediversum", + "User profile Fediverse will be set from the specified attribute" : "Fediverse profilu użytkownika zostanie ustawione na podstawie określonego atrybutu", + "Organisation Field" : "Pole organizacji", + "User profile Organisation will be set from the specified attribute" : "Organizacja profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Role Field" : "Pole roli", + "User profile Role will be set from the specified attribute" : "Rola w profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Headline Field" : "Pole nagłówka", + "User profile Headline will be set from the specified attribute" : "Nagłówek profilu użytkownika zostanie ustawiony na podstawie określonego atrybutu", + "Biography Field" : "Pole biografii", + "User profile Biography will be set from the specified attribute" : "Biografia profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Birthdate Field" : "Pole daty urodzenia", + "User profile Date of birth will be set from the specified attribute" : "Data urodzenia w profilu użytkownika zostanie ustawiona na podstawie określonego atrybutu", + "Pronouns Field" : "Pole zaimków", + "User profile Pronouns will be set from the specified attribute" : "Zaimki w profilu użytkownika zostaną ustawione na podstawie określonego atrybutu", "Internal Username" : "Wewnętrzna nazwa użytkownika", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Domyślnie wewnętrzne nazwy użytkowników będą takie same jak atrybut UUID. Zapewnia to unikalność nazw użytkowników, a znaki nie muszą być konwertowane. Znaki z jakich może się składać wewnętrzna nazwa użytkownika to: [ a-zA-Z0-9_.@- ]. Inne znaki są zastępowane przez ich odpowiedniki ASCII lub po prostu pomijane. Gdy nastąpi kolizja nazw zostanie dodany/zwiększony numer. Wewnętrzna nazwa użytkownika jest używana do identyfikacji użytkownika wewnętrznie. To również domyślna nazwa dla katalogu domowego użytkownika. To też część adresu zdalnego dla instancji dla wszystkich usług *DAV. Z tym ustawieniem domyślne zachowanie może być nadpisane. Zostaw to puste dla domyślnego zachowania. Zmiany będą miały miejsce tylko dla nowo zamapowanych (dodanych) użytkowników LDAP-a.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Domyślnie wewnętrzna nazwa użytkownika zostanie utworzona z atrybutu UUID. Zapewnia to unikalność nazwy użytkownika, a znaki nie muszą być konwertowane. Wewnętrzna nazwa użytkownika ma ograniczenie, dlatego dozwolone są tylko znaki: [a-zA-Z0-9_.@-]. Inne znaki są zastępowane przez ich odpowiedniki ASCII lub po prostu pomijane. W przypadku kolizji zostanie dodany/zwiększony numer. Wewnętrzna nazwa użytkownika służy do wewnętrznej identyfikacji użytkownika. Jest również domyślną nazwą katalogu domowego użytkownika oraz częścią zdalnych adresów URL, na przykład dla wszystkich usług DAV. Dzięki temu ustawieniu można zastąpić domyślne zachowanie. Zmiany będą miały wpływ tylko na nowo zmapowanych (dodanych) użytkowników LDAP. Dla domyślnego zachowania pozostaw to puste.", "Internal Username Attribute:" : "Wewnętrzny atrybut nazwy uzżytkownika:", "Override UUID detection" : "Zastąp wykrywanie 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." : "Domyślnie, atrybut UUID jest wykrywany automatycznie. Atrybut UUID jest używany do niepodważalnej identyfikacji użytkowników i grup LDAP. Również wewnętrzna nazwa użytkownika zostanie stworzona na bazie UUID, jeśli nie zostanie podana powyżej. Możesz nadpisać to ustawienie i użyć atrybutu wedle uznania. Musisz się jednak upewnić, że atrybut ten może zostać pobrany zarówno dla użytkowników, jak i grup i jest unikalny. Pozostaw puste dla domyślnego zachowania. Zmiany będą miały wpływ tylko na nowo przypisanych (dodanych) użytkowników i grupy LDAP.", @@ -187,6 +231,7 @@ "Username-LDAP User Mapping" : "Mapowanie użytkownika LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Nazwy użytkowników służą do przechowywania i przypisywania metadanych. Aby precyzyjnie zidentyfikować i rozpoznać użytkowników, każdy użytkownik LDAP będzie miał wewnętrzną nazwę użytkownika. Wymaga to mapowania z nazwy użytkownika na użytkownika LDAP. Utworzona nazwa użytkownika jest mapowana na UUID użytkownika LDAP. Dodatkowo DN jest buforowany w celu zmniejszenia interakcji LDAP, ale nie jest używany do identyfikacji. Zmiany zostaną wykryte jeśli DN zmieni się. Wewnętrzna nazwa użytkownika jest używana wszędzie. Wyczyszczenie mapowań pozostawi pozostałości po nim. Wyczyszczenie mapowań nie ma wpływu na konfigurację, ale ma wpływ na wszystkie konfiguracje LDAP! Nigdy nie usuwaj mapowań w środowisku produkcyjnym, tylko na etapie testowym lub eksperymentalnym.", "Clear Username-LDAP User Mapping" : "Czyść Mapowanie użytkownika LDAP", - "Clear Groupname-LDAP Group Mapping" : "Czyść Mapowanie nazwy grupy LDAP" + "Clear Groupname-LDAP Group Mapping" : "Czyść Mapowanie nazwy grupy LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Nieprawidłowa konfiguracja. Sprawdź logi po więcej szczegółów." },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index 53271029280..c78cbca2108 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -6,11 +6,12 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Configuração inválida: A ligação anônima não é permitida.", "Valid configuration, connection established!" : "Configuração válida, conexão estabelecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuração válida, mas a ligação falhou. Verifique as configurações e as credenciais do servidor.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuração inválida. Por favor dê uma olhada nos logs para mais detalhes.", + "Invalid configuration: %s" : "Configuração inválida: %s", "No action specified" : "Nenhuma ação especificada", "No configuration specified" : "Nenhuma configuração especificada", "No data specified" : "Nenhum dado especificado", - " Could not set configuration %s" : "Não foi possível definir a configuração %s", + "Invalid data specified" : "Dados inválidos especificados", + "Could not set configuration %1$s to %2$s" : "Não foi possível definir a configuração %1$s como %2$s", "Action does not exist" : "A ação não existe", "Renewing …" : "Renovando...", "Very weak password" : "Senha muito fraca", @@ -32,7 +33,7 @@ OC.L10N.register( "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "Nenhum objeto encontrado na Base DN informada. Por favor revise.", "More than 1,000 directory entries available." : "Mais de 1.000 entradas de diretório disponíveis.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrada disponível na Base DN fornecida","{objectsFound} entradas disponíveis na Base DN fornecida"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrada disponível na Base DN fornecida","{objectsFound} entradas disponíveis na Base DN fornecida","{objectsFound} entradas disponíveis na Base DN fornecida"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Um erro ocorreu. Por favor verifique a Base DN e também as configurações de conexão e credenciais.", "Do you really want to delete the current Server Configuration?" : "Você realmente quer excluir as configurações atuais do servidor?", "Confirm Deletion" : "Confirmar Exclusão", @@ -49,19 +50,36 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restringir sua pesquisa, pois abrange muitos usuários, apenas o primeiro de quem poderá fazer logon.", "An unspecified error occurred. Please check log and settings." : "Ocorreu um erro não especificado. Verifique o log e as configurações.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de pesquisa é inválido, provavelmente devido a questões de sintaxe, como número ímpar de colchetes abertos e fechados. Por favor, revise.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Um erro de conexão para LDAP / AD ocorreu, por favor, verifique host, porta e as credenciais.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "O marcador de posição \"%uid\" está faltando. Ele será substituído pelo nome de login quando consutando via LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Ocorreu um erro de conexão com o LDAP/AD. Verifique o host, a porta e as credenciais.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "O espaço reservado \"%uid\" está faltando. Ele será substituído pelo nome de login ao consultar o LDAP/AD.", "Please provide a login name to test against" : "Por favor, forneça um nome de login para testar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "A caixa do grupo foi desativada pois o servidor LDAP / AD não suporta memberOf.", - "Password change rejected. Hint: " : "Troca de senha rejeitada. Dica:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "A caixa de grupo foi desabilitada porque o servidor LDAP/AD não é compatível com memberOf.", + "Password change rejected. Hint: %s" : "Alteração de senha rejeitada. Dica: %s", + "Mandatory field \"%s\" left empty" : "Campo obrigatório \"%s\" deixado vazio", + "A password is given, but not an LDAP agent" : "É fornecida uma senha, mas não um agente LDAP", + "No password is given for the user agent" : "Nenhuma senha é fornecida para o agente do usuário", + "No LDAP base DN was given" : "Nenhum DN de base de LDAP foi fornecido", + "User base DN is not a subnode of global base DN" : "O DN de base do usuário não é um subnó do DN de base global", + "Group base DN is not a subnode of global base DN" : "O DN de base do grupo não é um subnó do DN de base global", + "Login filter does not contain %s placeholder." : "O filtro de login não contém o espaço reservado %s", "Please login with the new password" : "Logue-se com a nova senha", "LDAP User backend" : "Estrutura do Usuário LDAP", "Your password will expire tomorrow." : "Sua senha vai expirar amanhã.", "Your password will expire today." : "Sua senha vai expirar hoje.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Sua senha vai expirar dentro de%n dia.","Sua senha vai expirar dentro de%ndias."], - "LDAP / AD integration" : "Integração LDAP / AD", - "_%s group found_::_%s groups found_" : ["grupo% s encontrado","grupos% s encontrado"], - "_%s user found_::_%s users found_" : ["usuário %s encontrado","%s usuários encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Sua senha vai expirar dentro de%n dia.","Sua senha vai expirar dentro de%ndias.","Sua senha vai expirar dentro de%ndias."], + "LDAP/AD integration" : "Integração LDAP/AD", + "LDAP Connection" : "Conexão LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Falha na ligação para essa configuração LDAP:%s","Falha na ligação para %n configurações LDAP:%s","Falha na ligação para %n configurações LDAP:%s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Falha na pesquisa dessa configuração LDAP: %s","Falha na pesquisa de %n configurações LDAP: %s","Falha na pesquisa de %n configurações LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Existe uma configuração LDAP inativa: %s","Existem %n configurações LDAP inativas: %s","Existem %n configurações LDAP inativas: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["A ligacão e a pesquisa funcionam na conexão LDAP configurada (%s)","A ligacão e a pesquisa funcionam em todas as %n conexões LDAP configuradas (%s)","A ligacão e a pesquisa funcionam em todas as %n conexões LDAP configuradas (%s)"], + "Invalid LDAP UUIDs" : "UUIDs LDAP inválidos", + "None found" : "Nenhum encontrado", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Foram encontrados UUIDs inválidos de contas ou grupos LDAP. Por favor, revise as configurações de \"Substituir detecção UUID\" na parte Especialista da configuração LDAP e use \"occ ldap:update-uuid\" para atualizá-los.", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrado","%n grupos encontrados"], + "> 1000 groups found" : "> 1000 grupos encontrados", + "> 1000 users found" : "> 1000 usuários encontrados", + "_%n user found_::_%n users found_" : ["%n usuário encontrado","%n usuários encontrados","%n usuários encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Não foi possível detectar o atributo do nome de exibição do usuário. Por favor, especifique-o você mesmo nas configurações LDAP avançadas.", "Could not find the desired feature" : "Não foi possível encontrar o recurso desejado", "Invalid Host" : "Host inválido", @@ -81,28 +99,29 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica quais grupos LDAP devem ter acesso à instância do %s.", "Verify settings and count the groups" : "Verificar configurações e contar grupos", "When logging in, %s will find the user based on the following attributes:" : "Ao entrar, %s vai encontrar o usuário com base nos seguintes atributos:", - "LDAP / AD Username:" : "Nome do usuário LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite login com o nome de usuário LDAP / AD, o qual é \"uid\" ou \"sAMAccountName\" e será detectado.", - "LDAP / AD Email Address:" : "Endereço de e-mail LDAP / AD:", + "LDAP/AD Username:" : "Nome de usuário LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite o login com o nome de usuário LDAP/AD, que é \"uid\" ou \"sAMAccountName\" e será detectado.", + "LDAP/AD Email Address:" : "Endereço de E-mail LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite login com um atributo de e-mail. \"Mail\" e \"mailPrimaryAddress\" são permitidos.", "Other Attributes:" : "Outros Atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define o filtro a aplicar quando o login é tentado. \"%%uid\" substitui o nome de usuário durante o login. Por exemplo: \"uid=%%uid\"", - "Test Loginname" : "Testar Loginname", + "Test Loginname" : "Testar nome de login", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta receber um DN para o nome de login fornecido e o filtro de login atual", "Verify settings" : "Verificar configurações", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Adiconar uma nova configuração", - "Copy current configuration into new directory binding" : "Copie a configuração atual em um novo diretório vinculado", + "Copy current configuration into new directory binding" : "Copiar a configuração atual em um novo diretório vinculado", "Delete the current configuration" : "Excluir a configuração atual", "Host" : "Host", - "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Você pode omitir o protocolo a menos que o SSL seja requerido. Se sim, inicie com ldaps://", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Você pode omitir o protocolo a menos que o SSL seja obrigatório. Se sim, inicie com ldaps://", "Port" : "Porta", "Detect Port" : "Detectar Porta", - "User DN" : "usuário DN", + "User DN" : "DN do usuário", "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." : "O DN do usuário cliente com qual a ligação deverá ser feita, ex. uid=agent,dc=example,dc=com. Para acesso anônimo, deixe DN e senha vazios.", "Password" : "Senha", "For anonymous access, leave DN and Password empty." : "Para acesso anônimo, deixe DN e senha vazios.", - "Save Credentials" : "Salvar Senhas", - "One Base DN per line" : "Uma Mase DN por linha", + "Save Credentials" : "Salvar credenciais", + "One Base DN per line" : "Uma Base DN por linha", "You can specify Base DN for users and groups in the Advanced tab" : "Você pode especificar a Base DN para usuários e grupos na aba Avançada", "Detect Base DN" : "Detectar a Base DN", "Test Base DN" : "Testar a Base DN", @@ -151,13 +170,15 @@ OC.L10N.register( "One User Base DN per line" : "Um usuário de Base DN por linha", "User Search Attributes" : "Atributos de Busca de Usuário", "Optional; one attribute per line" : "Opcional; um atributo por linha", + "Disable users missing from LDAP" : "Desativar usuários ausentes no LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando ativado, os usuários importados do LDAP que estiverem ausentes serão desativados", "Group Display Name Field" : "Campo de nome de exibição do Grupo", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP a usar para gerar o nome de apresentação do grupo.", "Base Group Tree" : "Árvore de Grupo Base", "One Group Base DN per line" : "Um grupo Base DN por linha", "Group Search Attributes" : "Atributos de Busca de Grupo", "Group-Member association" : "Associação Grupo-Membro", - "Dynamic Group Member URL" : "URL do Grupo Dinâmico de membro", + "Dynamic Group Member URL" : "URL de Membro de Grupo Dinâmico", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "O atributo LDAP que em objetos do grupo contém uma pesquisa URL LDAP que determina quais objetos pertencem ao grupo. (Um cenário vazio desativa a funcionalidade de membros de grupo dinâmico.)", "Nested Groups" : "Grupos Aninhados", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quando habilitado, os grupos que contêm os grupos são suportados. (Só funciona se o atributo de membro de grupo contém DNs.)", @@ -166,7 +187,7 @@ OC.L10N.register( "Enable LDAP password changes per user" : "Ativar alteração de senha LDAP por usuário", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permite que usuários LDAP alterem senha e permite que o Super Administrador e o Administradores de grupo troquem a senha dos usuários LDAP. Só funciona quando as políticas de controle de acesso estão configuradas de acordo com o servidor LDAP. As senhas são enviadas em texto puro ao servidor LDAP. Criptografia de transporte deve ser usada e a hash da senha deve ser configurada no servidor LDAP. ", "(New password is sent as plain text to LDAP)" : "(Nova senha é enviada como texto puro para o LDAP)", - "Default password policy DN" : "Política DN de senha padrão", + "Default password policy DN" : "DN da política de senha padrão", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "O DN da política de senha padrão que será usada para gerenciar a expiração de senha. Funciona somente quando as alterações por usuários das senhas LDAP estão habilitadas e é somente suportado por OpenLDAP. Deixe em branco para desativar a expiração de senha.", "Special Attributes" : "Atributos especiais", "Quota Field" : "Campo de cota", @@ -179,8 +200,31 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixe em branco para o nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD.", "\"$home\" Placeholder Field" : "Campo Reservado \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home em uma configuração de armazenamento externo será substituído pelo valor do atributo especificado", - "Internal Username" : "Nome de usuário interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por padrão, um nome de usuário interno será criado a partir de um atributo UUID. Isso garante que o nome de usuário seja único e estes caracteres não precisam ser convertidos. um nome de usuário interno possui a restrição que somente estes caracteres são permitdos: [ a-zA-Z0-9_.@- ]. Outros caracteres serão substituidos por seus correspondentes ASCII ou simplesmente omitidos. Em caso de coincidências, um número será adicionado/incrementado. O nome de usuário interno é utilizado para identificar o usuário internamente. Também é o nome padrão da pasta principal do usuário. Também é uma parte das URL's remotas, por exemplo, para todos os serviços *DAV. Com esta configuração, o comportamento padrão pode ser alterado. Deixe em branco para que assuma o comportamento padrão. Alterações terão efeito apenas em novos usuários LDAP mapeados (adicionados).", + "User Profile Attributes" : "Atributos do Perfil do Usuário", + "Phone Field" : "Campo de Telefone", + "User profile Phone will be set from the specified attribute" : "O Telefone no perfil do usuário será definido a partir do atributo especificado", + "Website Field" : "Campo de Website", + "User profile Website will be set from the specified attribute" : "O Website no perfil do usuário será definido a partir do atributo especificado", + "Address Field" : "Campo de Endereço", + "User profile Address will be set from the specified attribute" : "O Endereço no perfil do usuário será definido a partir do atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "O Twitter no perfil do usuário será definido a partir do atributo especificado", + "Fediverse Field" : "Campo de Fediverso", + "User profile Fediverse will be set from the specified attribute" : "O Fediverso no perfil do usuário será definido a partir do atributo especificado", + "Organisation Field" : "Campo de Organização", + "User profile Organisation will be set from the specified attribute" : "A Organização no perfil do usuário será definida a partir do atributo especificado", + "Role Field" : "Campo de Função", + "User profile Role will be set from the specified attribute" : "A Função no perfil do usuário será definida a partir do atributo especificado", + "Headline Field" : "Campo do Título", + "User profile Headline will be set from the specified attribute" : "O Título do perfil do usuário será definido a partir do atributo especificado", + "Biography Field" : "Campo de Biografia", + "User profile Biography will be set from the specified attribute" : "A Biografia no perfil do usuário será definida a partir do atributo especificado", + "Birthdate Field" : "Campo de Data de Nascimento", + "User profile Date of birth will be set from the specified attribute" : "A Data de Nascimento no perfil do usuário será definida a partir do atributo especificado", + "Pronouns Field" : "Campo de Pronomes", + "User profile Pronouns will be set from the specified attribute" : "Os Pronomes no perfil do usuário serão definidos a partir do atributo especificado", + "Internal Username" : "Nome de Usuário Interno", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Isso garante que o nome de usuário seja exclusivo e os caracteres não precisem ser convertidos. O nome de usuário interno tem a restrição de que apenas esses caracteres são permitidos: [a-zA-Z0-9_.@-]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões, um número será adicionado/aumentado. O nome de usuário interno é usado para identificar um usuário internamente. Também é o nome padrão para a pasta inicial do usuário. Também faz parte de URLs remotos, por exemplo, para todos os serviços DAV. Com essa configuração, o comportamento padrão pode ser substituído. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados). Deixe-a vazia para o comportamento padrão.", "Internal Username Attribute:" : "Atributo Interno de Nome de Usuário:", "Override UUID detection" : "Substituir detecção 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." : "Por padrão, o atributo UUID é detectado automaticamente. O atributo UUID é usado para identificar corretamente os usuários e grupos LDAP. Além disso, o nome de usuário interno será criado com base no UUID, se não especificado acima. Você pode substituir a configuração e passar um atributo de sua escolha. Você deve certificar-se de que o atributo de sua escolha pode ser lido tanto por usuários quanto por grupos, e que seja único. Deixe-o em branco para o comportamento padrão. As alterações terão efeito apenas para usuários e grupos LDAP recém mapeados (adicionados).", @@ -189,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapeamento de Usuário Username-LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Os nomes de usuários são usados para armazenar e atribuir metadados. Para identificar e reconhecer com precisão os usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento do nome de usuário para o usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Além disso, o DN também é armazenado em cache para reduzir a interação LDAP, mas não é usado para identificação. Se o DN mudar, as alterações serão encontradas. O nome de usuário interno é usado em todo lugar. Limpar os mapeamentos gerará sobras em todos os lugares. Limpar os mapeamentos não é sensível à configuração e afeta todas as configurações do LDAP! Nunca limpe os mapeamentos em um ambiente de produção, apenas em um estágio de teste ou experimental.", "Clear Username-LDAP User Mapping" : "Limpar Mapeamento de Usuário username-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Limpar Mapeamento do Grupo groupname-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Limpar Mapeamento do Grupo groupname-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuração inválida. Por favor dê uma olhada nos logs para mais detalhes." }, -"nplurals=2; plural=(n > 1);"); +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index 67e91a2f879..9ea42ef697f 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -4,11 +4,12 @@ "Invalid configuration: Anonymous binding is not allowed." : "Configuração inválida: A ligação anônima não é permitida.", "Valid configuration, connection established!" : "Configuração válida, conexão estabelecida!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuração válida, mas a ligação falhou. Verifique as configurações e as credenciais do servidor.", - "Invalid configuration. Please have a look at the logs for further details." : "Configuração inválida. Por favor dê uma olhada nos logs para mais detalhes.", + "Invalid configuration: %s" : "Configuração inválida: %s", "No action specified" : "Nenhuma ação especificada", "No configuration specified" : "Nenhuma configuração especificada", "No data specified" : "Nenhum dado especificado", - " Could not set configuration %s" : "Não foi possível definir a configuração %s", + "Invalid data specified" : "Dados inválidos especificados", + "Could not set configuration %1$s to %2$s" : "Não foi possível definir a configuração %1$s como %2$s", "Action does not exist" : "A ação não existe", "Renewing …" : "Renovando...", "Very weak password" : "Senha muito fraca", @@ -30,7 +31,7 @@ "{nthServer}. Server" : "{nthServer}. Servidor", "No object found in the given Base DN. Please revise." : "Nenhum objeto encontrado na Base DN informada. Por favor revise.", "More than 1,000 directory entries available." : "Mais de 1.000 entradas de diretório disponíveis.", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrada disponível na Base DN fornecida","{objectsFound} entradas disponíveis na Base DN fornecida"], + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} entrada disponível na Base DN fornecida","{objectsFound} entradas disponíveis na Base DN fornecida","{objectsFound} entradas disponíveis na Base DN fornecida"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Um erro ocorreu. Por favor verifique a Base DN e também as configurações de conexão e credenciais.", "Do you really want to delete the current Server Configuration?" : "Você realmente quer excluir as configurações atuais do servidor?", "Confirm Deletion" : "Confirmar Exclusão", @@ -47,19 +48,36 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restringir sua pesquisa, pois abrange muitos usuários, apenas o primeiro de quem poderá fazer logon.", "An unspecified error occurred. Please check log and settings." : "Ocorreu um erro não especificado. Verifique o log e as configurações.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de pesquisa é inválido, provavelmente devido a questões de sintaxe, como número ímpar de colchetes abertos e fechados. Por favor, revise.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Um erro de conexão para LDAP / AD ocorreu, por favor, verifique host, porta e as credenciais.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "O marcador de posição \"%uid\" está faltando. Ele será substituído pelo nome de login quando consutando via LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Ocorreu um erro de conexão com o LDAP/AD. Verifique o host, a porta e as credenciais.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "O espaço reservado \"%uid\" está faltando. Ele será substituído pelo nome de login ao consultar o LDAP/AD.", "Please provide a login name to test against" : "Por favor, forneça um nome de login para testar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "A caixa do grupo foi desativada pois o servidor LDAP / AD não suporta memberOf.", - "Password change rejected. Hint: " : "Troca de senha rejeitada. Dica:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "A caixa de grupo foi desabilitada porque o servidor LDAP/AD não é compatível com memberOf.", + "Password change rejected. Hint: %s" : "Alteração de senha rejeitada. Dica: %s", + "Mandatory field \"%s\" left empty" : "Campo obrigatório \"%s\" deixado vazio", + "A password is given, but not an LDAP agent" : "É fornecida uma senha, mas não um agente LDAP", + "No password is given for the user agent" : "Nenhuma senha é fornecida para o agente do usuário", + "No LDAP base DN was given" : "Nenhum DN de base de LDAP foi fornecido", + "User base DN is not a subnode of global base DN" : "O DN de base do usuário não é um subnó do DN de base global", + "Group base DN is not a subnode of global base DN" : "O DN de base do grupo não é um subnó do DN de base global", + "Login filter does not contain %s placeholder." : "O filtro de login não contém o espaço reservado %s", "Please login with the new password" : "Logue-se com a nova senha", "LDAP User backend" : "Estrutura do Usuário LDAP", "Your password will expire tomorrow." : "Sua senha vai expirar amanhã.", "Your password will expire today." : "Sua senha vai expirar hoje.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Sua senha vai expirar dentro de%n dia.","Sua senha vai expirar dentro de%ndias."], - "LDAP / AD integration" : "Integração LDAP / AD", - "_%s group found_::_%s groups found_" : ["grupo% s encontrado","grupos% s encontrado"], - "_%s user found_::_%s users found_" : ["usuário %s encontrado","%s usuários encontrados"], + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Sua senha vai expirar dentro de%n dia.","Sua senha vai expirar dentro de%ndias.","Sua senha vai expirar dentro de%ndias."], + "LDAP/AD integration" : "Integração LDAP/AD", + "LDAP Connection" : "Conexão LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Falha na ligação para essa configuração LDAP:%s","Falha na ligação para %n configurações LDAP:%s","Falha na ligação para %n configurações LDAP:%s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Falha na pesquisa dessa configuração LDAP: %s","Falha na pesquisa de %n configurações LDAP: %s","Falha na pesquisa de %n configurações LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Existe uma configuração LDAP inativa: %s","Existem %n configurações LDAP inativas: %s","Existem %n configurações LDAP inativas: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["A ligacão e a pesquisa funcionam na conexão LDAP configurada (%s)","A ligacão e a pesquisa funcionam em todas as %n conexões LDAP configuradas (%s)","A ligacão e a pesquisa funcionam em todas as %n conexões LDAP configuradas (%s)"], + "Invalid LDAP UUIDs" : "UUIDs LDAP inválidos", + "None found" : "Nenhum encontrado", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Foram encontrados UUIDs inválidos de contas ou grupos LDAP. Por favor, revise as configurações de \"Substituir detecção UUID\" na parte Especialista da configuração LDAP e use \"occ ldap:update-uuid\" para atualizá-los.", + "_%n group found_::_%n groups found_" : ["%n grupo encontrado","%n grupos encontrado","%n grupos encontrados"], + "> 1000 groups found" : "> 1000 grupos encontrados", + "> 1000 users found" : "> 1000 usuários encontrados", + "_%n user found_::_%n users found_" : ["%n usuário encontrado","%n usuários encontrados","%n usuários encontrados"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Não foi possível detectar o atributo do nome de exibição do usuário. Por favor, especifique-o você mesmo nas configurações LDAP avançadas.", "Could not find the desired feature" : "Não foi possível encontrar o recurso desejado", "Invalid Host" : "Host inválido", @@ -79,28 +97,29 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica quais grupos LDAP devem ter acesso à instância do %s.", "Verify settings and count the groups" : "Verificar configurações e contar grupos", "When logging in, %s will find the user based on the following attributes:" : "Ao entrar, %s vai encontrar o usuário com base nos seguintes atributos:", - "LDAP / AD Username:" : "Nome do usuário LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite login com o nome de usuário LDAP / AD, o qual é \"uid\" ou \"sAMAccountName\" e será detectado.", - "LDAP / AD Email Address:" : "Endereço de e-mail LDAP / AD:", + "LDAP/AD Username:" : "Nome de usuário LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite o login com o nome de usuário LDAP/AD, que é \"uid\" ou \"sAMAccountName\" e será detectado.", + "LDAP/AD Email Address:" : "Endereço de E-mail LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite login com um atributo de e-mail. \"Mail\" e \"mailPrimaryAddress\" são permitidos.", "Other Attributes:" : "Outros Atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define o filtro a aplicar quando o login é tentado. \"%%uid\" substitui o nome de usuário durante o login. Por exemplo: \"uid=%%uid\"", - "Test Loginname" : "Testar Loginname", + "Test Loginname" : "Testar nome de login", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta receber um DN para o nome de login fornecido e o filtro de login atual", "Verify settings" : "Verificar configurações", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Adiconar uma nova configuração", - "Copy current configuration into new directory binding" : "Copie a configuração atual em um novo diretório vinculado", + "Copy current configuration into new directory binding" : "Copiar a configuração atual em um novo diretório vinculado", "Delete the current configuration" : "Excluir a configuração atual", "Host" : "Host", - "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Você pode omitir o protocolo a menos que o SSL seja requerido. Se sim, inicie com ldaps://", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Você pode omitir o protocolo a menos que o SSL seja obrigatório. Se sim, inicie com ldaps://", "Port" : "Porta", "Detect Port" : "Detectar Porta", - "User DN" : "usuário DN", + "User DN" : "DN do usuário", "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." : "O DN do usuário cliente com qual a ligação deverá ser feita, ex. uid=agent,dc=example,dc=com. Para acesso anônimo, deixe DN e senha vazios.", "Password" : "Senha", "For anonymous access, leave DN and Password empty." : "Para acesso anônimo, deixe DN e senha vazios.", - "Save Credentials" : "Salvar Senhas", - "One Base DN per line" : "Uma Mase DN por linha", + "Save Credentials" : "Salvar credenciais", + "One Base DN per line" : "Uma Base DN por linha", "You can specify Base DN for users and groups in the Advanced tab" : "Você pode especificar a Base DN para usuários e grupos na aba Avançada", "Detect Base DN" : "Detectar a Base DN", "Test Base DN" : "Testar a Base DN", @@ -149,13 +168,15 @@ "One User Base DN per line" : "Um usuário de Base DN por linha", "User Search Attributes" : "Atributos de Busca de Usuário", "Optional; one attribute per line" : "Opcional; um atributo por linha", + "Disable users missing from LDAP" : "Desativar usuários ausentes no LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando ativado, os usuários importados do LDAP que estiverem ausentes serão desativados", "Group Display Name Field" : "Campo de nome de exibição do Grupo", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP a usar para gerar o nome de apresentação do grupo.", "Base Group Tree" : "Árvore de Grupo Base", "One Group Base DN per line" : "Um grupo Base DN por linha", "Group Search Attributes" : "Atributos de Busca de Grupo", "Group-Member association" : "Associação Grupo-Membro", - "Dynamic Group Member URL" : "URL do Grupo Dinâmico de membro", + "Dynamic Group Member URL" : "URL de Membro de Grupo Dinâmico", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "O atributo LDAP que em objetos do grupo contém uma pesquisa URL LDAP que determina quais objetos pertencem ao grupo. (Um cenário vazio desativa a funcionalidade de membros de grupo dinâmico.)", "Nested Groups" : "Grupos Aninhados", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quando habilitado, os grupos que contêm os grupos são suportados. (Só funciona se o atributo de membro de grupo contém DNs.)", @@ -164,7 +185,7 @@ "Enable LDAP password changes per user" : "Ativar alteração de senha LDAP por usuário", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permite que usuários LDAP alterem senha e permite que o Super Administrador e o Administradores de grupo troquem a senha dos usuários LDAP. Só funciona quando as políticas de controle de acesso estão configuradas de acordo com o servidor LDAP. As senhas são enviadas em texto puro ao servidor LDAP. Criptografia de transporte deve ser usada e a hash da senha deve ser configurada no servidor LDAP. ", "(New password is sent as plain text to LDAP)" : "(Nova senha é enviada como texto puro para o LDAP)", - "Default password policy DN" : "Política DN de senha padrão", + "Default password policy DN" : "DN da política de senha padrão", "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "O DN da política de senha padrão que será usada para gerenciar a expiração de senha. Funciona somente quando as alterações por usuários das senhas LDAP estão habilitadas e é somente suportado por OpenLDAP. Deixe em branco para desativar a expiração de senha.", "Special Attributes" : "Atributos especiais", "Quota Field" : "Campo de cota", @@ -177,8 +198,31 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixe em branco para o nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD.", "\"$home\" Placeholder Field" : "Campo Reservado \"$home\"", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home em uma configuração de armazenamento externo será substituído pelo valor do atributo especificado", - "Internal Username" : "Nome de usuário interno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por padrão, um nome de usuário interno será criado a partir de um atributo UUID. Isso garante que o nome de usuário seja único e estes caracteres não precisam ser convertidos. um nome de usuário interno possui a restrição que somente estes caracteres são permitdos: [ a-zA-Z0-9_.@- ]. Outros caracteres serão substituidos por seus correspondentes ASCII ou simplesmente omitidos. Em caso de coincidências, um número será adicionado/incrementado. O nome de usuário interno é utilizado para identificar o usuário internamente. Também é o nome padrão da pasta principal do usuário. Também é uma parte das URL's remotas, por exemplo, para todos os serviços *DAV. Com esta configuração, o comportamento padrão pode ser alterado. Deixe em branco para que assuma o comportamento padrão. Alterações terão efeito apenas em novos usuários LDAP mapeados (adicionados).", + "User Profile Attributes" : "Atributos do Perfil do Usuário", + "Phone Field" : "Campo de Telefone", + "User profile Phone will be set from the specified attribute" : "O Telefone no perfil do usuário será definido a partir do atributo especificado", + "Website Field" : "Campo de Website", + "User profile Website will be set from the specified attribute" : "O Website no perfil do usuário será definido a partir do atributo especificado", + "Address Field" : "Campo de Endereço", + "User profile Address will be set from the specified attribute" : "O Endereço no perfil do usuário será definido a partir do atributo especificado", + "Twitter Field" : "Campo de Twitter", + "User profile Twitter will be set from the specified attribute" : "O Twitter no perfil do usuário será definido a partir do atributo especificado", + "Fediverse Field" : "Campo de Fediverso", + "User profile Fediverse will be set from the specified attribute" : "O Fediverso no perfil do usuário será definido a partir do atributo especificado", + "Organisation Field" : "Campo de Organização", + "User profile Organisation will be set from the specified attribute" : "A Organização no perfil do usuário será definida a partir do atributo especificado", + "Role Field" : "Campo de Função", + "User profile Role will be set from the specified attribute" : "A Função no perfil do usuário será definida a partir do atributo especificado", + "Headline Field" : "Campo do Título", + "User profile Headline will be set from the specified attribute" : "O Título do perfil do usuário será definido a partir do atributo especificado", + "Biography Field" : "Campo de Biografia", + "User profile Biography will be set from the specified attribute" : "A Biografia no perfil do usuário será definida a partir do atributo especificado", + "Birthdate Field" : "Campo de Data de Nascimento", + "User profile Date of birth will be set from the specified attribute" : "A Data de Nascimento no perfil do usuário será definida a partir do atributo especificado", + "Pronouns Field" : "Campo de Pronomes", + "User profile Pronouns will be set from the specified attribute" : "Os Pronomes no perfil do usuário serão definidos a partir do atributo especificado", + "Internal Username" : "Nome de Usuário Interno", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Isso garante que o nome de usuário seja exclusivo e os caracteres não precisem ser convertidos. O nome de usuário interno tem a restrição de que apenas esses caracteres são permitidos: [a-zA-Z0-9_.@-]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões, um número será adicionado/aumentado. O nome de usuário interno é usado para identificar um usuário internamente. Também é o nome padrão para a pasta inicial do usuário. Também faz parte de URLs remotos, por exemplo, para todos os serviços DAV. Com essa configuração, o comportamento padrão pode ser substituído. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados). Deixe-a vazia para o comportamento padrão.", "Internal Username Attribute:" : "Atributo Interno de Nome de Usuário:", "Override UUID detection" : "Substituir detecção 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." : "Por padrão, o atributo UUID é detectado automaticamente. O atributo UUID é usado para identificar corretamente os usuários e grupos LDAP. Além disso, o nome de usuário interno será criado com base no UUID, se não especificado acima. Você pode substituir a configuração e passar um atributo de sua escolha. Você deve certificar-se de que o atributo de sua escolha pode ser lido tanto por usuários quanto por grupos, e que seja único. Deixe-o em branco para o comportamento padrão. As alterações terão efeito apenas para usuários e grupos LDAP recém mapeados (adicionados).", @@ -187,6 +231,7 @@ "Username-LDAP User Mapping" : "Mapeamento de Usuário Username-LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Os nomes de usuários são usados para armazenar e atribuir metadados. Para identificar e reconhecer com precisão os usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento do nome de usuário para o usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Além disso, o DN também é armazenado em cache para reduzir a interação LDAP, mas não é usado para identificação. Se o DN mudar, as alterações serão encontradas. O nome de usuário interno é usado em todo lugar. Limpar os mapeamentos gerará sobras em todos os lugares. Limpar os mapeamentos não é sensível à configuração e afeta todas as configurações do LDAP! Nunca limpe os mapeamentos em um ambiente de produção, apenas em um estágio de teste ou experimental.", "Clear Username-LDAP User Mapping" : "Limpar Mapeamento de Usuário username-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Limpar Mapeamento do Grupo groupname-LDAP" -},"pluralForm" :"nplurals=2; plural=(n > 1);" + "Clear Groupname-LDAP Group Mapping" : "Limpar Mapeamento do Grupo groupname-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Configuração inválida. Por favor dê uma olhada nos logs para mais detalhes." +},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/pt_PT.js b/apps/user_ldap/l10n/pt_PT.js index 25965dbc028..cfa4702c62e 100644 --- a/apps/user_ldap/l10n/pt_PT.js +++ b/apps/user_ldap/l10n/pt_PT.js @@ -6,7 +6,6 @@ OC.L10N.register( "No action specified" : "Nenhuma ação especificada", "No configuration specified" : "Nenhuma configuração especificada", "No data specified" : "Nenhuns dados especificados", - " Could not set configuration %s" : "Não foi possível definir a configuração %s", "Action does not exist" : "A ação não existe", "Very weak password" : "Palavra-passe muito fraca", "Weak password" : "Palavra-passe fraca", @@ -25,9 +24,9 @@ OC.L10N.register( "Base DN could not be auto-detected, please revise credentials, host and port." : "Não foi possível detetar automaticamente o ND base, por favor, verifique as credenciais, anfitrião e porta.", "Could not detect Base DN, please enter it manually." : "Não foi possível detetar o ND de base, por favor introduza-o manualmente.", "{nthServer}. Server" : "{nthServer}. Servidor", - "No object found in the given Base DN. Please revise." : "Nenhum objecto encontrado na Base DN fornecida. Por favor verifique.", + "No object found in the given Base DN. Please revise." : "Nenhum objeto encontrado na Base DN fornecida. Por favor verifique.", "More than 1,000 directory entries available." : "Mais de 1,000 entradas de diretório disponíveis.", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ocorreu um erro. Por favor verifique o ND de base, bem como as definições de ligação e as credenciais.", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ocorreu um erro. Por favor, verifique o ND Base, bem como as definições de ligação e as credenciais.", "Do you really want to delete the current Server Configuration?" : "Deseja eliminar a 'Configuração do Servidor' atual?", "Confirm Deletion" : "Confirmar Eliminação", "Mappings cleared successfully!" : "Mapas limpos com sucesso!", @@ -40,11 +39,8 @@ OC.L10N.register( "Select attributes" : "Selecionar atributos", "User found and settings verified." : "Utilizador encontrado e definições verificadas.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de procura é inválido, provavelmente devido a problemas de sintaxe. Verifique se existem números ímpares de parêntisis abertos e/ou fechados. Por favor reveja.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ocorreu um erro de ligação ao LDAP / AD. Por favor, verifique o anfitrião, porta e credenciais.", "Please provide a login name to test against" : "Por favor, indique um nome de sessão para testar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Uma vez que o servidor LDAP / AD não suporta a propriedade \"memberOf\" (grupos) a caixa de grupos foi desactivada.", - "_%s group found_::_%s groups found_" : ["%s grupo encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["%s utilizador encontrado","%s utilizadores encontrados"], + "LDAP Connection" : "Ligação LDAP", "Could not find the desired feature" : "Não se encontrou a função desejada", "Invalid Host" : "Anfitrião Inválido", "Test Configuration" : "Testar a configuração", @@ -59,10 +55,8 @@ OC.L10N.register( "LDAP Filter:" : "Filtro LDAP:", "The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica quais grupos LDAP devem ter acesso à instância %s.", "When logging in, %s will find the user based on the following attributes:" : "Quando entrar no sistema, %s irá encontrar o utilizador baseando-se nos seguintes atributos:", - "LDAP / AD Username:" : "Nome de Utilizador LDAP / AD:", - "LDAP / AD Email Address:" : "Endereço de Correio Eletrónico LDPA / AD", "Other Attributes:" : "Outros Atributos:", - "Test Loginname" : "Testar nome de login", + "Test Loginname" : "Testar nome de início de sessão", "Verify settings" : "Verificar definições", "%s. Server:" : "%s. Servidor:", "Copy current configuration into new directory binding" : "Copiar a configuração atual para um novo registo de diretoria", @@ -78,8 +72,8 @@ OC.L10N.register( "Detect Base DN" : "Detetar Base DN", "Test Base DN" : "Testar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita pedidos LDAP automáticos. Melhor para grandes configurações, mas requer conhecimentos LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Introduzir filtros LDAP manualmente (recomendado para directórios grandes)", - "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." : "Os objectos mais comuns para utilizadores são <em>organizationalPerson, person, user, and inetOrgPerson</em>. Se não tem a certeza de que classe de objecto deverá seleccionar, por favor, contacte o administrador do Directório.", + "Manually enter LDAP filters (recommended for large directories)" : "Introduzir filtros LDAP manualmente (recomendado para diretórios grandes)", + "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." : "Os objetos mais comuns para utilizadores são <em>organizationalPerson, person, user, and inetOrgPerson</em>. Se não tem a certeza de que classe de objeto deverá selecionar, por favor, contacte o administrador do diretório.", "The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica quais utilizadores do LDAP devem ter acesso à instância %s.", "Verify settings and count users" : "Verificar definições e contar utilizadores", "Saving" : "A guardar", @@ -104,13 +98,13 @@ OC.L10N.register( "Backup (Replica) Host" : "Anfitrião de Cópia de Segurança (Réplica)", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Indique um anfitrião de cópia de segurança. Este deve ser uma réplica do servidor principal de LDAP/AD ", "Backup (Replica) Port" : "Porta do servidor de backup (Replica)", - "Disable Main Server" : "Desactivar servidor principal", + "Disable Main Server" : "Desativar servidor principal", "Only connect to the replica server." : "Ligar apenas ao servidor de réplicas.", "Turn off SSL certificate validation." : "Desligar a validação de certificado 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." : "Não recomendado, use-o somente para teste! ligação só funciona com esta opção, importar o certificado SSL do servidor LDAP para o seu servidor %s.", + "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." : "Não recomendado, utilize-o apenas para testes! Se a ligação só funciona com esta opção, importe o certificado SSL do servidor LDAP para o seu servidor %s.", "Cache Time-To-Live" : "Cache do tempo de vida dos objetos no servidor", "in seconds. A change empties the cache." : "em segundos. Uma alteração esvazia a cache.", - "Directory Settings" : "Definições de directorias", + "Directory Settings" : "Definições de diretorias", "User Display Name Field" : "Mostrador do nome de utilizador.", "The LDAP attribute to use to generate the user's display name." : "O atributo de LDAP para gerar o nome a exibir do utilizador.", "2nd User Display Name Field" : "2.º Mostrador do Nome de Utilizador.", @@ -128,9 +122,9 @@ OC.L10N.register( "Dynamic Group Member URL" : "URL Dinâmica de Membro do Grupo", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "O atributo LDAP que em objetos de grupo contém um URL de pesquisa LDAP que determina que objetos pertencem ao grupo. (Uma definição vazia desativa a funcionalidade de membros de grupo dinâmico.)", "Nested Groups" : "Grupos agrupados", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quando habilitado os grupos, os grupos são suportados. (Só funciona se o atributo de membro de grupo contém DNs.)", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quando ativado, os grupos que contêm grupos são suportados. (Só funciona se o atributo de membro do grupo contiver DNs).", "Paging chunksize" : "Bloco de paginação", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamanho do bloco usado para pesquisas LDAP paginados que podem retornar resultados volumosos como utilizador ou grupo de enumeração. (Defini-lo 0 desactiva paginada das pesquisas LDAP nessas situações.)", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamanho do bloco usado para pesquisas LDAP paginados que podem retornar resultados volumosos como utilizador ou grupo de enumeração. (Defini-lo 0 desativa paginada das pesquisas LDAP nessas situações.)", "Special Attributes" : "Atributos especiais", "Quota Field" : "Quota", "Quota Default" : "Quota padrão", @@ -138,12 +132,12 @@ OC.L10N.register( "User Home Folder Naming Rule" : "Regra da pasta inicial do utilizador", "Internal Username" : "Nome de utilizador interno", "Internal Username Attribute:" : "Atributo do nome de utilizador interno", - "Override UUID detection" : "Passar a detecção do 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." : "Por defeito, o ownCloud detecta automaticamente o atributo UUID. Este atributo é usado para identificar inequivocamente grupos e utilizadores LDAP. Igualmente, o nome de utilizador interno é criado com base no UUID, se o contrário não for especificado. Pode sobrepor esta definição colocando um atributo à sua escolha. Tenha em atenção que esse atributo deve ser válido tanto para grupos como para utilizadores, e que é único. Deixe em branco para optar pelo comportamento por defeito. Estas alteração apenas terão efeito em novos utilizadores e grupos mapeados (adicionados).", + "Override UUID detection" : "Passar a deteção do 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." : "Por defeito, o ownCloud deteta automaticamente o atributo UUID. Este atributo é usado para identificar inequivocamente grupos e utilizadores LDAP. Igualmente, o nome de utilizador interno é criado com base no UUID, se o contrário não for especificado. Pode sobrepor esta definição colocando um atributo à sua escolha. Tenha em atenção que esse atributo deve ser válido tanto para grupos como para utilizadores, e que é único. Deixe em branco para optar pelo comportamento por defeito. Estas alteração apenas terão efeito em novos utilizadores e grupos mapeados (adicionados).", "UUID Attribute for Users:" : "Atributo UUID para utilizadores:", "UUID Attribute for Groups:" : "Atributo UUID para grupos:", "Username-LDAP User Mapping" : "Mapeamento do utilizador LDAP", "Clear Username-LDAP User Mapping" : "Limpar mapeamento do utilizador-LDAP", "Clear Groupname-LDAP Group Mapping" : "Limpar o mapeamento do nome de grupo LDAP" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/pt_PT.json b/apps/user_ldap/l10n/pt_PT.json index 0417a64bcf3..d508a7d7263 100644 --- a/apps/user_ldap/l10n/pt_PT.json +++ b/apps/user_ldap/l10n/pt_PT.json @@ -4,7 +4,6 @@ "No action specified" : "Nenhuma ação especificada", "No configuration specified" : "Nenhuma configuração especificada", "No data specified" : "Nenhuns dados especificados", - " Could not set configuration %s" : "Não foi possível definir a configuração %s", "Action does not exist" : "A ação não existe", "Very weak password" : "Palavra-passe muito fraca", "Weak password" : "Palavra-passe fraca", @@ -23,9 +22,9 @@ "Base DN could not be auto-detected, please revise credentials, host and port." : "Não foi possível detetar automaticamente o ND base, por favor, verifique as credenciais, anfitrião e porta.", "Could not detect Base DN, please enter it manually." : "Não foi possível detetar o ND de base, por favor introduza-o manualmente.", "{nthServer}. Server" : "{nthServer}. Servidor", - "No object found in the given Base DN. Please revise." : "Nenhum objecto encontrado na Base DN fornecida. Por favor verifique.", + "No object found in the given Base DN. Please revise." : "Nenhum objeto encontrado na Base DN fornecida. Por favor verifique.", "More than 1,000 directory entries available." : "Mais de 1,000 entradas de diretório disponíveis.", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ocorreu um erro. Por favor verifique o ND de base, bem como as definições de ligação e as credenciais.", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ocorreu um erro. Por favor, verifique o ND Base, bem como as definições de ligação e as credenciais.", "Do you really want to delete the current Server Configuration?" : "Deseja eliminar a 'Configuração do Servidor' atual?", "Confirm Deletion" : "Confirmar Eliminação", "Mappings cleared successfully!" : "Mapas limpos com sucesso!", @@ -38,11 +37,8 @@ "Select attributes" : "Selecionar atributos", "User found and settings verified." : "Utilizador encontrado e definições verificadas.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de procura é inválido, provavelmente devido a problemas de sintaxe. Verifique se existem números ímpares de parêntisis abertos e/ou fechados. Por favor reveja.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ocorreu um erro de ligação ao LDAP / AD. Por favor, verifique o anfitrião, porta e credenciais.", "Please provide a login name to test against" : "Por favor, indique um nome de sessão para testar", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Uma vez que o servidor LDAP / AD não suporta a propriedade \"memberOf\" (grupos) a caixa de grupos foi desactivada.", - "_%s group found_::_%s groups found_" : ["%s grupo encontrado","%s grupos encontrados"], - "_%s user found_::_%s users found_" : ["%s utilizador encontrado","%s utilizadores encontrados"], + "LDAP Connection" : "Ligação LDAP", "Could not find the desired feature" : "Não se encontrou a função desejada", "Invalid Host" : "Anfitrião Inválido", "Test Configuration" : "Testar a configuração", @@ -57,10 +53,8 @@ "LDAP Filter:" : "Filtro LDAP:", "The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica quais grupos LDAP devem ter acesso à instância %s.", "When logging in, %s will find the user based on the following attributes:" : "Quando entrar no sistema, %s irá encontrar o utilizador baseando-se nos seguintes atributos:", - "LDAP / AD Username:" : "Nome de Utilizador LDAP / AD:", - "LDAP / AD Email Address:" : "Endereço de Correio Eletrónico LDPA / AD", "Other Attributes:" : "Outros Atributos:", - "Test Loginname" : "Testar nome de login", + "Test Loginname" : "Testar nome de início de sessão", "Verify settings" : "Verificar definições", "%s. Server:" : "%s. Servidor:", "Copy current configuration into new directory binding" : "Copiar a configuração atual para um novo registo de diretoria", @@ -76,8 +70,8 @@ "Detect Base DN" : "Detetar Base DN", "Test Base DN" : "Testar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita pedidos LDAP automáticos. Melhor para grandes configurações, mas requer conhecimentos LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Introduzir filtros LDAP manualmente (recomendado para directórios grandes)", - "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." : "Os objectos mais comuns para utilizadores são <em>organizationalPerson, person, user, and inetOrgPerson</em>. Se não tem a certeza de que classe de objecto deverá seleccionar, por favor, contacte o administrador do Directório.", + "Manually enter LDAP filters (recommended for large directories)" : "Introduzir filtros LDAP manualmente (recomendado para diretórios grandes)", + "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." : "Os objetos mais comuns para utilizadores são <em>organizationalPerson, person, user, and inetOrgPerson</em>. Se não tem a certeza de que classe de objeto deverá selecionar, por favor, contacte o administrador do diretório.", "The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica quais utilizadores do LDAP devem ter acesso à instância %s.", "Verify settings and count users" : "Verificar definições e contar utilizadores", "Saving" : "A guardar", @@ -102,13 +96,13 @@ "Backup (Replica) Host" : "Anfitrião de Cópia de Segurança (Réplica)", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Indique um anfitrião de cópia de segurança. Este deve ser uma réplica do servidor principal de LDAP/AD ", "Backup (Replica) Port" : "Porta do servidor de backup (Replica)", - "Disable Main Server" : "Desactivar servidor principal", + "Disable Main Server" : "Desativar servidor principal", "Only connect to the replica server." : "Ligar apenas ao servidor de réplicas.", "Turn off SSL certificate validation." : "Desligar a validação de certificado 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." : "Não recomendado, use-o somente para teste! ligação só funciona com esta opção, importar o certificado SSL do servidor LDAP para o seu servidor %s.", + "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." : "Não recomendado, utilize-o apenas para testes! Se a ligação só funciona com esta opção, importe o certificado SSL do servidor LDAP para o seu servidor %s.", "Cache Time-To-Live" : "Cache do tempo de vida dos objetos no servidor", "in seconds. A change empties the cache." : "em segundos. Uma alteração esvazia a cache.", - "Directory Settings" : "Definições de directorias", + "Directory Settings" : "Definições de diretorias", "User Display Name Field" : "Mostrador do nome de utilizador.", "The LDAP attribute to use to generate the user's display name." : "O atributo de LDAP para gerar o nome a exibir do utilizador.", "2nd User Display Name Field" : "2.º Mostrador do Nome de Utilizador.", @@ -126,9 +120,9 @@ "Dynamic Group Member URL" : "URL Dinâmica de Membro do Grupo", "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "O atributo LDAP que em objetos de grupo contém um URL de pesquisa LDAP que determina que objetos pertencem ao grupo. (Uma definição vazia desativa a funcionalidade de membros de grupo dinâmico.)", "Nested Groups" : "Grupos agrupados", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quando habilitado os grupos, os grupos são suportados. (Só funciona se o atributo de membro de grupo contém DNs.)", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Quando ativado, os grupos que contêm grupos são suportados. (Só funciona se o atributo de membro do grupo contiver DNs).", "Paging chunksize" : "Bloco de paginação", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamanho do bloco usado para pesquisas LDAP paginados que podem retornar resultados volumosos como utilizador ou grupo de enumeração. (Defini-lo 0 desactiva paginada das pesquisas LDAP nessas situações.)", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamanho do bloco usado para pesquisas LDAP paginados que podem retornar resultados volumosos como utilizador ou grupo de enumeração. (Defini-lo 0 desativa paginada das pesquisas LDAP nessas situações.)", "Special Attributes" : "Atributos especiais", "Quota Field" : "Quota", "Quota Default" : "Quota padrão", @@ -136,12 +130,12 @@ "User Home Folder Naming Rule" : "Regra da pasta inicial do utilizador", "Internal Username" : "Nome de utilizador interno", "Internal Username Attribute:" : "Atributo do nome de utilizador interno", - "Override UUID detection" : "Passar a detecção do 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." : "Por defeito, o ownCloud detecta automaticamente o atributo UUID. Este atributo é usado para identificar inequivocamente grupos e utilizadores LDAP. Igualmente, o nome de utilizador interno é criado com base no UUID, se o contrário não for especificado. Pode sobrepor esta definição colocando um atributo à sua escolha. Tenha em atenção que esse atributo deve ser válido tanto para grupos como para utilizadores, e que é único. Deixe em branco para optar pelo comportamento por defeito. Estas alteração apenas terão efeito em novos utilizadores e grupos mapeados (adicionados).", + "Override UUID detection" : "Passar a deteção do 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." : "Por defeito, o ownCloud deteta automaticamente o atributo UUID. Este atributo é usado para identificar inequivocamente grupos e utilizadores LDAP. Igualmente, o nome de utilizador interno é criado com base no UUID, se o contrário não for especificado. Pode sobrepor esta definição colocando um atributo à sua escolha. Tenha em atenção que esse atributo deve ser válido tanto para grupos como para utilizadores, e que é único. Deixe em branco para optar pelo comportamento por defeito. Estas alteração apenas terão efeito em novos utilizadores e grupos mapeados (adicionados).", "UUID Attribute for Users:" : "Atributo UUID para utilizadores:", "UUID Attribute for Groups:" : "Atributo UUID para grupos:", "Username-LDAP User Mapping" : "Mapeamento do utilizador LDAP", "Clear Username-LDAP User Mapping" : "Limpar mapeamento do utilizador-LDAP", "Clear Groupname-LDAP Group Mapping" : "Limpar o mapeamento do nome de grupo LDAP" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ro.js b/apps/user_ldap/l10n/ro.js deleted file mode 100644 index 152e0120ced..00000000000 --- a/apps/user_ldap/l10n/ro.js +++ /dev/null @@ -1,105 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Ștergerea mapărilor a eșuat.", - "Failed to delete the server configuration" : "Ștergerea configurației serverului a eșuat.", - "Valid configuration, connection established!" : "Configurație validată, conexiune stabilită!", - "No action specified" : "Nu este specificată nicio acțiune ", - "No configuration specified" : "Nu este specificată nicio configurație", - "No data specified" : "Nu au fost specificate date", - " Could not set configuration %s" : "Nu a putut fi setată configurația %s", - "Action does not exist" : "Acțiunea nu există", - "Renewing …" : "Reînnoiesc ...", - "Very weak password" : "Parolă foarte slabă", - "Weak password" : "Parolă slabă", - "So-so password" : "Parolă medie", - "Good password" : "Parolă bună", - "Strong password" : "Parolă puternică", - "The Base DN appears to be wrong" : "DN-ul de bază pare a fi greșit", - "Testing configuration…" : "Se testează configurația...", - "Configuration incorrect" : "Configurație incorectă", - "Configuration incomplete" : "Configurație incompletă", - "Configuration OK" : "Configurație validă", - "Select groups" : "Selectează grupuri ", - "Select object classes" : "Selectează clase de obiecte", - "Please check the credentials, they seem to be wrong." : "Verifică datele de autentificare, ele par a fi greșite.", - "Please specify the port, it could not be auto-detected." : "Specifică portul, nu a putut fi detectat automat.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "DN-ul de bază nu a putut fi detectat automat, te rugăm revizuiește datele de autentificare, gazda și portul.", - "Could not detect Base DN, please enter it manually." : "DN-ul de bază nu a putut fi detectat, introdu-l manual.", - "{nthServer}. Server" : "{nthServer}. Server", - "More than 1,000 directory entries available." : "Mai mult de 1000 de directoare disponibile.", - "Do you really want to delete the current Server Configuration?" : "Sigur vrei să ștergi configurația curentă a serverului?", - "Confirm Deletion" : "Confirmă ștergerea", - "Mappings cleared successfully!" : "Asocierile au fost șterse!", - "Error while clearing the mappings." : "Eroare la ștergerea asocierilor.", - "Select attributes" : "Selectaţi caracteristici", - "Your password will expire tomorrow." : "Parola ta va expira mâine.", - "Your password will expire today." : "Parola ta va expira astăzi.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Parola ta va expira în %n zi.","Parola ta va expira în %n zile.","Parola ta va expira în %n zile."], - "LDAP / AD integration" : "Integrare LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s grup găsit.","%s grupuri găsite.","%s grupuri găsite."], - "_%s user found_::_%s users found_" : ["%s utilizator găsit.","%s utilizatori găsiți.","%s utilizatori găsiți."], - "Could not find the desired feature" : "Nu s-a putut găsi funcționalitatea dorită.", - "Invalid Host" : "Host invalid", - "Test Configuration" : "Configurare test", - "Help" : "Ajutor", - "Search groups" : "Caută grupuri", - "Available groups" : "Grupuri disponibile", - "Selected groups" : "Grupurile selectate", - "LDAP Filter:" : "Filtru LDAP:", - "LDAP / AD Username:" : "Utilizator LDAP / AD", - "Other Attributes:" : "Alte caracteristici :", - "Verify settings" : "Verifică setările", - "%s. Server:" : "%s. Server:", - "Delete the current configuration" : "Șterge configurația curentă", - "Host" : "Gazdă", - "Port" : "Portul", - "Detect Port" : "Detectează portul", - "User DN" : "DN-ul utilizatorului", - "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-ul utilizatorului cu care se va efectua asocierea, de exemplu uid=agent,dc=example,dc=com. Pentru acces anonim, lasă DN-ul și parola libere.", - "Password" : "Parolă", - "For anonymous access, leave DN and Password empty." : "Pentru acces anonim, lasă DN-ul și parola libere.", - "Save Credentials" : "Salvează datele de autentificare", - "One Base DN per line" : "Un DN de bază pe linie", - "You can specify Base DN for users and groups in the Advanced tab" : "Poți specifica DN-ul de bază pentru utilizatori și grupuri în fila Avansat", - "Detect Base DN" : "Detectează DN-ul de bază", - "Test Base DN" : "Testează DN-ul de bază", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evită solicitările LDAP automate. De preferat pentru instalările mai complexe, dar necesită câteva cunoștințe LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Introdu filtrele LDAP manual (recomandat pentru medii LDAP largi)", - "Verify settings and count users" : "Verifică setările și numără utilizatorii", - "Saving" : "Se salvează", - "Back" : "Înapoi", - "Continue" : "Continuă", - "Please renew your password." : "Te rog reînnoiește parola.", - "An internal error occurred." : "A apărut o eroare internă.", - "Please try again or contact your administrator." : "Încearcă din nou sau contactează-ți administratorul.", - "Current password" : "Parola curentă", - "New password" : "Noua parolă", - "Renew password" : "Reînnoiește parola", - "Wrong password." : "Parolă greșită.", - "Cancel" : "Anulează", - "Server" : "Server", - "Users" : "Utilizatori", - "Login Attributes" : "Atribute de autentificare", - "Groups" : "Grupuri", - "Expert" : "Expert", - "Advanced" : "Avansat", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Atenție</b> Modulul PHP LDAP nu este instalat, infrastructura nu va funcționa. Contactează administratorul sistemului pentru al instala.", - "Connection Settings" : "Setările de conexiune", - "Configuration Active" : "Configurație activă", - "When unchecked, this configuration will be skipped." : "Dacă este debifat, se va sări peste această configurație.", - "Disable Main Server" : "Dezactivaţi serverul principal", - "Turn off SSL certificate validation." : "Oprește validarea certificatelor SSL ", - "in seconds. A change empties the cache." : "în secunde. O schimbare curăță memoria tampon.", - "Directory Settings" : "Setările directorului", - "User Display Name Field" : "Câmpul cu numele vizibil al utilizatorului", - "Base User Tree" : "Arborele de bază al utilizatorilor", - "One User Base DN per line" : "Un DN utilizator de bază pe linie", - "Group Display Name Field" : "Câmpul cu numele grupului", - "Base Group Tree" : "Arborele de bază al Grupurilor", - "One Group Base DN per line" : "Un Group Base DN pe linie", - "Group-Member association" : "Asocierea Grup-Membru", - "Special Attributes" : "Caracteristici speciale ", - "Internal Username" : "Nume utilizator intern" -}, -"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/apps/user_ldap/l10n/ro.json b/apps/user_ldap/l10n/ro.json deleted file mode 100644 index bc958c1fe5d..00000000000 --- a/apps/user_ldap/l10n/ro.json +++ /dev/null @@ -1,103 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Ștergerea mapărilor a eșuat.", - "Failed to delete the server configuration" : "Ștergerea configurației serverului a eșuat.", - "Valid configuration, connection established!" : "Configurație validată, conexiune stabilită!", - "No action specified" : "Nu este specificată nicio acțiune ", - "No configuration specified" : "Nu este specificată nicio configurație", - "No data specified" : "Nu au fost specificate date", - " Could not set configuration %s" : "Nu a putut fi setată configurația %s", - "Action does not exist" : "Acțiunea nu există", - "Renewing …" : "Reînnoiesc ...", - "Very weak password" : "Parolă foarte slabă", - "Weak password" : "Parolă slabă", - "So-so password" : "Parolă medie", - "Good password" : "Parolă bună", - "Strong password" : "Parolă puternică", - "The Base DN appears to be wrong" : "DN-ul de bază pare a fi greșit", - "Testing configuration…" : "Se testează configurația...", - "Configuration incorrect" : "Configurație incorectă", - "Configuration incomplete" : "Configurație incompletă", - "Configuration OK" : "Configurație validă", - "Select groups" : "Selectează grupuri ", - "Select object classes" : "Selectează clase de obiecte", - "Please check the credentials, they seem to be wrong." : "Verifică datele de autentificare, ele par a fi greșite.", - "Please specify the port, it could not be auto-detected." : "Specifică portul, nu a putut fi detectat automat.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "DN-ul de bază nu a putut fi detectat automat, te rugăm revizuiește datele de autentificare, gazda și portul.", - "Could not detect Base DN, please enter it manually." : "DN-ul de bază nu a putut fi detectat, introdu-l manual.", - "{nthServer}. Server" : "{nthServer}. Server", - "More than 1,000 directory entries available." : "Mai mult de 1000 de directoare disponibile.", - "Do you really want to delete the current Server Configuration?" : "Sigur vrei să ștergi configurația curentă a serverului?", - "Confirm Deletion" : "Confirmă ștergerea", - "Mappings cleared successfully!" : "Asocierile au fost șterse!", - "Error while clearing the mappings." : "Eroare la ștergerea asocierilor.", - "Select attributes" : "Selectaţi caracteristici", - "Your password will expire tomorrow." : "Parola ta va expira mâine.", - "Your password will expire today." : "Parola ta va expira astăzi.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Parola ta va expira în %n zi.","Parola ta va expira în %n zile.","Parola ta va expira în %n zile."], - "LDAP / AD integration" : "Integrare LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s grup găsit.","%s grupuri găsite.","%s grupuri găsite."], - "_%s user found_::_%s users found_" : ["%s utilizator găsit.","%s utilizatori găsiți.","%s utilizatori găsiți."], - "Could not find the desired feature" : "Nu s-a putut găsi funcționalitatea dorită.", - "Invalid Host" : "Host invalid", - "Test Configuration" : "Configurare test", - "Help" : "Ajutor", - "Search groups" : "Caută grupuri", - "Available groups" : "Grupuri disponibile", - "Selected groups" : "Grupurile selectate", - "LDAP Filter:" : "Filtru LDAP:", - "LDAP / AD Username:" : "Utilizator LDAP / AD", - "Other Attributes:" : "Alte caracteristici :", - "Verify settings" : "Verifică setările", - "%s. Server:" : "%s. Server:", - "Delete the current configuration" : "Șterge configurația curentă", - "Host" : "Gazdă", - "Port" : "Portul", - "Detect Port" : "Detectează portul", - "User DN" : "DN-ul utilizatorului", - "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-ul utilizatorului cu care se va efectua asocierea, de exemplu uid=agent,dc=example,dc=com. Pentru acces anonim, lasă DN-ul și parola libere.", - "Password" : "Parolă", - "For anonymous access, leave DN and Password empty." : "Pentru acces anonim, lasă DN-ul și parola libere.", - "Save Credentials" : "Salvează datele de autentificare", - "One Base DN per line" : "Un DN de bază pe linie", - "You can specify Base DN for users and groups in the Advanced tab" : "Poți specifica DN-ul de bază pentru utilizatori și grupuri în fila Avansat", - "Detect Base DN" : "Detectează DN-ul de bază", - "Test Base DN" : "Testează DN-ul de bază", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evită solicitările LDAP automate. De preferat pentru instalările mai complexe, dar necesită câteva cunoștințe LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Introdu filtrele LDAP manual (recomandat pentru medii LDAP largi)", - "Verify settings and count users" : "Verifică setările și numără utilizatorii", - "Saving" : "Se salvează", - "Back" : "Înapoi", - "Continue" : "Continuă", - "Please renew your password." : "Te rog reînnoiește parola.", - "An internal error occurred." : "A apărut o eroare internă.", - "Please try again or contact your administrator." : "Încearcă din nou sau contactează-ți administratorul.", - "Current password" : "Parola curentă", - "New password" : "Noua parolă", - "Renew password" : "Reînnoiește parola", - "Wrong password." : "Parolă greșită.", - "Cancel" : "Anulează", - "Server" : "Server", - "Users" : "Utilizatori", - "Login Attributes" : "Atribute de autentificare", - "Groups" : "Grupuri", - "Expert" : "Expert", - "Advanced" : "Avansat", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Atenție</b> Modulul PHP LDAP nu este instalat, infrastructura nu va funcționa. Contactează administratorul sistemului pentru al instala.", - "Connection Settings" : "Setările de conexiune", - "Configuration Active" : "Configurație activă", - "When unchecked, this configuration will be skipped." : "Dacă este debifat, se va sări peste această configurație.", - "Disable Main Server" : "Dezactivaţi serverul principal", - "Turn off SSL certificate validation." : "Oprește validarea certificatelor SSL ", - "in seconds. A change empties the cache." : "în secunde. O schimbare curăță memoria tampon.", - "Directory Settings" : "Setările directorului", - "User Display Name Field" : "Câmpul cu numele vizibil al utilizatorului", - "Base User Tree" : "Arborele de bază al utilizatorilor", - "One User Base DN per line" : "Un DN utilizator de bază pe linie", - "Group Display Name Field" : "Câmpul cu numele grupului", - "Base Group Tree" : "Arborele de bază al Grupurilor", - "One Group Base DN per line" : "Un Group Base DN pe linie", - "Group-Member association" : "Asocierea Grup-Membru", - "Special Attributes" : "Caracteristici speciale ", - "Internal Username" : "Nume utilizator intern" -},"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/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 9e66dc3cd5a..e9abc7d540c 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -6,11 +6,12 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Неверная конфигурация: анонимное связывание не разрешается.", "Valid configuration, connection established!" : "Конфигурация настроена верно, связь установлена!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Конфигурация настроена верно, но связывание не удалось. Проверьте настройки сервера и реквизиты доступа.", - "Invalid configuration. Please have a look at the logs for further details." : "Неверная конфигурация. Просмотрите журналы для получения дополнительных сведений.", + "Invalid configuration: %s" : "Недопустимая конфигурация: %s", "No action specified" : "Действие не указано", "No configuration specified" : "Конфигурация не указана", "No data specified" : "Нет данных", - " Could not set configuration %s" : "Невозможно создать конфигурацию %s", + "Invalid data specified" : "Указаны некорректные данные", + "Could not set configuration %1$s to %2$s" : "Не удалось задать конфигурацию %1$s для %2$s", "Action does not exist" : "Действие не существует", "Renewing …" : "Обновление…", "Very weak password" : "Очень слабый пароль", @@ -25,12 +26,12 @@ OC.L10N.register( "Configuration OK" : "Конфигурация в порядке", "Select groups" : "Выберите группы", "Select object classes" : "Выберите объектные классы", - "Please check the credentials, they seem to be wrong." : "Пожалуйста проверьте учетный данные, возможно они не верны.", + "Please check the credentials, they seem to be wrong." : "Пожалуйста, проверьте учётные данные — возможно, они указаны неверно.", "Please specify the port, it could not be auto-detected." : "Пожалуйста укажите порт, он не может быть определен автоматически.", "Base DN could not be auto-detected, please revise credentials, host and port." : "База поиска не может быть определена автоматически, пожалуйста перепроверьте учетные данные, адрес и порт.", "Could not detect Base DN, please enter it manually." : "Невозможно обнаружить Base DN, пожалуйста, задайте вручную.", "{nthServer}. Server" : "Сервер {nthServer}.", - "No object found in the given Base DN. Please revise." : "Не найдено объектов в Base DN. Пожалуйста перепроверьте.", + "No object found in the given Base DN. Please revise." : "В указанной базовой DN не найден ни один объект. Пожалуйста, перепроверьте.", "More than 1,000 directory entries available." : "В каталоге доступно более 1,000 записей.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} элемент доступен в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Произошла ошибка. Пожалуйста проверьте базу поиска DN, а также настройки подключения и учетные данные.", @@ -49,22 +50,39 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Подумайте о сужении поиска, поскольку он охватывает многих пользователей, но только первый из которых сможет войти в систему.", "An unspecified error occurred. Please check log and settings." : "Произошла неуказанная ошибка. Проверьте настройки и журнал.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Некорректный фильтр поиска, возможно из-за синтаксических проблем, таких как несоответствие открывающих и закрывающих скобок. Пожалуйста проверьте.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Произошла ошибка подключения к LDAP / AD, пожалуйста проверьте настройки подключения и учетные данные.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Отсутствует заполнитель «%uid». Он будет заменен на логин при запросе к LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Произошла ошибка подключения к LDAP/AD. Пожалуйста, проверьте хост, порт и учётные данные.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заполнитель \"%uid\" отсутствует. Он будет заменён именем пользователя при запросе LDAP/AD.", "Please provide a login name to test against" : "Пожалуйста, укажите логин для проверки", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Настройка групп была отключена, так как сервер LDAP / AD не поддерживает memberOf.", - "Password change rejected. Hint: " : "Смена пароля отклонена. Подсказка:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Блок группы был отключен, поскольку сервер LDAP/AD не поддерживает memberOf.", + "Password change rejected. Hint: %s" : "Изменение пароля отклонено. Подсказка: %s", + "Mandatory field \"%s\" left empty" : "Обязательное поле «%s» оставлено пустым", + "A password is given, but not an LDAP agent" : "Пароль задан, но не указан LDAP-агент", + "No password is given for the user agent" : "Пароль для LDAP-агента не задан", + "No LDAP base DN was given" : "Не указана базовая DN LDAP", + "User base DN is not a subnode of global base DN" : "Базовая DN пользователей не является подузлом глобальной базовой DN", + "Group base DN is not a subnode of global base DN" : " Базовая DN групп не является подузлом глобальной базовой DN", + "Login filter does not contain %s placeholder." : "Фильтр входа не содержит плейсхолдер %s.", "Please login with the new password" : "Войдите в систему со своим новым паролем", "LDAP User backend" : "Механизм учета пользователей LDAP", "Your password will expire tomorrow." : "Завтра истекает срок действия пароля.", "Your password will expire today." : "Сегодня истекает срок действия пароля.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Срок действия пароля истекает через %n день.","Срок действия пароля истекает через %n дня.","Срок действия пароля истекает через %n дней.","Срок действия пароля истекает через %n день."], - "LDAP / AD integration" : "Интеграция LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено","%s групп найдено"], - "_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено","%s пользователей найдено"], + "LDAP/AD integration" : "LDAP/AD интеграция", + "LDAP Connection" : "Подключение по протоколу LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Не удалось выполнить привязку для этой конфигурации LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Ошибка поиска в этой конфигурации LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Найдена неактивная конфигурация LDAP: %s","Найдено %n неактивных конфигурации LDAP: %s","Найдено %n неактивных конфигураций LDAP: %s","Найдено %n неактивных конфигураций LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : [" Привязка и поиск работают в настроенном LDAP-соединении (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"], + "Invalid LDAP UUIDs" : "Недопустимые UUID LDAP", + "None found" : "Ничего не найдено", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Обнаружены недопустимые идентификаторы UUID учетных записей или групп LDAP. Пожалуйста, ознакомьтесь с вашими настройками \"Переопределение обнаружения UUID\" в экспертной части конфигурации LDAP и используйте \"occ ldap:update-uuid\", чтобы обновить их.", + "_%n group found_::_%n groups found_" : ["Найдена %n группа","Найдено %n группы","Найдено %n групп","Найдено %n группы"], + "> 1000 groups found" : "Найдено более 1000 групп", + "> 1000 users found" : "Найдено более 1000 пользователей", + "_%n user found_::_%n users found_" : ["Найден %n пользователь","Найдено %n пользователя","Найдено %n пользователей","Найдено %n пользователя"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не удалось автоматически определить атрибут, содержащий отображаемое имя пользователя. Зайдите в расширенные настройки LDAP и укажите его вручную.", "Could not find the desired feature" : "Не удается найти требуемую функциональность", - "Invalid Host" : "Некорректный адрес сервера", + "Invalid Host" : "Недопустимый адрес сервера", "LDAP user and group backend" : "Интерфейс пользователей и групп LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Это приложение позволяет администраторам подключать Nextcloud к каталогу пользователей на основе LDAP.", "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Это приложение позволяет администраторам подключать Nextcloud к каталогу пользователей на основе LDAP для аутентификации и подготовки пользователей, групп и пользовательских атрибутов. Администраторы могут настроить это приложение для подключения к одному или нескольким каталогам LDAP или Active Directory через интерфейс LDAP. Атрибуты, такие как пользовательская квота, электронная почта, изображения аватаров, членство в группах и многое другое, могут быть перенесены в Nextcloud из каталога с соответствующими запросами и фильтрами.\n\nПользователь регистрируется в Nextcloud со своими учетными данными LDAP или AD и получает доступ на основе запроса аутентификации, обрабатываемого сервером LDAP или AD. Nextcloud не хранит пароли LDAP или AD, а эти учетные данные используются для аутентификации пользователя, а затем Nextcloud использует сеанс для идентификатора пользователя. Дополнительная информация доступна в документации LDAP Пользователи и Группы.", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Этот фильтр определяет какие LDAP группы должны иметь доступ к экземпляру %s.", "Verify settings and count the groups" : "Проверить настройки и пересчитать группы", "When logging in, %s will find the user based on the following attributes:" : "При входе, %s будет искать пользователя по следующим атрибутам:", - "LDAP / AD Username:" : "Имя пользователя LDAP/AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволяет вход в LDAP / AD с помощью имени пользователя, которое может определяться как «uid», так и «sAMAccountName».", - "LDAP / AD Email Address:" : "Адрес email LDAP / AD:", + "LDAP/AD Username:" : "LDAP/AD Имя пользователя:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволяет войти в систему по имени пользователя LDAP/AD, которое является либо \"uid\", либо \"sAMAccountName\" и будет распознано.", + "LDAP/AD Email Address:" : "LDAP/AD Адрес электронной почты:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Позволяет вход с помощью адреса email. Разрешены аттрибуты «mail» и «mailPrimaryAddress».", "Other Attributes:" : "Другие атрибуты:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Определяет фильтр для применения при попытке входа. «%% uid» заменяет имя пользователя для входа в систему. Например: \"uid=%%uid\"", "Test Loginname" : "Проверить логин", + "Attempts to receive a DN for the given loginname and the current login filter" : "Попытки получить DN для данного имени пользователя и текущего фильтра LDAP", "Verify settings" : "Проверить настройки", "%s. Server:" : "Сервер %s:", "Add a new configuration" : "Добавить новую конфигурацию", @@ -151,6 +170,8 @@ OC.L10N.register( "One User Base DN per line" : "По одной базовому DN пользователей в строке.", "User Search Attributes" : "Атрибуты поиска пользователей", "Optional; one attribute per line" : "Опционально; один атрибут в строке", + "Disable users missing from LDAP" : "Отключить пользователей, отсутствующих в LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "При включении пользователи, которые были импортированы из LDAP, а затем отсутствуют в последующих синхронизациях, будут отключены", "Group Display Name Field" : "Поле отображаемого имени группы", "The LDAP attribute to use to generate the groups's display name." : "Атрибут LDAP, который используется для генерации отображаемого имени группы.", "Base Group Tree" : "База дерева групп", @@ -178,17 +199,41 @@ OC.L10N.register( "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию) или укажите атрибут LDAP/AD.", "\"$home\" Placeholder Field" : "Поле-заполнитель \"$home\"", - "$home in an external storage configuration will be replaced with the value of the specified attribute" : "В конфигурации внешнего хранилища $home будет заменен значением указанного атрибута", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "В конфигурации внешнего хранилища $home будет заменён значением указанного атрибута", + "User Profile Attributes" : "Атрибуты профиля пользователей", + "Phone Field" : "Поле телефона", + "User profile Phone will be set from the specified attribute" : "Телефон в профиле пользователя будет установлен из указанного атрибута", + "Website Field" : "Поле web-сайта", + "User profile Website will be set from the specified attribute" : "Web-сайт в профиле пользователя будет установлен из указанного атрибута", + "Address Field" : "Поле адреса", + "User profile Address will be set from the specified attribute" : "Адрес в профиле пользователя будет установлен из указанного атрибута", + "Twitter Field" : "Поле Twitter", + "User profile Twitter will be set from the specified attribute" : "Twitter в профиле пользователя будет установлен из указанного атрибута", + "Fediverse Field" : "Поле Федерации", + "User profile Fediverse will be set from the specified attribute" : "Федерация в профиле пользователя будет установлена из указанного атрибута", + "Organisation Field" : "Поле организации", + "User profile Organisation will be set from the specified attribute" : "Организация в профиле пользователя будет установлена из указанного атрибута", + "Role Field" : "Поле роли", + "User profile Role will be set from the specified attribute" : "Роль в профиле пользователя будет установлена из указанного атрибута", + "Headline Field" : "Поле заголовка", + "User profile Headline will be set from the specified attribute" : "Заголовок в профиле пользователя будет установлен из указанного атрибута", + "Biography Field" : "Поле биографии", + "User profile Biography will be set from the specified attribute" : "Биография в профиле пользователя будет установлена из указанного атрибута", + "Birthdate Field" : "Поле Даты рождения", + "User profile Date of birth will be set from the specified attribute" : "Дата рождения профиля пользователя будет установлена на основе указанного атрибута", + "Pronouns Field" : " Поле местоимений", + "User profile Pronouns will be set from the specified attribute" : "Местоимения в профиле пользователя будут заданы из указанного атрибута", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Это даёт гарантию того, что имя пользователя уникально и символы не нужно конвертировать. Внутреннее имя пользователя имеет ограничение на то, что только эти символы допустимы: [ a-zA-Z0-9_.@- ]. Другие символы замещаются их корреспондирующими символами ASCII или же просто отбрасываются. При коллизиях добавляется или увеличивается номер. Внутреннее имя пользователя используется для идентификации пользователя внутри системы. Также это по умолчанию имя для домашней папки пользователя. Также это часть адресов URL, например для всех служб *DAV. С помощью этой установки, поведение по умолчанию может быть изменено. Оставьте его пустым для поведения по умолчанию. Изменения будут иметь эффект только для вновь спроецированных (добавленных) пользователей LDAP. ", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "По умолчанию внутреннее имя пользователя будет создано на основе атрибута UUID. Это гарантирует, что имя пользователя будет уникальным и символы не нужно будет преобразовывать. Внутреннее имя пользователя имеет ограничение – разрешены только эти символы: [a-zA-Z0-9_.@-]. Другие символы заменяются их ASCII-кодами или просто опускаются. При совпадениях число будет добавлено/увеличено. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Оно также является именем по умолчанию для домашней папки пользователя. Оно также является частью удалённых URL-адресов, например, для всех служб DAV. С помощью этого параметра можно переопределить поведение по умолчанию. Изменения будут иметь силу только для новых сопоставленных (добавленных) пользователей 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.", + "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." : "По умолчанию атрибут 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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Имена пользователей используются для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется DN для уменьшения числа обращений к LDAP, однако он не используется для идентификации. Если DN был изменён, то изменения будут найдены. Внутреннее имя используется повсеместно. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.", "Clear Username-LDAP User Mapping" : "Очистить соответствия Имя-Пользователь LDAP", - "Clear Groupname-LDAP Group Mapping" : "Очистить соответствия Группа-Группа LDAP" + "Clear Groupname-LDAP Group Mapping" : "Очистить соответствия Группа-Группа LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Неверная конфигурация. Просмотрите журналы для получения дополнительных сведений." }, "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/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index 1d0de0b93b0..97ac0b1eeb3 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -4,11 +4,12 @@ "Invalid configuration: Anonymous binding is not allowed." : "Неверная конфигурация: анонимное связывание не разрешается.", "Valid configuration, connection established!" : "Конфигурация настроена верно, связь установлена!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Конфигурация настроена верно, но связывание не удалось. Проверьте настройки сервера и реквизиты доступа.", - "Invalid configuration. Please have a look at the logs for further details." : "Неверная конфигурация. Просмотрите журналы для получения дополнительных сведений.", + "Invalid configuration: %s" : "Недопустимая конфигурация: %s", "No action specified" : "Действие не указано", "No configuration specified" : "Конфигурация не указана", "No data specified" : "Нет данных", - " Could not set configuration %s" : "Невозможно создать конфигурацию %s", + "Invalid data specified" : "Указаны некорректные данные", + "Could not set configuration %1$s to %2$s" : "Не удалось задать конфигурацию %1$s для %2$s", "Action does not exist" : "Действие не существует", "Renewing …" : "Обновление…", "Very weak password" : "Очень слабый пароль", @@ -23,12 +24,12 @@ "Configuration OK" : "Конфигурация в порядке", "Select groups" : "Выберите группы", "Select object classes" : "Выберите объектные классы", - "Please check the credentials, they seem to be wrong." : "Пожалуйста проверьте учетный данные, возможно они не верны.", + "Please check the credentials, they seem to be wrong." : "Пожалуйста, проверьте учётные данные — возможно, они указаны неверно.", "Please specify the port, it could not be auto-detected." : "Пожалуйста укажите порт, он не может быть определен автоматически.", "Base DN could not be auto-detected, please revise credentials, host and port." : "База поиска не может быть определена автоматически, пожалуйста перепроверьте учетные данные, адрес и порт.", "Could not detect Base DN, please enter it manually." : "Невозможно обнаружить Base DN, пожалуйста, задайте вручную.", "{nthServer}. Server" : "Сервер {nthServer}.", - "No object found in the given Base DN. Please revise." : "Не найдено объектов в Base DN. Пожалуйста перепроверьте.", + "No object found in the given Base DN. Please revise." : "В указанной базовой DN не найден ни один объект. Пожалуйста, перепроверьте.", "More than 1,000 directory entries available." : "В каталоге доступно более 1,000 записей.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} элемент доступен в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Произошла ошибка. Пожалуйста проверьте базу поиска DN, а также настройки подключения и учетные данные.", @@ -47,22 +48,39 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Подумайте о сужении поиска, поскольку он охватывает многих пользователей, но только первый из которых сможет войти в систему.", "An unspecified error occurred. Please check log and settings." : "Произошла неуказанная ошибка. Проверьте настройки и журнал.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Некорректный фильтр поиска, возможно из-за синтаксических проблем, таких как несоответствие открывающих и закрывающих скобок. Пожалуйста проверьте.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Произошла ошибка подключения к LDAP / AD, пожалуйста проверьте настройки подключения и учетные данные.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Отсутствует заполнитель «%uid». Он будет заменен на логин при запросе к LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Произошла ошибка подключения к LDAP/AD. Пожалуйста, проверьте хост, порт и учётные данные.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заполнитель \"%uid\" отсутствует. Он будет заменён именем пользователя при запросе LDAP/AD.", "Please provide a login name to test against" : "Пожалуйста, укажите логин для проверки", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Настройка групп была отключена, так как сервер LDAP / AD не поддерживает memberOf.", - "Password change rejected. Hint: " : "Смена пароля отклонена. Подсказка:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Блок группы был отключен, поскольку сервер LDAP/AD не поддерживает memberOf.", + "Password change rejected. Hint: %s" : "Изменение пароля отклонено. Подсказка: %s", + "Mandatory field \"%s\" left empty" : "Обязательное поле «%s» оставлено пустым", + "A password is given, but not an LDAP agent" : "Пароль задан, но не указан LDAP-агент", + "No password is given for the user agent" : "Пароль для LDAP-агента не задан", + "No LDAP base DN was given" : "Не указана базовая DN LDAP", + "User base DN is not a subnode of global base DN" : "Базовая DN пользователей не является подузлом глобальной базовой DN", + "Group base DN is not a subnode of global base DN" : " Базовая DN групп не является подузлом глобальной базовой DN", + "Login filter does not contain %s placeholder." : "Фильтр входа не содержит плейсхолдер %s.", "Please login with the new password" : "Войдите в систему со своим новым паролем", "LDAP User backend" : "Механизм учета пользователей LDAP", "Your password will expire tomorrow." : "Завтра истекает срок действия пароля.", "Your password will expire today." : "Сегодня истекает срок действия пароля.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Срок действия пароля истекает через %n день.","Срок действия пароля истекает через %n дня.","Срок действия пароля истекает через %n дней.","Срок действия пароля истекает через %n день."], - "LDAP / AD integration" : "Интеграция LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено","%s групп найдено"], - "_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено","%s пользователей найдено"], + "LDAP/AD integration" : "LDAP/AD интеграция", + "LDAP Connection" : "Подключение по протоколу LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Не удалось выполнить привязку для этой конфигурации LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Ошибка поиска в этой конфигурации LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Найдена неактивная конфигурация LDAP: %s","Найдено %n неактивных конфигурации LDAP: %s","Найдено %n неактивных конфигураций LDAP: %s","Найдено %n неактивных конфигураций LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : [" Привязка и поиск работают в настроенном LDAP-соединении (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"], + "Invalid LDAP UUIDs" : "Недопустимые UUID LDAP", + "None found" : "Ничего не найдено", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Обнаружены недопустимые идентификаторы UUID учетных записей или групп LDAP. Пожалуйста, ознакомьтесь с вашими настройками \"Переопределение обнаружения UUID\" в экспертной части конфигурации LDAP и используйте \"occ ldap:update-uuid\", чтобы обновить их.", + "_%n group found_::_%n groups found_" : ["Найдена %n группа","Найдено %n группы","Найдено %n групп","Найдено %n группы"], + "> 1000 groups found" : "Найдено более 1000 групп", + "> 1000 users found" : "Найдено более 1000 пользователей", + "_%n user found_::_%n users found_" : ["Найден %n пользователь","Найдено %n пользователя","Найдено %n пользователей","Найдено %n пользователя"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не удалось автоматически определить атрибут, содержащий отображаемое имя пользователя. Зайдите в расширенные настройки LDAP и укажите его вручную.", "Could not find the desired feature" : "Не удается найти требуемую функциональность", - "Invalid Host" : "Некорректный адрес сервера", + "Invalid Host" : "Недопустимый адрес сервера", "LDAP user and group backend" : "Интерфейс пользователей и групп LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Это приложение позволяет администраторам подключать Nextcloud к каталогу пользователей на основе LDAP.", "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Это приложение позволяет администраторам подключать Nextcloud к каталогу пользователей на основе LDAP для аутентификации и подготовки пользователей, групп и пользовательских атрибутов. Администраторы могут настроить это приложение для подключения к одному или нескольким каталогам LDAP или Active Directory через интерфейс LDAP. Атрибуты, такие как пользовательская квота, электронная почта, изображения аватаров, членство в группах и многое другое, могут быть перенесены в Nextcloud из каталога с соответствующими запросами и фильтрами.\n\nПользователь регистрируется в Nextcloud со своими учетными данными LDAP или AD и получает доступ на основе запроса аутентификации, обрабатываемого сервером LDAP или AD. Nextcloud не хранит пароли LDAP или AD, а эти учетные данные используются для аутентификации пользователя, а затем Nextcloud использует сеанс для идентификатора пользователя. Дополнительная информация доступна в документации LDAP Пользователи и Группы.", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Этот фильтр определяет какие LDAP группы должны иметь доступ к экземпляру %s.", "Verify settings and count the groups" : "Проверить настройки и пересчитать группы", "When logging in, %s will find the user based on the following attributes:" : "При входе, %s будет искать пользователя по следующим атрибутам:", - "LDAP / AD Username:" : "Имя пользователя LDAP/AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволяет вход в LDAP / AD с помощью имени пользователя, которое может определяться как «uid», так и «sAMAccountName».", - "LDAP / AD Email Address:" : "Адрес email LDAP / AD:", + "LDAP/AD Username:" : "LDAP/AD Имя пользователя:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволяет войти в систему по имени пользователя LDAP/AD, которое является либо \"uid\", либо \"sAMAccountName\" и будет распознано.", + "LDAP/AD Email Address:" : "LDAP/AD Адрес электронной почты:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Позволяет вход с помощью адреса email. Разрешены аттрибуты «mail» и «mailPrimaryAddress».", "Other Attributes:" : "Другие атрибуты:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Определяет фильтр для применения при попытке входа. «%% uid» заменяет имя пользователя для входа в систему. Например: \"uid=%%uid\"", "Test Loginname" : "Проверить логин", + "Attempts to receive a DN for the given loginname and the current login filter" : "Попытки получить DN для данного имени пользователя и текущего фильтра LDAP", "Verify settings" : "Проверить настройки", "%s. Server:" : "Сервер %s:", "Add a new configuration" : "Добавить новую конфигурацию", @@ -149,6 +168,8 @@ "One User Base DN per line" : "По одной базовому DN пользователей в строке.", "User Search Attributes" : "Атрибуты поиска пользователей", "Optional; one attribute per line" : "Опционально; один атрибут в строке", + "Disable users missing from LDAP" : "Отключить пользователей, отсутствующих в LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "При включении пользователи, которые были импортированы из LDAP, а затем отсутствуют в последующих синхронизациях, будут отключены", "Group Display Name Field" : "Поле отображаемого имени группы", "The LDAP attribute to use to generate the groups's display name." : "Атрибут LDAP, который используется для генерации отображаемого имени группы.", "Base Group Tree" : "База дерева групп", @@ -176,17 +197,41 @@ "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию) или укажите атрибут LDAP/AD.", "\"$home\" Placeholder Field" : "Поле-заполнитель \"$home\"", - "$home in an external storage configuration will be replaced with the value of the specified attribute" : "В конфигурации внешнего хранилища $home будет заменен значением указанного атрибута", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "В конфигурации внешнего хранилища $home будет заменён значением указанного атрибута", + "User Profile Attributes" : "Атрибуты профиля пользователей", + "Phone Field" : "Поле телефона", + "User profile Phone will be set from the specified attribute" : "Телефон в профиле пользователя будет установлен из указанного атрибута", + "Website Field" : "Поле web-сайта", + "User profile Website will be set from the specified attribute" : "Web-сайт в профиле пользователя будет установлен из указанного атрибута", + "Address Field" : "Поле адреса", + "User profile Address will be set from the specified attribute" : "Адрес в профиле пользователя будет установлен из указанного атрибута", + "Twitter Field" : "Поле Twitter", + "User profile Twitter will be set from the specified attribute" : "Twitter в профиле пользователя будет установлен из указанного атрибута", + "Fediverse Field" : "Поле Федерации", + "User profile Fediverse will be set from the specified attribute" : "Федерация в профиле пользователя будет установлена из указанного атрибута", + "Organisation Field" : "Поле организации", + "User profile Organisation will be set from the specified attribute" : "Организация в профиле пользователя будет установлена из указанного атрибута", + "Role Field" : "Поле роли", + "User profile Role will be set from the specified attribute" : "Роль в профиле пользователя будет установлена из указанного атрибута", + "Headline Field" : "Поле заголовка", + "User profile Headline will be set from the specified attribute" : "Заголовок в профиле пользователя будет установлен из указанного атрибута", + "Biography Field" : "Поле биографии", + "User profile Biography will be set from the specified attribute" : "Биография в профиле пользователя будет установлена из указанного атрибута", + "Birthdate Field" : "Поле Даты рождения", + "User profile Date of birth will be set from the specified attribute" : "Дата рождения профиля пользователя будет установлена на основе указанного атрибута", + "Pronouns Field" : " Поле местоимений", + "User profile Pronouns will be set from the specified attribute" : "Местоимения в профиле пользователя будут заданы из указанного атрибута", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Это даёт гарантию того, что имя пользователя уникально и символы не нужно конвертировать. Внутреннее имя пользователя имеет ограничение на то, что только эти символы допустимы: [ a-zA-Z0-9_.@- ]. Другие символы замещаются их корреспондирующими символами ASCII или же просто отбрасываются. При коллизиях добавляется или увеличивается номер. Внутреннее имя пользователя используется для идентификации пользователя внутри системы. Также это по умолчанию имя для домашней папки пользователя. Также это часть адресов URL, например для всех служб *DAV. С помощью этой установки, поведение по умолчанию может быть изменено. Оставьте его пустым для поведения по умолчанию. Изменения будут иметь эффект только для вновь спроецированных (добавленных) пользователей LDAP. ", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "По умолчанию внутреннее имя пользователя будет создано на основе атрибута UUID. Это гарантирует, что имя пользователя будет уникальным и символы не нужно будет преобразовывать. Внутреннее имя пользователя имеет ограничение – разрешены только эти символы: [a-zA-Z0-9_.@-]. Другие символы заменяются их ASCII-кодами или просто опускаются. При совпадениях число будет добавлено/увеличено. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Оно также является именем по умолчанию для домашней папки пользователя. Оно также является частью удалённых URL-адресов, например, для всех служб DAV. С помощью этого параметра можно переопределить поведение по умолчанию. Изменения будут иметь силу только для новых сопоставленных (добавленных) пользователей 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.", + "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." : "По умолчанию атрибут 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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Имена пользователей используются для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется DN для уменьшения числа обращений к LDAP, однако он не используется для идентификации. Если DN был изменён, то изменения будут найдены. Внутреннее имя используется повсеместно. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.", "Clear Username-LDAP User Mapping" : "Очистить соответствия Имя-Пользователь LDAP", - "Clear Groupname-LDAP Group Mapping" : "Очистить соответствия Группа-Группа LDAP" + "Clear Groupname-LDAP Group Mapping" : "Очистить соответствия Группа-Группа LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Неверная конфигурация. Просмотрите журналы для получения дополнительных сведений." },"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/user_ldap/l10n/sc.js b/apps/user_ldap/l10n/sc.js new file mode 100644 index 00000000000..801f642fe73 --- /dev/null +++ b/apps/user_ldap/l10n/sc.js @@ -0,0 +1,198 @@ +OC.L10N.register( + "user_ldap", + { + "Failed to clear the mappings." : "Impossìbile a limpiare is assignatziones.", + "Failed to delete the server configuration" : "No at fatu a cantzellare sa cunfiguratzione de su serbidore", + "Invalid configuration: Anonymous binding is not allowed." : "Cunfiguratzione non bàlida: is ligòngios anònimos no sunt permìtidos.", + "Valid configuration, connection established!" : "Cunfiguratzione bàlida, connessione istabilida!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Cunfiguratzione bàlida, ma ligòngiu no istabilidu. Càstia sa cunfiguratzione de su serbidore e is credentziales.", + "No action specified" : "Peruna atzione ispetzificada", + "No configuration specified" : "Peruna cunfiguratzione ispetzificada", + "No data specified" : "Perunu datu ispetzificadu", + "Action does not exist" : "S'atzione no esistit", + "Renewing …" : "Renovende ...", + "Very weak password" : "Crae dèbile a beru", + "Weak password" : "Crae dèbile", + "So-so password" : "Crae aici aici", + "Good password" : "Crae bona", + "Strong password" : "Crae bona a beru", + "The Base DN appears to be wrong" : "Sa Base DN parit isballiada", + "Testing configuration…" : "Proa de cunfiguratzione...", + "Configuration incorrect" : "Cunfiguratzione no curreta", + "Configuration incomplete" : "Cunfiguratzione no cumpleta", + "Configuration OK" : "Cunfiguratzione OK", + "Select groups" : "Seletziona grupos", + "Select object classes" : "Seletziona is classes de is ogetos", + "Please check the credentials, they seem to be wrong." : "Càstia is credentziales, parint isballiadas.", + "Please specify the port, it could not be auto-detected." : "Ispetzìfica sa porta, no at fatu a dda rilevare in manera automàtica.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "No at fatu a rilevare sa Base DN in manera automàtica, torra a castiare is credentziales, su retzidore e sa porta.", + "Could not detect Base DN, please enter it manually." : "No at fatu a rilevare sa Base DN, pone•dda a manu.", + "{nthServer}. Server" : "{nthServer}. Serbidore", + "No object found in the given Base DN. Please revise." : "No s'at agatadu perunu ogetu in sa Base DN dada. Torra a castiare.", + "More than 1,000 directory entries available." : "B'at prus de 1000 elementos de cartella a disponimentu.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} elementos a disponimentu a intro de sa Base DN frunida","{objectsFound} elementos a disponimentu a intro de sa Base DN frunida"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "B'at àpidu un'errore. Controlla sa Base DN, paris cun sa cunfiguratzione de connessione e is credentziales.", + "Do you really want to delete the current Server Configuration?" : "A beru boles cantzellare sa Cunfiguratzione de Serbidore currente?", + "Confirm Deletion" : "Cunfirma Cantzelladura", + "Mappings cleared successfully!" : "Assignatziones limpiadas!", + "Error while clearing the mappings." : "Errore limpiende is assignatziones.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "S'assòtziu anònimu no est permìtidu. Pone unu DN Utente e una Crae.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Errore de is operatziones LDAP. S'assòtziu anònimu diat pòdere no èssere permìtidu.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "No at fatu a sarvare. Assegura•ti ca sa base de datos siat in Operatzione. Torra a carrigare antis de sighire.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiende sa modalidade s'ant a ativare is rechestas automàticas LDAP. Segundu sa mannària de su LDAP diant pòdere istentare de prus. Boles sighire a cambiare sa modalidade?", + "Mode switch" : "Càmbia modalidade", + "Select attributes" : "Seletziona atributos", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Utente no agatadu. Càstia is atributos de atzessu e su nùmene de utente. Filtru eficatze (de copiare pro sa balidatzione de sa lìnia de cumandu): <br/>", + "User found and settings verified." : "Utente agatadu e cunfiguratzione averiguada.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Proa a istrìnghere sa chirca, ca includit medas utèntzias, aici isceti sa prima de custas at a pòdere fàghere s'atzessu.", + "An unspecified error occurred. Please check log and settings." : "B'at àpidu un'errore no ispetzificadu. Càstia su registru e sa cunfiguratzione.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Su filtru de chirca no est bàlidu, forsis pro problemas de sintassi comente unu nùmeru dìspari de parèntesi abertas e serradas. Torra a castiare.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "B'at àpidu un'errore de connessione a LDAP/AD. Càstia su retzidore, sa porta e is credentziales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Mancat s'elementu provisòriu\"%uid\". At a èssere cambiadu cun su nùmene de atzessu cando s'at a preguntare LDAP/AP.", + "Please provide a login name to test against" : "Fruni unu nùmene de atzessu pro torrare a fàghere sa proa", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Sa casella de grupu est istada disativada, ca su serbidore LDAP/AP no suportat memberOf.", + "Please login with the new password" : "Torra a fàghere s'atzessu cun sa crae noa", + "LDAP User backend" : "Motore utente LDAP", + "Your password will expire tomorrow." : "Sa crae tua at a iscadire cras.", + "Your password will expire today." : "Sa crae tua at a iscadire oe.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Sa crae tua at a iscadire a intro de %n dies.","Sa crae tua at a iscadire a intro de %n dies."], + "LDAP/AD integration" : "Integratziones LDAP/AP", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No at fatu a rilevare s'atributu nùmene visualizadu dae s'utente. Ispetzìfica·ddu tue in is cunfiguratziones avantzadas LDAP.", + "Could not find the desired feature" : "No at fatu a agatare sa funtzione disigiada", + "Invalid Host" : "Retzidore no bàlidu", + "LDAP user and group backend" : "Motore utente e grupos LDAP", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Custa aplicatzione permitit a s'amministratzione de connètere Nextcloud a una cartella de utentes basada in LDAP-", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Custa aplicatzione permitit a s'amministratzione de connètere Nextcloud a una cartella de utentes basada in LDAP, pro s'autenticatzione e sa creatzione de utentes, grupos e atributos de is utentes. S'amministratzione podet cunfigurare cust'aplicatzione pro connètere una o prus cartellas LDAP o Active Directory tràmite un'interfache LDAP. Is atributos comente cuota de utente, posta eletrònica, immàgines de avatar, apartenèntzia a grupos e àteros podent èssere tramudados in Nextcloud dae una cartella cun is rechestas e filtros adatos. \n\nUn'utente intrat in Nextcloud cun is credentziales LDAP o AD suas, e tenet atzessu gràtzias a una rechesta de autenticatzione manigiada dae su serbidore LDAP o AD. Nextcloud no allogat is craes LDAP o AD, ma custas credentziales sunt impreada pro autenticare un'utente e pustis Nextcloud impreat una sessione pro s'ID de s'utente. Àteras informatziones sunt disponìbiles in sa documentatzione de su Motore Utente e Grupos LDAP.", + "Test Configuration" : "Proa de Cunfiguratzione", + "Help" : "Agiudu", + "Groups meeting these criteria are available in %s:" : "Is grupos cunformes a custos critèrios sunt disponìbiles in %s:", + "Only these object classes:" : "Isceti custas classes de ogetos:", + "Only from these groups:" : "Isceti dae custos grupos:", + "Search groups" : "Chirca grupos", + "Available groups" : "Grupos disponìbiles", + "Selected groups" : "Grupos seletzionados", + "Edit LDAP Query" : "Modìfica sa rechesta LDAP/AP", + "LDAP Filter:" : "Filtru LDAP/AP:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Su filtru ispetzìficat cales grupos LDAP ant a tènnere atzessu a s'istàntzia %s.", + "Verify settings and count the groups" : "Averìgua sa cunfiguratzione e conta is grupos", + "When logging in, %s will find the user based on the following attributes:" : "Faghende s'atzessu, %s at a agatare s'utente in sa base de custos atributos:", + "LDAP/AD Username:" : "Nùmene utente LDAP/AD", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permitit s'atzessu tràmite su nùmene utente LDAP/AD, chi est o \"uid\" o \"sAMAccountName\" e at a èssere rilevadu.", + "LDAP/AD Email Address:" : "Indiritzu Posta Eletrònica LDAP/AD:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permitit s'atzessu tràmite un'atributu de posta eletrònica. \"mail\" e \"mailPrimaryAddress\" sunt permìtidos.", + "Other Attributes:" : "Àteros atributos:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definit su filtru de aplicare, cando si proat a intrare. Su nùmene utente est cambiadu cun \"%%uid\" in su momentu de s'atzessu. Esèmpiu: \"uid=%%uid\"", + "Test Loginname" : "Proa de su nùmene de atzessu", + "Verify settings" : "Averìgua sa cunfiguratzione", + "%s. Server:" : "%s. Serbidore: ", + "Add a new configuration" : "Agiunghe una cunfiguratzione noa", + "Copy current configuration into new directory binding" : "Còpia sa cunfiguratzione currente in sa cartella de assòtziu noa", + "Delete the current configuration" : "Cantzella sa cunfiguratzione currente", + "Host" : "Retzidore", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Podes omìtere su protocollu, sarvu chi rechedes SSL. In custu casu, cumintza cun ldaps://", + "Port" : "Porta", + "Detect Port" : "Rileva Porta", + "User DN" : "DN Utente", + "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." : "Su DN de s'utente cliente cun su chi si diat dèpere fàghere s'assòtziu, pro esèmpiu uid=agent,dc=example,dc=com. Pro atzessu anònimu, lassa bòidos DN e Crae.", + "Password" : "Crae", + "For anonymous access, leave DN and Password empty." : "Pro atzessu anònimu, lassa bòidos DN e Crae.", + "Save Credentials" : "Sarva Credentziales", + "One Base DN per line" : "Una Base DN pro lìnia", + "You can specify Base DN for users and groups in the Advanced tab" : "Podes ispetzificare sa Base DN pro utentes e grupos in s'ischeda Avantzadas", + "Detect Base DN" : "Rileva Base DN", + "Test Base DN" : "Proa Base DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita rechestas LDAP automàticas. Mellus pro installatziones prus mannas, ma rechedet calicunu connoschimentu de LDAP.", + "Manually enter LDAP filters (recommended for large directories)" : "Inserta a manu is filtros LDAP (cussigiadu pro cartellas mannas)", + "Listing and searching for users is constrained by these criteria:" : "S'elencu e sa chirca de utentes tenet custos critèrios:", + "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." : "Is classes de ogetos prus comunes pro is utentes sunt organizationalPerson, person, user, and inetOrgPerson. Si no tenes seguresa de sa classe de s'ogetu de seberare, pregonta a s'amministratzione de sa cartella tua.", + "The filter specifies which LDAP users shall have access to the %s instance." : "Su filtru ispetzìficat cales utentes LDAP ant a tènnere atzessu a sa %s istàntzia.", + "Verify settings and count users" : "Averìgua sa cunfiguratzione e conta is utentes", + "Saving" : "Sarvende", + "Back" : "In segus", + "Continue" : "Sighi", + "Please renew your password." : "Annoa sa crae tua.", + "An internal error occurred." : "B'at àpidu un'errore de intro.", + "Please try again or contact your administrator." : "Torra a proare o cuntata s'amministratzione.", + "Current password" : "Crae currente", + "New password" : "Crae noa", + "Renew password" : "Annoa crae", + "Wrong password." : "Crae isballiada", + "Cancel" : "Annulla", + "Server" : "Serbidore", + "Users" : "Utentes", + "Login Attributes" : "Atributos de atzessu", + "Groups" : "Grupos", + "Expert" : "Connoschèntzia arta meda", + "Advanced" : "Connoschèntzia avantzada", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Atentzione:</b> Su mòdulu PHP LDAP no est installadu, su motore no at a funtzionare. Pedi a s'amministratzione de sistema de ddu installare.", + "Connection Settings" : "Cunfiguratzione de connessione", + "Configuration Active" : "Cunfiguratzione Ativa", + "When unchecked, this configuration will be skipped." : "Chi no est averiguada, custa cunfiguratzione s'at a sartare.", + "Backup (Replica) Host" : "Retzidore de còpia de seguresa (Repitu)", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Fruni unu retzidore de còpia de seguresa optzionale. Depet èssere unu repitu de su serbidore printzipale LDAP/AD.", + "Backup (Replica) Port" : "Porta de sa còpia de seguresa (Repitu)", + "Disable Main Server" : "Disativa su serbidore printzipale", + "Only connect to the replica server." : "Connete•ti isceti a su repitu de su serbidore.", + "Turn off SSL certificate validation." : "Disativa sa balidatzione de su tzertificadu 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." : "No est cussigiadu, imprea isceti pro sa proa! Si sa connessione traballat isceti cun custa optzione, importa su tzertificadu SSL de su serbidore LDAP in su serbidore tuo %s.", + "Cache Time-To-Live" : "Memòria temporànea TTL", + "in seconds. A change empties the cache." : "de immoe a pagos segundos. Su càmbiu isbòidat sa memòria temporànea.", + "Directory Settings" : "Cunfiguratzione de sa cartella", + "User Display Name Field" : "Campu pro sa visualizatzione de su nùmene utente", + "The LDAP attribute to use to generate the user's display name." : "S'atributu LDAP de impreare pro generare su nùmene visualizadu dae s'utente.", + "2nd User Display Name Field" : "Segundu campu pro sa visualizatzione de su nùmene utente", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optzionale. Un'atributu LDAP de agiùnghere tra parèntesi a su nùmene visualizadu. Resurtat pro esèmpiu »John Doe (john.doe@example.org)«.", + "Base User Tree" : "Istrutura base de s'utente", + "One User Base DN per line" : "Una DN Base de utente pro lìnia", + "User Search Attributes" : "Atributos de chirca de utente", + "Optional; one attribute per line" : "Optzionale; un'atributu pro lìnia", + "Group Display Name Field" : "Campu pro sa visualizatzione de su nùmene grupu", + "The LDAP attribute to use to generate the groups's display name." : "S'atributu LDAP de impreare pro generare su nùmene visualizadu dae su grupu.", + "Base Group Tree" : "Istrutura base de su grupu", + "One Group Base DN per line" : "Una DN Base de grupu pro lìnia", + "Group Search Attributes" : "Atributos de chirca de grupu", + "Group-Member association" : "Assòtziu grupu-utente", + "Dynamic Group Member URL" : "URL utente de grupu dinàmicu", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "S'atributu LDAP chi in is ogetos de su grupu cuntenet unu URL de chirca LDAP chi sèberat cales ogetos apartentent a su grupu. (Una cunfiguratzione bòida disativat sa funtzionalidade de apartenèntzia a unu grupu dinàmicu.)", + "Nested Groups" : "Grupos a nidu", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Chi est ativadu, is grupos chi cuntenent grupos sunt suportados. (Funtzionat isceti si s'atributu de s'utente de su grupu cuntenet DNs.)", + "Paging chunksize" : "Mannària de is framentos de paginatzione.", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Mannària de framentos impreada pro chircas LDAP paginadas chi diant pòdere torrare resurtados graes comente s'enumeratzione de utentes o grupos. (Sa cunfiguratzione a 0 disativat is chircas LDAP paginadas in custas situatziones.)", + "Enable LDAP password changes per user" : "Ativat is càmbios de crae LDAP pro utente", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitit a is utentes LDAP de cambiare sa crae issoro e permitit a Super Amministratziones e Grupos de Amministratzione de cambiare sa crae de is utentes LDAP issoro. Funtzionat isceti cando is critèrios de controllu de atzessu sunt cunfiguradas segundu su serbidore LDAP. Dadu ca is craes sunt imbiadas a craru a su serbidore LDAP, tocat a impreare sa tzifradura de tràmuda e a cunfigurare in su serbidore sa creatzione de unu hash pro sa crae.", + "(New password is sent as plain text to LDAP)" : "(Sa crae noa s'imbiat a craru a su LDAP)", + "Default password policy DN" : "Critèriu DN de craes predefinidu", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Su DN de unu critèriu de craes predefinidu chi s'at a impreare pro sa gestione de s'iscadèntzia de is craes. Funtzionat isceti cando sa crae LDAP s'utente dda podet modificare e est suportada isceti dae OpenLDAP. Lassa bòidu pro disabilitare sa gestione de s'iscadèntzia de is craes.", + "Special Attributes" : "Atributos ispetziales", + "Quota Field" : "Campu cuota", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Lassa bòidu pro sa cuota utente predefinida. Si nono, ispetzìfica un'atributu LDAP/AD.", + "Quota Default" : "Cuota predefinida", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Subriscriet una cuota predefinida pro utentes LDAP chi non tenent unu valore cunfiguradu in su campu cuota.", + "Email Field" : "Campu posta eletrònica", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Cunfigura s'indiritzu de posta de is utentes dae s'atributu LDAP issoro. Lassa bòidu pro su funtzionamentu predefinidu.", + "User Home Folder Naming Rule" : "Règula de assignatzione de su nùmene de sa cartella utente", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Lassa bòidu pro su nùmene utente (predefinidu). Si nono, ispetzìfica un'atributu LDAP/AD.", + "\"$home\" Placeholder Field" : "\"$home\" Campu sostitutu temporàneu", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in una cunfiguratzione de archiviatzione de foras s'at a cambiare cun su valore de s'atributu ispetzìficu", + "Website Field" : "Campu Situ web", + "Organisation Field" : "Campu organizatzione", + "User profile Organisation will be set from the specified attribute" : "Su profilu de organizatzione de s'utente at a èssere cunfiguradu dae s'atributu ispetzificadu", + "Role Field" : "Campu de faina", + "User profile Role will be set from the specified attribute" : "Sa faina de su profilu de utente at a èssere cunfigurada dae s'atributu ispetzificadu", + "Headline Field" : "Campu de tìtulu", + "User profile Headline will be set from the specified attribute" : "Su tìtulu de su profilu de utente at a èssere cunfiguradu dae s'atributu ispetzificadu", + "Biography Field" : "Campu Biografia", + "User profile Biography will be set from the specified attribute" : "Sa biografia de su profilu de utente at a èssere cunfigurada dae s'atributu ispetzìficu", + "Internal Username" : "Nùmene utente de intro", + "Internal Username Attribute:" : "Atributu nùmene utente de intro:", + "Override UUID detection" : "Ignora rilevada 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." : "A manera predefinida, s'atributu UUID si rilevat in automàticu. S'atributu UUID est impreadu pro identificare cun seguresa is utentes e grupos LDAP. In prus, su nùmene utente de intro s'at a creare basadu subra de s'UUID, si non s'ispetzìficat àteru. Podes ignorare sa cunfiguratzione e frunire un'atributu seberadu dae te. Ti depes segurare chi s'atributu seberadu si potzat otènnere siat pro utenets siat pro grupos e chi siat ùnicu. Lassa bòidu pro funtzionamentu predefinidu. Is càmbios ant a èssere efetivos isceti pro is ùtèntzias e grupos noos LDAP assotziados (agiuntos).", + "UUID Attribute for Users:" : "Atributu UUID pro is utentes:", + "UUID Attribute for Groups:" : "Atributu UUID pro is grupos:", + "Username-LDAP User Mapping" : "Assòtziu Nùmene utente-Utente LDAP", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Is nùmenes utente d'impreant pro archiviare e assignare is metadatos. Pro identificare a pretzisu e connòschere is utentes, cada utente LDAP at a tènnere unu nùmene utente de intro. Custu rechedet un'assòtziu dae nùmene utente a utente LDAP. Su nùmene utente creadu est assotziadu a s'UUID de s'utente LDAP. In prus su DN si ponet in memòria temporànea pro minimare s'interatzione cun LDAP, ma non s'impreat pro s'identificatzione. Si su DN càmbiat, is càmbios s'ant a agatare. Su nùmene utente de intro s'impreat in totue. Limpiende is assòtzios s'ant a lassare arrastos a s'at a interessare totu sa cunfiguratzione LDAP! Non limpies mai is assòtzios in un'ambiente de produtzione, ma isceti in una fase de proa o isperimentos.", + "Clear Username-LDAP User Mapping" : "Lìmpia assòtziu Nùmene utente-Utente LDAP", + "Clear Groupname-LDAP Group Mapping" : "Lìmpia assòtziu Nùmene de su grupu-Grupu LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Cunfiguratzione non bàlida. Càstia is registros pro detàllios in prus." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/sc.json b/apps/user_ldap/l10n/sc.json new file mode 100644 index 00000000000..b11458c74ca --- /dev/null +++ b/apps/user_ldap/l10n/sc.json @@ -0,0 +1,196 @@ +{ "translations": { + "Failed to clear the mappings." : "Impossìbile a limpiare is assignatziones.", + "Failed to delete the server configuration" : "No at fatu a cantzellare sa cunfiguratzione de su serbidore", + "Invalid configuration: Anonymous binding is not allowed." : "Cunfiguratzione non bàlida: is ligòngios anònimos no sunt permìtidos.", + "Valid configuration, connection established!" : "Cunfiguratzione bàlida, connessione istabilida!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "Cunfiguratzione bàlida, ma ligòngiu no istabilidu. Càstia sa cunfiguratzione de su serbidore e is credentziales.", + "No action specified" : "Peruna atzione ispetzificada", + "No configuration specified" : "Peruna cunfiguratzione ispetzificada", + "No data specified" : "Perunu datu ispetzificadu", + "Action does not exist" : "S'atzione no esistit", + "Renewing …" : "Renovende ...", + "Very weak password" : "Crae dèbile a beru", + "Weak password" : "Crae dèbile", + "So-so password" : "Crae aici aici", + "Good password" : "Crae bona", + "Strong password" : "Crae bona a beru", + "The Base DN appears to be wrong" : "Sa Base DN parit isballiada", + "Testing configuration…" : "Proa de cunfiguratzione...", + "Configuration incorrect" : "Cunfiguratzione no curreta", + "Configuration incomplete" : "Cunfiguratzione no cumpleta", + "Configuration OK" : "Cunfiguratzione OK", + "Select groups" : "Seletziona grupos", + "Select object classes" : "Seletziona is classes de is ogetos", + "Please check the credentials, they seem to be wrong." : "Càstia is credentziales, parint isballiadas.", + "Please specify the port, it could not be auto-detected." : "Ispetzìfica sa porta, no at fatu a dda rilevare in manera automàtica.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "No at fatu a rilevare sa Base DN in manera automàtica, torra a castiare is credentziales, su retzidore e sa porta.", + "Could not detect Base DN, please enter it manually." : "No at fatu a rilevare sa Base DN, pone•dda a manu.", + "{nthServer}. Server" : "{nthServer}. Serbidore", + "No object found in the given Base DN. Please revise." : "No s'at agatadu perunu ogetu in sa Base DN dada. Torra a castiare.", + "More than 1,000 directory entries available." : "B'at prus de 1000 elementos de cartella a disponimentu.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} elementos a disponimentu a intro de sa Base DN frunida","{objectsFound} elementos a disponimentu a intro de sa Base DN frunida"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "B'at àpidu un'errore. Controlla sa Base DN, paris cun sa cunfiguratzione de connessione e is credentziales.", + "Do you really want to delete the current Server Configuration?" : "A beru boles cantzellare sa Cunfiguratzione de Serbidore currente?", + "Confirm Deletion" : "Cunfirma Cantzelladura", + "Mappings cleared successfully!" : "Assignatziones limpiadas!", + "Error while clearing the mappings." : "Errore limpiende is assignatziones.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "S'assòtziu anònimu no est permìtidu. Pone unu DN Utente e una Crae.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Errore de is operatziones LDAP. S'assòtziu anònimu diat pòdere no èssere permìtidu.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "No at fatu a sarvare. Assegura•ti ca sa base de datos siat in Operatzione. Torra a carrigare antis de sighire.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiende sa modalidade s'ant a ativare is rechestas automàticas LDAP. Segundu sa mannària de su LDAP diant pòdere istentare de prus. Boles sighire a cambiare sa modalidade?", + "Mode switch" : "Càmbia modalidade", + "Select attributes" : "Seletziona atributos", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Utente no agatadu. Càstia is atributos de atzessu e su nùmene de utente. Filtru eficatze (de copiare pro sa balidatzione de sa lìnia de cumandu): <br/>", + "User found and settings verified." : "Utente agatadu e cunfiguratzione averiguada.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Proa a istrìnghere sa chirca, ca includit medas utèntzias, aici isceti sa prima de custas at a pòdere fàghere s'atzessu.", + "An unspecified error occurred. Please check log and settings." : "B'at àpidu un'errore no ispetzificadu. Càstia su registru e sa cunfiguratzione.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Su filtru de chirca no est bàlidu, forsis pro problemas de sintassi comente unu nùmeru dìspari de parèntesi abertas e serradas. Torra a castiare.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "B'at àpidu un'errore de connessione a LDAP/AD. Càstia su retzidore, sa porta e is credentziales.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Mancat s'elementu provisòriu\"%uid\". At a èssere cambiadu cun su nùmene de atzessu cando s'at a preguntare LDAP/AP.", + "Please provide a login name to test against" : "Fruni unu nùmene de atzessu pro torrare a fàghere sa proa", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Sa casella de grupu est istada disativada, ca su serbidore LDAP/AP no suportat memberOf.", + "Please login with the new password" : "Torra a fàghere s'atzessu cun sa crae noa", + "LDAP User backend" : "Motore utente LDAP", + "Your password will expire tomorrow." : "Sa crae tua at a iscadire cras.", + "Your password will expire today." : "Sa crae tua at a iscadire oe.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Sa crae tua at a iscadire a intro de %n dies.","Sa crae tua at a iscadire a intro de %n dies."], + "LDAP/AD integration" : "Integratziones LDAP/AP", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No at fatu a rilevare s'atributu nùmene visualizadu dae s'utente. Ispetzìfica·ddu tue in is cunfiguratziones avantzadas LDAP.", + "Could not find the desired feature" : "No at fatu a agatare sa funtzione disigiada", + "Invalid Host" : "Retzidore no bàlidu", + "LDAP user and group backend" : "Motore utente e grupos LDAP", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Custa aplicatzione permitit a s'amministratzione de connètere Nextcloud a una cartella de utentes basada in LDAP-", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Custa aplicatzione permitit a s'amministratzione de connètere Nextcloud a una cartella de utentes basada in LDAP, pro s'autenticatzione e sa creatzione de utentes, grupos e atributos de is utentes. S'amministratzione podet cunfigurare cust'aplicatzione pro connètere una o prus cartellas LDAP o Active Directory tràmite un'interfache LDAP. Is atributos comente cuota de utente, posta eletrònica, immàgines de avatar, apartenèntzia a grupos e àteros podent èssere tramudados in Nextcloud dae una cartella cun is rechestas e filtros adatos. \n\nUn'utente intrat in Nextcloud cun is credentziales LDAP o AD suas, e tenet atzessu gràtzias a una rechesta de autenticatzione manigiada dae su serbidore LDAP o AD. Nextcloud no allogat is craes LDAP o AD, ma custas credentziales sunt impreada pro autenticare un'utente e pustis Nextcloud impreat una sessione pro s'ID de s'utente. Àteras informatziones sunt disponìbiles in sa documentatzione de su Motore Utente e Grupos LDAP.", + "Test Configuration" : "Proa de Cunfiguratzione", + "Help" : "Agiudu", + "Groups meeting these criteria are available in %s:" : "Is grupos cunformes a custos critèrios sunt disponìbiles in %s:", + "Only these object classes:" : "Isceti custas classes de ogetos:", + "Only from these groups:" : "Isceti dae custos grupos:", + "Search groups" : "Chirca grupos", + "Available groups" : "Grupos disponìbiles", + "Selected groups" : "Grupos seletzionados", + "Edit LDAP Query" : "Modìfica sa rechesta LDAP/AP", + "LDAP Filter:" : "Filtru LDAP/AP:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Su filtru ispetzìficat cales grupos LDAP ant a tènnere atzessu a s'istàntzia %s.", + "Verify settings and count the groups" : "Averìgua sa cunfiguratzione e conta is grupos", + "When logging in, %s will find the user based on the following attributes:" : "Faghende s'atzessu, %s at a agatare s'utente in sa base de custos atributos:", + "LDAP/AD Username:" : "Nùmene utente LDAP/AD", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permitit s'atzessu tràmite su nùmene utente LDAP/AD, chi est o \"uid\" o \"sAMAccountName\" e at a èssere rilevadu.", + "LDAP/AD Email Address:" : "Indiritzu Posta Eletrònica LDAP/AD:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permitit s'atzessu tràmite un'atributu de posta eletrònica. \"mail\" e \"mailPrimaryAddress\" sunt permìtidos.", + "Other Attributes:" : "Àteros atributos:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definit su filtru de aplicare, cando si proat a intrare. Su nùmene utente est cambiadu cun \"%%uid\" in su momentu de s'atzessu. Esèmpiu: \"uid=%%uid\"", + "Test Loginname" : "Proa de su nùmene de atzessu", + "Verify settings" : "Averìgua sa cunfiguratzione", + "%s. Server:" : "%s. Serbidore: ", + "Add a new configuration" : "Agiunghe una cunfiguratzione noa", + "Copy current configuration into new directory binding" : "Còpia sa cunfiguratzione currente in sa cartella de assòtziu noa", + "Delete the current configuration" : "Cantzella sa cunfiguratzione currente", + "Host" : "Retzidore", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Podes omìtere su protocollu, sarvu chi rechedes SSL. In custu casu, cumintza cun ldaps://", + "Port" : "Porta", + "Detect Port" : "Rileva Porta", + "User DN" : "DN Utente", + "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." : "Su DN de s'utente cliente cun su chi si diat dèpere fàghere s'assòtziu, pro esèmpiu uid=agent,dc=example,dc=com. Pro atzessu anònimu, lassa bòidos DN e Crae.", + "Password" : "Crae", + "For anonymous access, leave DN and Password empty." : "Pro atzessu anònimu, lassa bòidos DN e Crae.", + "Save Credentials" : "Sarva Credentziales", + "One Base DN per line" : "Una Base DN pro lìnia", + "You can specify Base DN for users and groups in the Advanced tab" : "Podes ispetzificare sa Base DN pro utentes e grupos in s'ischeda Avantzadas", + "Detect Base DN" : "Rileva Base DN", + "Test Base DN" : "Proa Base DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita rechestas LDAP automàticas. Mellus pro installatziones prus mannas, ma rechedet calicunu connoschimentu de LDAP.", + "Manually enter LDAP filters (recommended for large directories)" : "Inserta a manu is filtros LDAP (cussigiadu pro cartellas mannas)", + "Listing and searching for users is constrained by these criteria:" : "S'elencu e sa chirca de utentes tenet custos critèrios:", + "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." : "Is classes de ogetos prus comunes pro is utentes sunt organizationalPerson, person, user, and inetOrgPerson. Si no tenes seguresa de sa classe de s'ogetu de seberare, pregonta a s'amministratzione de sa cartella tua.", + "The filter specifies which LDAP users shall have access to the %s instance." : "Su filtru ispetzìficat cales utentes LDAP ant a tènnere atzessu a sa %s istàntzia.", + "Verify settings and count users" : "Averìgua sa cunfiguratzione e conta is utentes", + "Saving" : "Sarvende", + "Back" : "In segus", + "Continue" : "Sighi", + "Please renew your password." : "Annoa sa crae tua.", + "An internal error occurred." : "B'at àpidu un'errore de intro.", + "Please try again or contact your administrator." : "Torra a proare o cuntata s'amministratzione.", + "Current password" : "Crae currente", + "New password" : "Crae noa", + "Renew password" : "Annoa crae", + "Wrong password." : "Crae isballiada", + "Cancel" : "Annulla", + "Server" : "Serbidore", + "Users" : "Utentes", + "Login Attributes" : "Atributos de atzessu", + "Groups" : "Grupos", + "Expert" : "Connoschèntzia arta meda", + "Advanced" : "Connoschèntzia avantzada", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Atentzione:</b> Su mòdulu PHP LDAP no est installadu, su motore no at a funtzionare. Pedi a s'amministratzione de sistema de ddu installare.", + "Connection Settings" : "Cunfiguratzione de connessione", + "Configuration Active" : "Cunfiguratzione Ativa", + "When unchecked, this configuration will be skipped." : "Chi no est averiguada, custa cunfiguratzione s'at a sartare.", + "Backup (Replica) Host" : "Retzidore de còpia de seguresa (Repitu)", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Fruni unu retzidore de còpia de seguresa optzionale. Depet èssere unu repitu de su serbidore printzipale LDAP/AD.", + "Backup (Replica) Port" : "Porta de sa còpia de seguresa (Repitu)", + "Disable Main Server" : "Disativa su serbidore printzipale", + "Only connect to the replica server." : "Connete•ti isceti a su repitu de su serbidore.", + "Turn off SSL certificate validation." : "Disativa sa balidatzione de su tzertificadu 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." : "No est cussigiadu, imprea isceti pro sa proa! Si sa connessione traballat isceti cun custa optzione, importa su tzertificadu SSL de su serbidore LDAP in su serbidore tuo %s.", + "Cache Time-To-Live" : "Memòria temporànea TTL", + "in seconds. A change empties the cache." : "de immoe a pagos segundos. Su càmbiu isbòidat sa memòria temporànea.", + "Directory Settings" : "Cunfiguratzione de sa cartella", + "User Display Name Field" : "Campu pro sa visualizatzione de su nùmene utente", + "The LDAP attribute to use to generate the user's display name." : "S'atributu LDAP de impreare pro generare su nùmene visualizadu dae s'utente.", + "2nd User Display Name Field" : "Segundu campu pro sa visualizatzione de su nùmene utente", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Optzionale. Un'atributu LDAP de agiùnghere tra parèntesi a su nùmene visualizadu. Resurtat pro esèmpiu »John Doe (john.doe@example.org)«.", + "Base User Tree" : "Istrutura base de s'utente", + "One User Base DN per line" : "Una DN Base de utente pro lìnia", + "User Search Attributes" : "Atributos de chirca de utente", + "Optional; one attribute per line" : "Optzionale; un'atributu pro lìnia", + "Group Display Name Field" : "Campu pro sa visualizatzione de su nùmene grupu", + "The LDAP attribute to use to generate the groups's display name." : "S'atributu LDAP de impreare pro generare su nùmene visualizadu dae su grupu.", + "Base Group Tree" : "Istrutura base de su grupu", + "One Group Base DN per line" : "Una DN Base de grupu pro lìnia", + "Group Search Attributes" : "Atributos de chirca de grupu", + "Group-Member association" : "Assòtziu grupu-utente", + "Dynamic Group Member URL" : "URL utente de grupu dinàmicu", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "S'atributu LDAP chi in is ogetos de su grupu cuntenet unu URL de chirca LDAP chi sèberat cales ogetos apartentent a su grupu. (Una cunfiguratzione bòida disativat sa funtzionalidade de apartenèntzia a unu grupu dinàmicu.)", + "Nested Groups" : "Grupos a nidu", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Chi est ativadu, is grupos chi cuntenent grupos sunt suportados. (Funtzionat isceti si s'atributu de s'utente de su grupu cuntenet DNs.)", + "Paging chunksize" : "Mannària de is framentos de paginatzione.", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Mannària de framentos impreada pro chircas LDAP paginadas chi diant pòdere torrare resurtados graes comente s'enumeratzione de utentes o grupos. (Sa cunfiguratzione a 0 disativat is chircas LDAP paginadas in custas situatziones.)", + "Enable LDAP password changes per user" : "Ativat is càmbios de crae LDAP pro utente", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitit a is utentes LDAP de cambiare sa crae issoro e permitit a Super Amministratziones e Grupos de Amministratzione de cambiare sa crae de is utentes LDAP issoro. Funtzionat isceti cando is critèrios de controllu de atzessu sunt cunfiguradas segundu su serbidore LDAP. Dadu ca is craes sunt imbiadas a craru a su serbidore LDAP, tocat a impreare sa tzifradura de tràmuda e a cunfigurare in su serbidore sa creatzione de unu hash pro sa crae.", + "(New password is sent as plain text to LDAP)" : "(Sa crae noa s'imbiat a craru a su LDAP)", + "Default password policy DN" : "Critèriu DN de craes predefinidu", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Su DN de unu critèriu de craes predefinidu chi s'at a impreare pro sa gestione de s'iscadèntzia de is craes. Funtzionat isceti cando sa crae LDAP s'utente dda podet modificare e est suportada isceti dae OpenLDAP. Lassa bòidu pro disabilitare sa gestione de s'iscadèntzia de is craes.", + "Special Attributes" : "Atributos ispetziales", + "Quota Field" : "Campu cuota", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Lassa bòidu pro sa cuota utente predefinida. Si nono, ispetzìfica un'atributu LDAP/AD.", + "Quota Default" : "Cuota predefinida", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Subriscriet una cuota predefinida pro utentes LDAP chi non tenent unu valore cunfiguradu in su campu cuota.", + "Email Field" : "Campu posta eletrònica", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Cunfigura s'indiritzu de posta de is utentes dae s'atributu LDAP issoro. Lassa bòidu pro su funtzionamentu predefinidu.", + "User Home Folder Naming Rule" : "Règula de assignatzione de su nùmene de sa cartella utente", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Lassa bòidu pro su nùmene utente (predefinidu). Si nono, ispetzìfica un'atributu LDAP/AD.", + "\"$home\" Placeholder Field" : "\"$home\" Campu sostitutu temporàneu", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in una cunfiguratzione de archiviatzione de foras s'at a cambiare cun su valore de s'atributu ispetzìficu", + "Website Field" : "Campu Situ web", + "Organisation Field" : "Campu organizatzione", + "User profile Organisation will be set from the specified attribute" : "Su profilu de organizatzione de s'utente at a èssere cunfiguradu dae s'atributu ispetzificadu", + "Role Field" : "Campu de faina", + "User profile Role will be set from the specified attribute" : "Sa faina de su profilu de utente at a èssere cunfigurada dae s'atributu ispetzificadu", + "Headline Field" : "Campu de tìtulu", + "User profile Headline will be set from the specified attribute" : "Su tìtulu de su profilu de utente at a èssere cunfiguradu dae s'atributu ispetzificadu", + "Biography Field" : "Campu Biografia", + "User profile Biography will be set from the specified attribute" : "Sa biografia de su profilu de utente at a èssere cunfigurada dae s'atributu ispetzìficu", + "Internal Username" : "Nùmene utente de intro", + "Internal Username Attribute:" : "Atributu nùmene utente de intro:", + "Override UUID detection" : "Ignora rilevada 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." : "A manera predefinida, s'atributu UUID si rilevat in automàticu. S'atributu UUID est impreadu pro identificare cun seguresa is utentes e grupos LDAP. In prus, su nùmene utente de intro s'at a creare basadu subra de s'UUID, si non s'ispetzìficat àteru. Podes ignorare sa cunfiguratzione e frunire un'atributu seberadu dae te. Ti depes segurare chi s'atributu seberadu si potzat otènnere siat pro utenets siat pro grupos e chi siat ùnicu. Lassa bòidu pro funtzionamentu predefinidu. Is càmbios ant a èssere efetivos isceti pro is ùtèntzias e grupos noos LDAP assotziados (agiuntos).", + "UUID Attribute for Users:" : "Atributu UUID pro is utentes:", + "UUID Attribute for Groups:" : "Atributu UUID pro is grupos:", + "Username-LDAP User Mapping" : "Assòtziu Nùmene utente-Utente LDAP", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Is nùmenes utente d'impreant pro archiviare e assignare is metadatos. Pro identificare a pretzisu e connòschere is utentes, cada utente LDAP at a tènnere unu nùmene utente de intro. Custu rechedet un'assòtziu dae nùmene utente a utente LDAP. Su nùmene utente creadu est assotziadu a s'UUID de s'utente LDAP. In prus su DN si ponet in memòria temporànea pro minimare s'interatzione cun LDAP, ma non s'impreat pro s'identificatzione. Si su DN càmbiat, is càmbios s'ant a agatare. Su nùmene utente de intro s'impreat in totue. Limpiende is assòtzios s'ant a lassare arrastos a s'at a interessare totu sa cunfiguratzione LDAP! Non limpies mai is assòtzios in un'ambiente de produtzione, ma isceti in una fase de proa o isperimentos.", + "Clear Username-LDAP User Mapping" : "Lìmpia assòtziu Nùmene utente-Utente LDAP", + "Clear Groupname-LDAP Group Mapping" : "Lìmpia assòtziu Nùmene de su grupu-Grupu LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Cunfiguratzione non bàlida. Càstia is registros pro detàllios in prus." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/si_LK.js b/apps/user_ldap/l10n/si_LK.js deleted file mode 100644 index f8f0eaecfd8..00000000000 --- a/apps/user_ldap/l10n/si_LK.js +++ /dev/null @@ -1,13 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "පරිශීලකයන්", - "Groups" : "කණ්ඩායම්", - "Help" : "උදව්", - "Host" : "සත්කාරකය", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "SSL අවශ්යය වන විට පමණක් හැර, අන් අවස්ථාවන්හිදී ප්රොටොකෝලය අත් හැරිය හැක. භාවිතා කරන විට ldaps:// ලෙස ආරම්භ කරන්න", - "Port" : "තොට", - "Password" : "මුර පදය", - "Advanced" : "දියුණු/උසස්" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/si_LK.json b/apps/user_ldap/l10n/si_LK.json deleted file mode 100644 index 7a886df99ab..00000000000 --- a/apps/user_ldap/l10n/si_LK.json +++ /dev/null @@ -1,11 +0,0 @@ -{ "translations": { - "Users" : "පරිශීලකයන්", - "Groups" : "කණ්ඩායම්", - "Help" : "උදව්", - "Host" : "සත්කාරකය", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "SSL අවශ්යය වන විට පමණක් හැර, අන් අවස්ථාවන්හිදී ප්රොටොකෝලය අත් හැරිය හැක. භාවිතා කරන විට ldaps:// ලෙස ආරම්භ කරන්න", - "Port" : "තොට", - "Password" : "මුර පදය", - "Advanced" : "දියුණු/උසස්" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/sk.js b/apps/user_ldap/l10n/sk.js index 1c0f8039c86..0a9764a3962 100644 --- a/apps/user_ldap/l10n/sk.js +++ b/apps/user_ldap/l10n/sk.js @@ -6,11 +6,10 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Neplatné nastavenie: anonymné pripojenie nie je povolené.", "Valid configuration, connection established!" : "Platná konfigurácia, spojenie nadviazané!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Nastavenie je v poriadku, ale pripojenie zlyhalo. Skontrolujte nastavenia servera a prihlasovacie údaje.", - "Invalid configuration. Please have a look at the logs for further details." : "Konfigurácia je chybná. Prosím, pozrite sa do logov pre ďalšie podrobnosti.", "No action specified" : "Nie je vybraná akcia", "No configuration specified" : "Nie je určená konfigurácia", "No data specified" : "Nie sú vybraté dáta", - " Could not set configuration %s" : "Nemôžem nastaviť konfiguráciu %s", + "Invalid data specified" : "Boli zadané neplatné dáta", "Action does not exist" : "Takáto akcia neexistuje", "Renewing …" : "Obnovujem...", "Very weak password" : "Veľmi slabé heslo", @@ -49,19 +48,28 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Zvážte zúženie vyhľadávania, pretože zahŕňalo mnoho užívateľov, z ktorých sa bude môcť prihlásiť iba prvý z nich.", "An unspecified error occurred. Please check log and settings." : "Nastala nešpecifikovaná chyba. Overte nastavenia a súbor logu.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter vyhľadávania je neplatný, pravdepodobne je chybný syntax, napr. neuzatvorené zátvorky. Overte si to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP / AD, skontrolujte položky host, port a prihlasovacie údaje.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP/AD, skontrolujte položky host, port a prihlasovacie údaje.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP/AD.", "Please provide a login name to test against" : "Zadajte prihlasovacie meno na otestovanie", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP / AD server nepodporuje memberOf.", - "Password change rejected. Hint: " : "Zmena hesla zamietnutá. Vodítko:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP/AD server nepodporuje memberOf.", "Please login with the new password" : "Prihláste sa prosím novým heslom", "LDAP User backend" : "Podporná vrstva pre LDAP používateľa", "Your password will expire tomorrow." : "Vaše heslo expiruje zajtra.", "Your password will expire today." : "Vaše heslo expiruje dnes.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Vaše heslo expiruje o %n deň.","Vaše heslo expiruje o %n dni.","Vaše heslo expiruje o %n dní.","Vaše heslo expiruje o %n dní."], - "LDAP / AD integration" : "Spolupráca s LDAP/AD", - "_%s group found_::_%s groups found_" : ["%s nájdená skupina","%s nájdené skupiny","%s nájdených skupín","%s nájdených skupín"], - "_%s user found_::_%s users found_" : ["%s nájdený používateľ","%s nájdení používatelia","%s nájdených používateľov","%s nájdených používateľov"], + "LDAP/AD integration" : "Integrácia s LDAP/AD", + "LDAP Connection" : "Pripojenie LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Pripojenie zlyhalo pre túto konfiguráciu LDAP: %s","Pripojenie zlyhalo pre %n konfigurácie LDAP: %s","Pripojenie zlyhalo pre %n konfigurácií LDAP: %s","Pripojenie zlyhalo pre %n konfigurácií LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Vyhľadávanie zlyhalo pre túto konfiguráciu LDAP: %s","Vyhľadávanie zlyhalo pre %n konfigurácie LDAP: %s","Vyhľadávanie zlyhalo pre %n konfigurácií LDAP: %s","Vyhľadávanie zlyhalo pre %n konfigurácií LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Existuje neaktívna konfigurácie LDAP: %s","Existujú %n neaktívne konfigurácie LDAP: %s","Existujú %n neaktívných konfigurácie LDAP: %s","Existujú %n neaktívných konfigurácie LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Pripojenie a vyhľadávanie funguje na nakonfigurovanom LDAP pripojení (%s)","Pripojenie a vyhľadávanie funguje na všetkých %n nakonfigurovaných LDAP pripojeniach (%s)","Pripojenie a vyhľadávanie funguje na všetkých %n nakonfigurovaných LDAP pripojeniach (%s)","Pripojenie a vyhľadávanie funguje na všetkých %n nakonfigurovaných LDAP pripojeniach (%s)"], + "Invalid LDAP UUIDs" : "Neplatné LDAP UUIDs", + "None found" : "Nenájdené", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Boli nájdené neplatné UUID účtov alebo skupín LDAP. Skontrolujte svoje nastavenia „Prepísať detekciu UUID“ v expertnej časti konfigurácie LDAP a použite „occ ldap:update-uuid“ na ich aktualizáciu.", + "_%n group found_::_%n groups found_" : ["%n nájdená skupina","%n nájdené skupiny","%n nájdených skupín","%n nájdených skupín"], + "> 1000 groups found" : "> 1000 nájdených skupín", + "> 1000 users found" : "> 1000 nájdených užívateľov", + "_%n user found_::_%n users found_" : ["%n nájdený užívateľ","%n nájdený užívatelia","%n nájdených užívateľov","%n nájdených používateľov"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nepodarilo sa zistiť atribút pre zobrazenie mena používateľa. Zadajte ho sami v rozšírených nastaveniach LDAP.", "Could not find the desired feature" : "Nemožno nájsť požadovanú funkciu", "Invalid Host" : "Neplatný hostiteľ", @@ -81,13 +89,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Tento filter LDAP určuje, ktoré skupiny budú mať prístup k %s inštancii.", "Verify settings and count the groups" : "Overte nastavenia a spočítajte skupiny", "When logging in, %s will find the user based on the following attributes:" : "Pri prihlasovaní, %s bude vyhľadávať používateľov na základe týchto atribútov:", - "LDAP / AD Username:" : "Používateľské meno LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje prihlásenie pomocou užívateľského mena LDAP/AD, ktoré je buď „uid“ alebo „sAMAccountName“ a bude zistené.", - "LDAP / AD Email Address:" : "LDAP / AD emailová adresa:", + "LDAP/AD Username:" : "Používateľské meno LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje prihlásenie pomocou užívateľského mena LDAP/AD, ktoré je buď „uid“ alebo „sAMAccountName“ a bude detekované.", + "LDAP/AD Email Address:" : "LDAP/AD emailová adresa:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Umožňuje prihlásenie pomocou atribútu e-mail. Povolené sú „mail“ a „mailPrimaryAddress“.", "Other Attributes:" : "Iné atribúty:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definuje filter, ktorý sa použije pri pokuse o prihlásenie. „%%uid“ je nahradené používateľským menom v prihlasovacej akcii. Príklad: „uid %%uid„“", "Test Loginname" : "Testovacie prihlasovacie meno", + "Attempts to receive a DN for the given loginname and the current login filter" : "Pokusy o získanie DN pre zadané prihlasovacie meno a aktuálny filter prihlásenia.", "Verify settings" : "Overiť nastavenia", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Pridať novú konfiguráciu", @@ -151,6 +160,8 @@ OC.L10N.register( "One User Base DN per line" : "Jedna používateľská základná DN na riadok", "User Search Attributes" : "Atribúty vyhľadávania používateľov", "Optional; one attribute per line" : "Voliteľné, jeden atribút na jeden riadok", + "Disable users missing from LDAP" : "Zakázať užívateľov chýbajúcich v LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Keď je zapnuté, užívatelia ktorý nie sú importovaní z LDAP, budú zakázaní.", "Group Display Name Field" : "Pole pre zobrazenie mena skupiny", "The LDAP attribute to use to generate the groups's display name." : "Atribút LDAP použitý na vygenerovanie zobrazovaného mena skupiny.", "Base Group Tree" : "Základný skupinový strom", @@ -179,8 +190,31 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Ak chcete použiť užívateľské meno (predvolené), nechajte prázdne. V opačnom prípade zadajte atribút LDAP/AD.", "\"$home\" Placeholder Field" : "Výplňová kolónka „$home“", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$ home bude v nastavení externého úložiska nahradená hodnotou zadaného atribútu ", + "User Profile Attributes" : "Atribúty užívateľského profilu", + "Phone Field" : "Pole pre telefón", + "User profile Phone will be set from the specified attribute" : "Telefón užívateľského profilu bude nastavený zo špecifikovaného atribútu.", + "Website Field" : "Pole pre webovú stránku", + "User profile Website will be set from the specified attribute" : "Webová stránka užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Address Field" : "Pridať pole", + "User profile Address will be set from the specified attribute" : "Adresa užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Twitter Field" : "Pole Twitter", + "User profile Twitter will be set from the specified attribute" : "Twitter užívateľského profilu bude nastavený zo špecifikovaného atribútu.", + "Fediverse Field" : "Pole Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Fediverse užívateľského profilu bude nastavený zo špecifikovaného atribútu.", + "Organisation Field" : "Pole Organizácia", + "User profile Organisation will be set from the specified attribute" : "Organizácia užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Role Field" : "Pole Rola", + "User profile Role will be set from the specified attribute" : "Rola užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Headline Field" : "Pole Hlavička", + "User profile Headline will be set from the specified attribute" : "Hlavička užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Biography Field" : "Pole Životopis", + "User profile Biography will be set from the specified attribute" : "Životopis užívateľského profilu bude nastavený zo špecifikovaného atribútu.", + "Birthdate Field" : "Kolónka Dátum narodenia", + "User profile Date of birth will be set from the specified attribute" : "Dátum narodenia uživateľského profilu sa nastaví zo zadaného atribútu", + "Pronouns Field" : "Kolónka Oslovenie", + "User profile Pronouns will be set from the specified attribute" : "Oslovenie uživateľského profilu sa nastaví zo zadaného atribútu", "Internal Username" : "Interné používateľské meno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "V predvolenom nastavení sa interné používateľské meno vytvorí z atribútu UUID. Zabezpečuje jedinečnosť používateľského mena a nie je potrebné meniť znaky. Interné používateľské meno má obmedzenia, ktoré povoľujú iba tieto znaky: [a-zA-Z0-9 _. @ -]. Ostatné znaky sa nahradia zodpovedajúcimi znakmi ASCII alebo sa jednoducho vynechajú. Pri konfliktoch bude pridané/zvýšené číslo. Interné používateľské meno sa používa na internú identifikáciu používateľa. Je to tiež predvolený názov domovského priečinka používateľa. Je tiež súčasťou URL, napríklad pre všetky služby * DAV. Týmto nastavením môže byť predvolené správanie zmenené. Nechajte prázdne ak chcete nechať predvolené nastavenie. Zmeny majú vplyv iba na novo namapovaných (pridaných) užívateľov LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "V predvolenom nastavení sa interné užívateľské meno vytvorí z atribútu UUID. Zabezpečuje jedinečnosť užívateľského mena a znaky nie je potrebné konvertovať. Interné užívateľské meno má obmedzenia, ktoré povoľujú iba tieto znaky: [a-zA-Z0-9 _. @ -]. Ostatné znaky sa nahradia zodpovedajúcimi znakmi ASCII alebo sa jednoducho vynechajú. Pri konfliktoch bude pridané/zvýšené číslo. Interné užívateľské meno sa používa na internú identifikáciu užívateľa. Je to tiež predvolený názov domovského priečinka užívateľa. Je tiež súčasťou URL, napríklad pre všetky služby * DAV. Týmto nastavením môže byť predvolené správanie zmenené. Zmeny majú vplyv iba na novo namapovaných (pridaných) užívateľov LDAP. Nechajte prázdne ak chcete nechať predvolené nastavenie.", "Internal Username Attribute:" : "Atribút interného používateľského mena:", "Override UUID detection" : "Prepísať UUID detekciu", "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." : "V predvolenom nastavení sa atribút UUID deteguje automaticky. Atribút UUID sa používa na jednoznačnú identifikáciu používateľov a skupín z LDAPu. Naviac sa na základe UUID vytvára aj interné používateľské meno, ak nie je nastavené inak. Môžete predvolené nastavenie prepísať a použiť atribút ktorý si sami zvolíte. Musíte sa ale ubezpečiť, že atribút, ktorý vyberiete, bude uvedený pri používateľoch aj pri skupinách a bude jedinečný. Ak voľbu ponecháte prázdnu, použije sa predvolené správanie. Zmena bude mať vplyv len na novo namapovaných (pridaných) používateľov a skupiny z LDAPu.", @@ -189,6 +223,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapovanie názvov LDAP používateľských mien", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Používateľské mená sa používajú na ukladanie a prideľovanie meta údajov. Pre presnú identifikáciu a rozpoznávanie má každý používateľ LDAP interné používateľské meno. To si vyžaduje mapovanie používateľského mena na užívateľa LDAP. Vytvorené meno používateľa je mapované na UUID používateľa LDAP. Okrem toho sa DN ukladá aj do vyrovnávacej pamäte, aby sa znížila interakcia LDAP, ale nepoužíva sa na identifikáciu. Ak sa DN zmení, zmeny sa nájdu. Interné používateľské meno sa používa všade. Vymazanie mápovania bude mať pozostatky všade. Vymazanie mapovania nie je citlivé na nastavenie, ovplyvňuje všetky nastavenia LDAP! Nikdy nemažte mapovanie vo produkčnom prostredí, ale iba v testovacej alebo experimentálnej fáze.", "Clear Username-LDAP User Mapping" : "Zrušiť mapovanie LDAP používateľských mien", - "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín" + "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín", + "Invalid configuration. Please have a look at the logs for further details." : "Konfigurácia je chybná. Prosím, pozrite sa do logov pre ďalšie podrobnosti." }, "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/apps/user_ldap/l10n/sk.json b/apps/user_ldap/l10n/sk.json index 695cd37de4f..8ff68e5a466 100644 --- a/apps/user_ldap/l10n/sk.json +++ b/apps/user_ldap/l10n/sk.json @@ -4,11 +4,10 @@ "Invalid configuration: Anonymous binding is not allowed." : "Neplatné nastavenie: anonymné pripojenie nie je povolené.", "Valid configuration, connection established!" : "Platná konfigurácia, spojenie nadviazané!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Nastavenie je v poriadku, ale pripojenie zlyhalo. Skontrolujte nastavenia servera a prihlasovacie údaje.", - "Invalid configuration. Please have a look at the logs for further details." : "Konfigurácia je chybná. Prosím, pozrite sa do logov pre ďalšie podrobnosti.", "No action specified" : "Nie je vybraná akcia", "No configuration specified" : "Nie je určená konfigurácia", "No data specified" : "Nie sú vybraté dáta", - " Could not set configuration %s" : "Nemôžem nastaviť konfiguráciu %s", + "Invalid data specified" : "Boli zadané neplatné dáta", "Action does not exist" : "Takáto akcia neexistuje", "Renewing …" : "Obnovujem...", "Very weak password" : "Veľmi slabé heslo", @@ -47,19 +46,28 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Zvážte zúženie vyhľadávania, pretože zahŕňalo mnoho užívateľov, z ktorých sa bude môcť prihlásiť iba prvý z nich.", "An unspecified error occurred. Please check log and settings." : "Nastala nešpecifikovaná chyba. Overte nastavenia a súbor logu.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter vyhľadávania je neplatný, pravdepodobne je chybný syntax, napr. neuzatvorené zátvorky. Overte si to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP / AD, skontrolujte položky host, port a prihlasovacie údaje.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP/AD, skontrolujte položky host, port a prihlasovacie údaje.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP/AD.", "Please provide a login name to test against" : "Zadajte prihlasovacie meno na otestovanie", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP / AD server nepodporuje memberOf.", - "Password change rejected. Hint: " : "Zmena hesla zamietnutá. Vodítko:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP/AD server nepodporuje memberOf.", "Please login with the new password" : "Prihláste sa prosím novým heslom", "LDAP User backend" : "Podporná vrstva pre LDAP používateľa", "Your password will expire tomorrow." : "Vaše heslo expiruje zajtra.", "Your password will expire today." : "Vaše heslo expiruje dnes.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Vaše heslo expiruje o %n deň.","Vaše heslo expiruje o %n dni.","Vaše heslo expiruje o %n dní.","Vaše heslo expiruje o %n dní."], - "LDAP / AD integration" : "Spolupráca s LDAP/AD", - "_%s group found_::_%s groups found_" : ["%s nájdená skupina","%s nájdené skupiny","%s nájdených skupín","%s nájdených skupín"], - "_%s user found_::_%s users found_" : ["%s nájdený používateľ","%s nájdení používatelia","%s nájdených používateľov","%s nájdených používateľov"], + "LDAP/AD integration" : "Integrácia s LDAP/AD", + "LDAP Connection" : "Pripojenie LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Pripojenie zlyhalo pre túto konfiguráciu LDAP: %s","Pripojenie zlyhalo pre %n konfigurácie LDAP: %s","Pripojenie zlyhalo pre %n konfigurácií LDAP: %s","Pripojenie zlyhalo pre %n konfigurácií LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Vyhľadávanie zlyhalo pre túto konfiguráciu LDAP: %s","Vyhľadávanie zlyhalo pre %n konfigurácie LDAP: %s","Vyhľadávanie zlyhalo pre %n konfigurácií LDAP: %s","Vyhľadávanie zlyhalo pre %n konfigurácií LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Existuje neaktívna konfigurácie LDAP: %s","Existujú %n neaktívne konfigurácie LDAP: %s","Existujú %n neaktívných konfigurácie LDAP: %s","Existujú %n neaktívných konfigurácie LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Pripojenie a vyhľadávanie funguje na nakonfigurovanom LDAP pripojení (%s)","Pripojenie a vyhľadávanie funguje na všetkých %n nakonfigurovaných LDAP pripojeniach (%s)","Pripojenie a vyhľadávanie funguje na všetkých %n nakonfigurovaných LDAP pripojeniach (%s)","Pripojenie a vyhľadávanie funguje na všetkých %n nakonfigurovaných LDAP pripojeniach (%s)"], + "Invalid LDAP UUIDs" : "Neplatné LDAP UUIDs", + "None found" : "Nenájdené", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Boli nájdené neplatné UUID účtov alebo skupín LDAP. Skontrolujte svoje nastavenia „Prepísať detekciu UUID“ v expertnej časti konfigurácie LDAP a použite „occ ldap:update-uuid“ na ich aktualizáciu.", + "_%n group found_::_%n groups found_" : ["%n nájdená skupina","%n nájdené skupiny","%n nájdených skupín","%n nájdených skupín"], + "> 1000 groups found" : "> 1000 nájdených skupín", + "> 1000 users found" : "> 1000 nájdených užívateľov", + "_%n user found_::_%n users found_" : ["%n nájdený užívateľ","%n nájdený užívatelia","%n nájdených užívateľov","%n nájdených používateľov"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nepodarilo sa zistiť atribút pre zobrazenie mena používateľa. Zadajte ho sami v rozšírených nastaveniach LDAP.", "Could not find the desired feature" : "Nemožno nájsť požadovanú funkciu", "Invalid Host" : "Neplatný hostiteľ", @@ -79,13 +87,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Tento filter LDAP určuje, ktoré skupiny budú mať prístup k %s inštancii.", "Verify settings and count the groups" : "Overte nastavenia a spočítajte skupiny", "When logging in, %s will find the user based on the following attributes:" : "Pri prihlasovaní, %s bude vyhľadávať používateľov na základe týchto atribútov:", - "LDAP / AD Username:" : "Používateľské meno LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje prihlásenie pomocou užívateľského mena LDAP/AD, ktoré je buď „uid“ alebo „sAMAccountName“ a bude zistené.", - "LDAP / AD Email Address:" : "LDAP / AD emailová adresa:", + "LDAP/AD Username:" : "Používateľské meno LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Umožňuje prihlásenie pomocou užívateľského mena LDAP/AD, ktoré je buď „uid“ alebo „sAMAccountName“ a bude detekované.", + "LDAP/AD Email Address:" : "LDAP/AD emailová adresa:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Umožňuje prihlásenie pomocou atribútu e-mail. Povolené sú „mail“ a „mailPrimaryAddress“.", "Other Attributes:" : "Iné atribúty:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definuje filter, ktorý sa použije pri pokuse o prihlásenie. „%%uid“ je nahradené používateľským menom v prihlasovacej akcii. Príklad: „uid %%uid„“", "Test Loginname" : "Testovacie prihlasovacie meno", + "Attempts to receive a DN for the given loginname and the current login filter" : "Pokusy o získanie DN pre zadané prihlasovacie meno a aktuálny filter prihlásenia.", "Verify settings" : "Overiť nastavenia", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Pridať novú konfiguráciu", @@ -149,6 +158,8 @@ "One User Base DN per line" : "Jedna používateľská základná DN na riadok", "User Search Attributes" : "Atribúty vyhľadávania používateľov", "Optional; one attribute per line" : "Voliteľné, jeden atribút na jeden riadok", + "Disable users missing from LDAP" : "Zakázať užívateľov chýbajúcich v LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Keď je zapnuté, užívatelia ktorý nie sú importovaní z LDAP, budú zakázaní.", "Group Display Name Field" : "Pole pre zobrazenie mena skupiny", "The LDAP attribute to use to generate the groups's display name." : "Atribút LDAP použitý na vygenerovanie zobrazovaného mena skupiny.", "Base Group Tree" : "Základný skupinový strom", @@ -177,8 +188,31 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Ak chcete použiť užívateľské meno (predvolené), nechajte prázdne. V opačnom prípade zadajte atribút LDAP/AD.", "\"$home\" Placeholder Field" : "Výplňová kolónka „$home“", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$ home bude v nastavení externého úložiska nahradená hodnotou zadaného atribútu ", + "User Profile Attributes" : "Atribúty užívateľského profilu", + "Phone Field" : "Pole pre telefón", + "User profile Phone will be set from the specified attribute" : "Telefón užívateľského profilu bude nastavený zo špecifikovaného atribútu.", + "Website Field" : "Pole pre webovú stránku", + "User profile Website will be set from the specified attribute" : "Webová stránka užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Address Field" : "Pridať pole", + "User profile Address will be set from the specified attribute" : "Adresa užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Twitter Field" : "Pole Twitter", + "User profile Twitter will be set from the specified attribute" : "Twitter užívateľského profilu bude nastavený zo špecifikovaného atribútu.", + "Fediverse Field" : "Pole Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Fediverse užívateľského profilu bude nastavený zo špecifikovaného atribútu.", + "Organisation Field" : "Pole Organizácia", + "User profile Organisation will be set from the specified attribute" : "Organizácia užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Role Field" : "Pole Rola", + "User profile Role will be set from the specified attribute" : "Rola užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Headline Field" : "Pole Hlavička", + "User profile Headline will be set from the specified attribute" : "Hlavička užívateľského profilu bude nastavená zo špecifikovaného atribútu.", + "Biography Field" : "Pole Životopis", + "User profile Biography will be set from the specified attribute" : "Životopis užívateľského profilu bude nastavený zo špecifikovaného atribútu.", + "Birthdate Field" : "Kolónka Dátum narodenia", + "User profile Date of birth will be set from the specified attribute" : "Dátum narodenia uživateľského profilu sa nastaví zo zadaného atribútu", + "Pronouns Field" : "Kolónka Oslovenie", + "User profile Pronouns will be set from the specified attribute" : "Oslovenie uživateľského profilu sa nastaví zo zadaného atribútu", "Internal Username" : "Interné používateľské meno", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "V predvolenom nastavení sa interné používateľské meno vytvorí z atribútu UUID. Zabezpečuje jedinečnosť používateľského mena a nie je potrebné meniť znaky. Interné používateľské meno má obmedzenia, ktoré povoľujú iba tieto znaky: [a-zA-Z0-9 _. @ -]. Ostatné znaky sa nahradia zodpovedajúcimi znakmi ASCII alebo sa jednoducho vynechajú. Pri konfliktoch bude pridané/zvýšené číslo. Interné používateľské meno sa používa na internú identifikáciu používateľa. Je to tiež predvolený názov domovského priečinka používateľa. Je tiež súčasťou URL, napríklad pre všetky služby * DAV. Týmto nastavením môže byť predvolené správanie zmenené. Nechajte prázdne ak chcete nechať predvolené nastavenie. Zmeny majú vplyv iba na novo namapovaných (pridaných) užívateľov LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "V predvolenom nastavení sa interné užívateľské meno vytvorí z atribútu UUID. Zabezpečuje jedinečnosť užívateľského mena a znaky nie je potrebné konvertovať. Interné užívateľské meno má obmedzenia, ktoré povoľujú iba tieto znaky: [a-zA-Z0-9 _. @ -]. Ostatné znaky sa nahradia zodpovedajúcimi znakmi ASCII alebo sa jednoducho vynechajú. Pri konfliktoch bude pridané/zvýšené číslo. Interné užívateľské meno sa používa na internú identifikáciu užívateľa. Je to tiež predvolený názov domovského priečinka užívateľa. Je tiež súčasťou URL, napríklad pre všetky služby * DAV. Týmto nastavením môže byť predvolené správanie zmenené. Zmeny majú vplyv iba na novo namapovaných (pridaných) užívateľov LDAP. Nechajte prázdne ak chcete nechať predvolené nastavenie.", "Internal Username Attribute:" : "Atribút interného používateľského mena:", "Override UUID detection" : "Prepísať UUID detekciu", "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." : "V predvolenom nastavení sa atribút UUID deteguje automaticky. Atribút UUID sa používa na jednoznačnú identifikáciu používateľov a skupín z LDAPu. Naviac sa na základe UUID vytvára aj interné používateľské meno, ak nie je nastavené inak. Môžete predvolené nastavenie prepísať a použiť atribút ktorý si sami zvolíte. Musíte sa ale ubezpečiť, že atribút, ktorý vyberiete, bude uvedený pri používateľoch aj pri skupinách a bude jedinečný. Ak voľbu ponecháte prázdnu, použije sa predvolené správanie. Zmena bude mať vplyv len na novo namapovaných (pridaných) používateľov a skupiny z LDAPu.", @@ -187,6 +221,7 @@ "Username-LDAP User Mapping" : "Mapovanie názvov LDAP používateľských mien", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Používateľské mená sa používajú na ukladanie a prideľovanie meta údajov. Pre presnú identifikáciu a rozpoznávanie má každý používateľ LDAP interné používateľské meno. To si vyžaduje mapovanie používateľského mena na užívateľa LDAP. Vytvorené meno používateľa je mapované na UUID používateľa LDAP. Okrem toho sa DN ukladá aj do vyrovnávacej pamäte, aby sa znížila interakcia LDAP, ale nepoužíva sa na identifikáciu. Ak sa DN zmení, zmeny sa nájdu. Interné používateľské meno sa používa všade. Vymazanie mápovania bude mať pozostatky všade. Vymazanie mapovania nie je citlivé na nastavenie, ovplyvňuje všetky nastavenia LDAP! Nikdy nemažte mapovanie vo produkčnom prostredí, ale iba v testovacej alebo experimentálnej fáze.", "Clear Username-LDAP User Mapping" : "Zrušiť mapovanie LDAP používateľských mien", - "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín" + "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín", + "Invalid configuration. Please have a look at the logs for further details." : "Konfigurácia je chybná. Prosím, pozrite sa do logov pre ďalšie podrobnosti." },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/sk_SK.js b/apps/user_ldap/l10n/sk_SK.js deleted file mode 100644 index 81cb1aa6959..00000000000 --- a/apps/user_ldap/l10n/sk_SK.js +++ /dev/null @@ -1,155 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Nepodarilo sa vymazať mapovania.", - "Failed to delete the server configuration" : "Zlyhalo zmazanie nastavenia servera.", - "The configuration is invalid: anonymous bind is not allowed." : "Nastavenia sú neplatné: anonymný bind nie je povolený.", - "The configuration is valid and the connection could be established!" : "Nastavenie je v poriadku a pripojenie je stabilné.", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Nastavenie je v poriadku, ale pripojenie zlyhalo. Skontrolujte nastavenia servera a prihlasovacie údaje.", - "The configuration is invalid. Please have a look at the logs for further details." : "Konfigurácia je chybná. Prosím, pozrite sa do logov pre ďalšie podrobnosti.", - "No action specified" : "Nie je vybraná akcia", - "No configuration specified" : "Nie je určená konfigurácia", - "No data specified" : "Nie sú vybraté dáta", - " Could not set configuration %s" : "Nemôžem nastaviť konfiguráciu %s", - "Action does not exist" : "Takáto akcia neexistuje", - "The Base DN appears to be wrong" : "Základné DN je chybné", - "Configuration incorrect" : "Nesprávna konfigurácia", - "Configuration incomplete" : "Nekompletná konfigurácia", - "Configuration OK" : "Konfigurácia je v poriadku", - "Select groups" : "Vybrať skupinu", - "Select object classes" : "Vyberte triedy objektov", - "Please check the credentials, they seem to be wrong." : "Overte svoje oprávnenia, nie sú správne nastavené.", - "Please specify the port, it could not be auto-detected." : "Zadajte port, nemožno ho detekovať automaticky.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Základnú DN nemožno automaticky detekovať, overte prihlasovacie údaje, host a port.", - "Could not detect Base DN, please enter it manually." : "Nemožno automaticky detekovať základnú DN, zadajte ručne prosím.", - "{nthServer}. Server" : "{nthServer}. Server", - "No object found in the given Base DN. Please revise." : "Objekt nebol nájdený v zadanej základnej DN. Overte to prosím.", - " entries available within the provided Base DN" : "dostupných záznamov v zadanej základnej DN", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Nastala chyba. Overte základnú DN, nastavenia pripojenia a prihlasovacie údaje.", - "Do you really want to delete the current Server Configuration?" : "Naozaj chcete zmazať súčasné nastavenie servera?", - "Confirm Deletion" : "Potvrdiť vymazanie", - "Mappings cleared successfully!" : "Mapovanie bolo úspešne odstránené!", - "Error while clearing the mappings." : "Chyba pri čistení mapovania.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymný bind nie je povolený. Zadajte používateľské DN a heslo.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operácie. Anonymný bind asi nie je povolený.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukladanie zlyhalo. Uistite sa, že databáza pracuje. Znovu načítajte pred pokračovaním.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Prepnutie režimu povolí automatické LDAP požiadavky. V závislosti na veľkosti vášho LDAP môže vyhľadávanie chvíľu trvať. Naozaj chcete prepnúť režim?", - "Mode switch" : "Prepínač režimov", - "Select attributes" : "Vyberte atribúty", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Používateľ nenájdený. Skontrolujte si svoje prihlasovacie údaje a meno. Použitý filter (pre skopírovanie a overenie v príkazovom riadku): <br/>", - "User found and settings verified." : "Používateľ bol nájdený a nastavenie bolo overené.", - "An unspecified error occurred. Please check the settings and the log." : "Nastala nešpecifikovaná chyba. Overte nastavenia a súbor logu.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter vyhľadávania je neplatný, pravdepodobne je chybný syntax, napr. neuzatvorené zátvorky. Overte si to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP / AD, skontrolujte položky host, port a prihlasovacie údaje.", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP / AD.", - "Please provide a login name to test against" : "Zadajte prihlasovacie meno na otestovanie", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP / AD server nepodporuje memberOf.", - "_%s group found_::_%s groups found_" : ["%s nájdená skupina","%s nájdené skupiny","%s nájdených skupín"], - "_%s user found_::_%s users found_" : ["%s nájdený používateľ","%s nájdení používatelia","%s nájdených používateľov"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nemožno zistiť používateľský atribút pre zobrazenie používateľského mena. Prosím, zadajte ho sami v pokročilých nastaveniach LDAP.", - "Could not find the desired feature" : "Nemožno nájsť požadovanú funkciu", - "Invalid Host" : "Neplatný hostiteľ", - "Test Configuration" : "Test nastavenia", - "Help" : "Pomoc", - "Groups meeting these criteria are available in %s:" : "Skupiny spĺňajúce tieto kritériá sú k dispozícii v %s:", - "Only these object classes:" : "Len tieto triedy objektov:", - "Only from these groups:" : "Len z týchto skupín:", - "Search groups" : "Prehľadať skupiny", - "Available groups" : "Dostupné skupiny", - "Selected groups" : "Vybrané skupiny", - "Edit LDAP Query" : "Upraviť LDAP požiadavku", - "LDAP Filter:" : "LDAP filter:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Tento filter LDAP určuje, ktoré skupiny budú mať prístup k %s inštancii.", - "Verify settings and count groups" : "Overiť nastavenia a spočítať skupiny", - "When logging in, %s will find the user based on the following attributes:" : "Pri prihlasovaní, %s bude vyhľadávať používateľov na základe týchto atribútov:", - "LDAP / AD Username:" : "Používateľské meno LDAP / AD:", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Povoliť prihlásenie prostredníctvom LDAP / AD používateľského mena, ktoré má zadanú hodnotu v atribútoch uid alebo samaccountname.", - "LDAP / AD Email Address:" : "LDAP / AD emailová adresa:", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Povoliť prihlásenie prostredníctvom emailu. Povolené atribúty sú Mail a mailPrimaryAddress.", - "Other Attributes:" : "Iné atribúty:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Určuje použitý filter, pri pokuse o prihlásenie. %%uid nahrádza používateľské meno v činnosti prihlásenia. Napríklad: \"uid=%%uid\"", - "Test Loginname" : "Testovacie prihlasovacie meno", - "Verify settings" : "Overiť nastavenia", - "1. Server" : "1. Server", - "%s. Server:" : "%s. Server:", - "Add a new and blank configuration" : "Pridať novú prázdnu konfiguráciu", - "Copy current configuration into new directory binding" : "Skopírovať súčasnú konfiguráciu do nového adresárového pripojenia", - "Delete the current configuration" : "Vymazať súčasnú konfiguráciu", - "Host" : "Hostiteľ", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Môžete vynechať protokol, okrem prípadu, kedy sa vyžaduje SSL. Vtedy začnite s ldaps://", - "Port" : "Port", - "Detect Port" : "Detekovať port", - "User DN" : "Používateľské 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 klientského používateľa, ku ktorému tvoríte väzbu, napr. uid=agent,dc=example,dc=com. Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.", - "Password" : "Heslo", - "For anonymous access, leave DN and Password empty." : "Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.", - "One Base DN per line" : "Jedno základné DN na riadok", - "You can specify Base DN for users and groups in the Advanced tab" : "V rozšírenom nastavení môžete zadať základné DN pre používateľov a skupiny", - "Detect Base DN" : "Detekovať základnú DN", - "Test Base DN" : "Otestovať základnú DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Bráni automatickým LDAP požiadavkám. Výhodné pre objemné nastavenia ale vyžaduje si dobrú znalosť o LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Ručné vloženie LDAP filtrov (odporúčané pre rozsiahle adresáre)", - "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." : "Najčastejšie triedy objektov pre používateľov sú organizationalPerson, user a inetOrgPerson. Ak si nie ste istí, ktoré triedy máte zvoliť, obráťte sa na správcu LDAP.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Tento filter LDAP určuje, ktorí používatelia majú prístup k %s inštancii.", - "Verify settings and count users" : "Overiť nastavenia a spočítať používateľov", - "Saving" : "Ukladá sa", - "Back" : "Späť", - "Continue" : "Pokračovať", - "LDAP" : "LDAP", - "Server" : "Server", - "Users" : "Používatelia", - "Login Attributes" : "Prihlasovacie atribúty", - "Groups" : "Skupiny", - "Expert" : "Expert", - "Advanced" : "Rozšírené", - "<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>Upozornenie:</b> Aplikácie user_ldap a user_webdavauth sú navzájom nekompatibilné. Môžete zaznamenať neočakávané správanie. Požiadajte prosím vášho systémového administrátora pre zakázanie jedného z nich.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Upozornenie:</b> nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požiadajte administrátora systému, aby ho nainštaloval.", - "Connection Settings" : "Nastavenie pripojenia", - "Configuration Active" : "Nastavenia sú aktívne ", - "When unchecked, this configuration will be skipped." : "Ak nie je zaškrtnuté, nastavenie bude preskočené.", - "Backup (Replica) Host" : "Záložný server (kópia) hostiteľa", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Zadajte záložný LDAP/AD. Musí to byť kópia hlavného LDAP/AD servera.", - "Backup (Replica) Port" : "Záložný server (kópia) port", - "Disable Main Server" : "Zakázať hlavný server", - "Only connect to the replica server." : "Pripojiť sa len k záložnému serveru.", - "Turn off SSL certificate validation." : "Vypnúť overovanie SSL certifikátu.", - "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." : "Neodporúčané, použite iba pri testovaní! Pokiaľ spojenie funguje iba z daným nastavením, importujte SSL certifikát LDAP servera do vášho %s servera.", - "Cache Time-To-Live" : "Životnosť objektov vo vyrovnávacej pamäti", - "in seconds. A change empties the cache." : "v sekundách. Zmena vyprázdni vyrovnávaciu pamäť.", - "Directory Settings" : "Nastavenia priečinka", - "User Display Name Field" : "Pole pre zobrazované meno používateľa", - "The LDAP attribute to use to generate the user's display name." : "Atribút LDAP použitý na vygenerovanie zobrazovaného mena používateľa. ", - "Base User Tree" : "Základný používateľský strom", - "One User Base DN per line" : "Jedna používateľská základná DN na riadok", - "User Search Attributes" : "Atribúty vyhľadávania používateľov", - "Optional; one attribute per line" : "Voliteľné, jeden atribút na jeden riadok", - "Group Display Name Field" : "Pole pre zobrazenie mena skupiny", - "The LDAP attribute to use to generate the groups's display name." : "Atribút LDAP použitý na vygenerovanie zobrazovaného mena skupiny.", - "Base Group Tree" : "Základný skupinový strom", - "One Group Base DN per line" : "Jedna skupinová základná DN na riadok", - "Group Search Attributes" : "Atribúty vyhľadávania skupín", - "Group-Member association" : "Priradenie člena skupiny", - "Nested Groups" : "Vnorené skupiny", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ak je zapnuté, tak je možné používať skupiny, ktoré obsahujú iné skupiny. (Funguje, len ak atribút člena skupiny obsahuje DN.)", - "Paging chunksize" : "Veľkosť bloku stránkovania", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Veľkosť bloku sa používa pri vyhľadávaní v LDAP v prípadoch veľkých výsledkov hľadania ako napr. zoznamy všetkých používateľov alebo skupín. (Nastavením na 0 vypnete stránkované vyhľadávanie v LDAP v týchto situáciách.)", - "Special Attributes" : "Špeciálne atribúty", - "Quota Field" : "Pole kvóty", - "Quota Default" : "Predvolená kvóta", - "in bytes" : "v bajtoch", - "Email Field" : "Pole emailu", - "User Home Folder Naming Rule" : "Pravidlo pre nastavenie názvu používateľského priečinka dát", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Nechajte prázdne pre používateľské meno (predvolené). Inak uveďte atribút z LDAP/AD.", - "Internal Username" : "Interné používateľské meno", - "Internal Username Attribute:" : "Atribút interného používateľského mena:", - "Override UUID detection" : "Prepísať UUID detekciu", - "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." : "V predvolenom nastavení sa atribút UUID deteguje automaticky. Atribút UUID sa používa na jednoznačnú identifikáciu používateľov a skupín z LDAPu. Naviac sa na základe UUID vytvára aj interné používateľské meno, ak nie je nastavené inak. Môžete predvolené nastavenie prepísať a použiť atribút ktorý si sami zvolíte. Musíte sa ale ubezpečiť, že atribút, ktorý vyberiete, bude uvedený pri používateľoch aj pri skupinách a bude jedinečný. Ak voľbu ponecháte prázdnu, použije sa predvolené správanie. Zmena bude mať vplyv len na novo namapovaných (pridaných) používateľov a skupiny z LDAPu.", - "UUID Attribute for Users:" : "UUID atribút pre používateľov:", - "UUID Attribute for Groups:" : "UUID atribút pre skupiny:", - "Username-LDAP User Mapping" : "Mapovanie názvov LDAP používateľských mien", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Používateľské mená sa používajú na uchovávanie a priraďovanie (meta)dát. Každý používateľ v LDAP bude mať interné používateľské meno, aby bolo možné správne identifikovať a rozpoznávať používateľov. To je vyžaduje vytvorenie mapovania používateľských mien na používateľov v LDAPe. Vytvorené používateľské meno sa namapuje na UUID používateľa v LDAPe. Naviac je sa vo vyrovnávacej pamäti udržiava DN, aby sa obmedzila nadmerná interakcia s LDAPom, ale to sa nepoužíva na identifikáciu. Ak sa DN zmení, zmena bude správne rozpoznaná. Interné používateľské meno sa používa všade. Vyčistenie mapovaní vymaže zvyšky všade. Vyčistenie mapovaní naviac nie je špecifické pre určitú konfiguráciu; bude mať vplyv na všetky konfigurácie LDAPu! Nikdy nečistite mapovanie v produkčnom prostredí, len v testovacej alebo experimentálnej fáze.", - "Clear Username-LDAP User Mapping" : "Zrušiť mapovanie LDAP používateľských mien", - "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavenia sú overené, nájdený jeden používateľ. Len prvý používateľ sa bude môcť prihlásiť. Zvážte nastavenie užšieho filtra." -}, -"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/sk_SK.json b/apps/user_ldap/l10n/sk_SK.json deleted file mode 100644 index 74d68798c51..00000000000 --- a/apps/user_ldap/l10n/sk_SK.json +++ /dev/null @@ -1,153 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Nepodarilo sa vymazať mapovania.", - "Failed to delete the server configuration" : "Zlyhalo zmazanie nastavenia servera.", - "The configuration is invalid: anonymous bind is not allowed." : "Nastavenia sú neplatné: anonymný bind nie je povolený.", - "The configuration is valid and the connection could be established!" : "Nastavenie je v poriadku a pripojenie je stabilné.", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Nastavenie je v poriadku, ale pripojenie zlyhalo. Skontrolujte nastavenia servera a prihlasovacie údaje.", - "The configuration is invalid. Please have a look at the logs for further details." : "Konfigurácia je chybná. Prosím, pozrite sa do logov pre ďalšie podrobnosti.", - "No action specified" : "Nie je vybraná akcia", - "No configuration specified" : "Nie je určená konfigurácia", - "No data specified" : "Nie sú vybraté dáta", - " Could not set configuration %s" : "Nemôžem nastaviť konfiguráciu %s", - "Action does not exist" : "Takáto akcia neexistuje", - "The Base DN appears to be wrong" : "Základné DN je chybné", - "Configuration incorrect" : "Nesprávna konfigurácia", - "Configuration incomplete" : "Nekompletná konfigurácia", - "Configuration OK" : "Konfigurácia je v poriadku", - "Select groups" : "Vybrať skupinu", - "Select object classes" : "Vyberte triedy objektov", - "Please check the credentials, they seem to be wrong." : "Overte svoje oprávnenia, nie sú správne nastavené.", - "Please specify the port, it could not be auto-detected." : "Zadajte port, nemožno ho detekovať automaticky.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Základnú DN nemožno automaticky detekovať, overte prihlasovacie údaje, host a port.", - "Could not detect Base DN, please enter it manually." : "Nemožno automaticky detekovať základnú DN, zadajte ručne prosím.", - "{nthServer}. Server" : "{nthServer}. Server", - "No object found in the given Base DN. Please revise." : "Objekt nebol nájdený v zadanej základnej DN. Overte to prosím.", - " entries available within the provided Base DN" : "dostupných záznamov v zadanej základnej DN", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Nastala chyba. Overte základnú DN, nastavenia pripojenia a prihlasovacie údaje.", - "Do you really want to delete the current Server Configuration?" : "Naozaj chcete zmazať súčasné nastavenie servera?", - "Confirm Deletion" : "Potvrdiť vymazanie", - "Mappings cleared successfully!" : "Mapovanie bolo úspešne odstránené!", - "Error while clearing the mappings." : "Chyba pri čistení mapovania.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymný bind nie je povolený. Zadajte používateľské DN a heslo.", - "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operácie. Anonymný bind asi nie je povolený.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukladanie zlyhalo. Uistite sa, že databáza pracuje. Znovu načítajte pred pokračovaním.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Prepnutie režimu povolí automatické LDAP požiadavky. V závislosti na veľkosti vášho LDAP môže vyhľadávanie chvíľu trvať. Naozaj chcete prepnúť režim?", - "Mode switch" : "Prepínač režimov", - "Select attributes" : "Vyberte atribúty", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Používateľ nenájdený. Skontrolujte si svoje prihlasovacie údaje a meno. Použitý filter (pre skopírovanie a overenie v príkazovom riadku): <br/>", - "User found and settings verified." : "Používateľ bol nájdený a nastavenie bolo overené.", - "An unspecified error occurred. Please check the settings and the log." : "Nastala nešpecifikovaná chyba. Overte nastavenia a súbor logu.", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter vyhľadávania je neplatný, pravdepodobne je chybný syntax, napr. neuzatvorené zátvorky. Overte si to.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP / AD, skontrolujte položky host, port a prihlasovacie údaje.", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP / AD.", - "Please provide a login name to test against" : "Zadajte prihlasovacie meno na otestovanie", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP / AD server nepodporuje memberOf.", - "_%s group found_::_%s groups found_" : ["%s nájdená skupina","%s nájdené skupiny","%s nájdených skupín"], - "_%s user found_::_%s users found_" : ["%s nájdený používateľ","%s nájdení používatelia","%s nájdených používateľov"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nemožno zistiť používateľský atribút pre zobrazenie používateľského mena. Prosím, zadajte ho sami v pokročilých nastaveniach LDAP.", - "Could not find the desired feature" : "Nemožno nájsť požadovanú funkciu", - "Invalid Host" : "Neplatný hostiteľ", - "Test Configuration" : "Test nastavenia", - "Help" : "Pomoc", - "Groups meeting these criteria are available in %s:" : "Skupiny spĺňajúce tieto kritériá sú k dispozícii v %s:", - "Only these object classes:" : "Len tieto triedy objektov:", - "Only from these groups:" : "Len z týchto skupín:", - "Search groups" : "Prehľadať skupiny", - "Available groups" : "Dostupné skupiny", - "Selected groups" : "Vybrané skupiny", - "Edit LDAP Query" : "Upraviť LDAP požiadavku", - "LDAP Filter:" : "LDAP filter:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Tento filter LDAP určuje, ktoré skupiny budú mať prístup k %s inštancii.", - "Verify settings and count groups" : "Overiť nastavenia a spočítať skupiny", - "When logging in, %s will find the user based on the following attributes:" : "Pri prihlasovaní, %s bude vyhľadávať používateľov na základe týchto atribútov:", - "LDAP / AD Username:" : "Používateľské meno LDAP / AD:", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Povoliť prihlásenie prostredníctvom LDAP / AD používateľského mena, ktoré má zadanú hodnotu v atribútoch uid alebo samaccountname.", - "LDAP / AD Email Address:" : "LDAP / AD emailová adresa:", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Povoliť prihlásenie prostredníctvom emailu. Povolené atribúty sú Mail a mailPrimaryAddress.", - "Other Attributes:" : "Iné atribúty:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Určuje použitý filter, pri pokuse o prihlásenie. %%uid nahrádza používateľské meno v činnosti prihlásenia. Napríklad: \"uid=%%uid\"", - "Test Loginname" : "Testovacie prihlasovacie meno", - "Verify settings" : "Overiť nastavenia", - "1. Server" : "1. Server", - "%s. Server:" : "%s. Server:", - "Add a new and blank configuration" : "Pridať novú prázdnu konfiguráciu", - "Copy current configuration into new directory binding" : "Skopírovať súčasnú konfiguráciu do nového adresárového pripojenia", - "Delete the current configuration" : "Vymazať súčasnú konfiguráciu", - "Host" : "Hostiteľ", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Môžete vynechať protokol, okrem prípadu, kedy sa vyžaduje SSL. Vtedy začnite s ldaps://", - "Port" : "Port", - "Detect Port" : "Detekovať port", - "User DN" : "Používateľské 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 klientského používateľa, ku ktorému tvoríte väzbu, napr. uid=agent,dc=example,dc=com. Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.", - "Password" : "Heslo", - "For anonymous access, leave DN and Password empty." : "Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.", - "One Base DN per line" : "Jedno základné DN na riadok", - "You can specify Base DN for users and groups in the Advanced tab" : "V rozšírenom nastavení môžete zadať základné DN pre používateľov a skupiny", - "Detect Base DN" : "Detekovať základnú DN", - "Test Base DN" : "Otestovať základnú DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Bráni automatickým LDAP požiadavkám. Výhodné pre objemné nastavenia ale vyžaduje si dobrú znalosť o LDAP.", - "Manually enter LDAP filters (recommended for large directories)" : "Ručné vloženie LDAP filtrov (odporúčané pre rozsiahle adresáre)", - "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." : "Najčastejšie triedy objektov pre používateľov sú organizationalPerson, user a inetOrgPerson. Ak si nie ste istí, ktoré triedy máte zvoliť, obráťte sa na správcu LDAP.", - "The filter specifies which LDAP users shall have access to the %s instance." : "Tento filter LDAP určuje, ktorí používatelia majú prístup k %s inštancii.", - "Verify settings and count users" : "Overiť nastavenia a spočítať používateľov", - "Saving" : "Ukladá sa", - "Back" : "Späť", - "Continue" : "Pokračovať", - "LDAP" : "LDAP", - "Server" : "Server", - "Users" : "Používatelia", - "Login Attributes" : "Prihlasovacie atribúty", - "Groups" : "Skupiny", - "Expert" : "Expert", - "Advanced" : "Rozšírené", - "<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>Upozornenie:</b> Aplikácie user_ldap a user_webdavauth sú navzájom nekompatibilné. Môžete zaznamenať neočakávané správanie. Požiadajte prosím vášho systémového administrátora pre zakázanie jedného z nich.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Upozornenie:</b> nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požiadajte administrátora systému, aby ho nainštaloval.", - "Connection Settings" : "Nastavenie pripojenia", - "Configuration Active" : "Nastavenia sú aktívne ", - "When unchecked, this configuration will be skipped." : "Ak nie je zaškrtnuté, nastavenie bude preskočené.", - "Backup (Replica) Host" : "Záložný server (kópia) hostiteľa", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Zadajte záložný LDAP/AD. Musí to byť kópia hlavného LDAP/AD servera.", - "Backup (Replica) Port" : "Záložný server (kópia) port", - "Disable Main Server" : "Zakázať hlavný server", - "Only connect to the replica server." : "Pripojiť sa len k záložnému serveru.", - "Turn off SSL certificate validation." : "Vypnúť overovanie SSL certifikátu.", - "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." : "Neodporúčané, použite iba pri testovaní! Pokiaľ spojenie funguje iba z daným nastavením, importujte SSL certifikát LDAP servera do vášho %s servera.", - "Cache Time-To-Live" : "Životnosť objektov vo vyrovnávacej pamäti", - "in seconds. A change empties the cache." : "v sekundách. Zmena vyprázdni vyrovnávaciu pamäť.", - "Directory Settings" : "Nastavenia priečinka", - "User Display Name Field" : "Pole pre zobrazované meno používateľa", - "The LDAP attribute to use to generate the user's display name." : "Atribút LDAP použitý na vygenerovanie zobrazovaného mena používateľa. ", - "Base User Tree" : "Základný používateľský strom", - "One User Base DN per line" : "Jedna používateľská základná DN na riadok", - "User Search Attributes" : "Atribúty vyhľadávania používateľov", - "Optional; one attribute per line" : "Voliteľné, jeden atribút na jeden riadok", - "Group Display Name Field" : "Pole pre zobrazenie mena skupiny", - "The LDAP attribute to use to generate the groups's display name." : "Atribút LDAP použitý na vygenerovanie zobrazovaného mena skupiny.", - "Base Group Tree" : "Základný skupinový strom", - "One Group Base DN per line" : "Jedna skupinová základná DN na riadok", - "Group Search Attributes" : "Atribúty vyhľadávania skupín", - "Group-Member association" : "Priradenie člena skupiny", - "Nested Groups" : "Vnorené skupiny", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ak je zapnuté, tak je možné používať skupiny, ktoré obsahujú iné skupiny. (Funguje, len ak atribút člena skupiny obsahuje DN.)", - "Paging chunksize" : "Veľkosť bloku stránkovania", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Veľkosť bloku sa používa pri vyhľadávaní v LDAP v prípadoch veľkých výsledkov hľadania ako napr. zoznamy všetkých používateľov alebo skupín. (Nastavením na 0 vypnete stránkované vyhľadávanie v LDAP v týchto situáciách.)", - "Special Attributes" : "Špeciálne atribúty", - "Quota Field" : "Pole kvóty", - "Quota Default" : "Predvolená kvóta", - "in bytes" : "v bajtoch", - "Email Field" : "Pole emailu", - "User Home Folder Naming Rule" : "Pravidlo pre nastavenie názvu používateľského priečinka dát", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Nechajte prázdne pre používateľské meno (predvolené). Inak uveďte atribút z LDAP/AD.", - "Internal Username" : "Interné používateľské meno", - "Internal Username Attribute:" : "Atribút interného používateľského mena:", - "Override UUID detection" : "Prepísať UUID detekciu", - "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." : "V predvolenom nastavení sa atribút UUID deteguje automaticky. Atribút UUID sa používa na jednoznačnú identifikáciu používateľov a skupín z LDAPu. Naviac sa na základe UUID vytvára aj interné používateľské meno, ak nie je nastavené inak. Môžete predvolené nastavenie prepísať a použiť atribút ktorý si sami zvolíte. Musíte sa ale ubezpečiť, že atribút, ktorý vyberiete, bude uvedený pri používateľoch aj pri skupinách a bude jedinečný. Ak voľbu ponecháte prázdnu, použije sa predvolené správanie. Zmena bude mať vplyv len na novo namapovaných (pridaných) používateľov a skupiny z LDAPu.", - "UUID Attribute for Users:" : "UUID atribút pre používateľov:", - "UUID Attribute for Groups:" : "UUID atribút pre skupiny:", - "Username-LDAP User Mapping" : "Mapovanie názvov LDAP používateľských mien", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Používateľské mená sa používajú na uchovávanie a priraďovanie (meta)dát. Každý používateľ v LDAP bude mať interné používateľské meno, aby bolo možné správne identifikovať a rozpoznávať používateľov. To je vyžaduje vytvorenie mapovania používateľských mien na používateľov v LDAPe. Vytvorené používateľské meno sa namapuje na UUID používateľa v LDAPe. Naviac je sa vo vyrovnávacej pamäti udržiava DN, aby sa obmedzila nadmerná interakcia s LDAPom, ale to sa nepoužíva na identifikáciu. Ak sa DN zmení, zmena bude správne rozpoznaná. Interné používateľské meno sa používa všade. Vyčistenie mapovaní vymaže zvyšky všade. Vyčistenie mapovaní naviac nie je špecifické pre určitú konfiguráciu; bude mať vplyv na všetky konfigurácie LDAPu! Nikdy nečistite mapovanie v produkčnom prostredí, len v testovacej alebo experimentálnej fáze.", - "Clear Username-LDAP User Mapping" : "Zrušiť mapovanie LDAP používateľských mien", - "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavenia sú overené, nájdený jeden používateľ. Len prvý používateľ sa bude môcť prihlásiť. Zvážte nastavenie užšieho filtra." -},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/sl.js b/apps/user_ldap/l10n/sl.js index b0dffc33808..5edb617e5b1 100644 --- a/apps/user_ldap/l10n/sl.js +++ b/apps/user_ldap/l10n/sl.js @@ -6,11 +6,10 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Neveljavne nastavitve: brezimne vezi niso dovoljene.", "Valid configuration, connection established!" : "Veljavne nastavitve: povezava je vzpostavljena!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Veljavne nastavitve, a je povezava vseeno spodletela: preverite nastavitve strežnika in poverila.", - "Invalid configuration. Please have a look at the logs for further details." : "Neveljavne nastavitve: za več podrobnosti si oglejte dnevniške zapise.", "No action specified" : "Ni določenega dejanja", "No configuration specified" : "Ni določenih nastavitev", "No data specified" : "Ni navedenih podatkov", - " Could not set configuration %s" : "Ni mogoče uveljaviti nastavitev %s", + "Invalid data specified" : "Določeni so neveljavni podatki", "Action does not exist" : "Dejanje ne obstaja", "Renewing …" : "Poteka ponastavljanje ...", "Very weak password" : "Zelo šibko geslo", @@ -49,19 +48,20 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Razmislite o zoženju iskalnega niza, saj trenutni opredeljuje večje število uporabnikov, med katerimi je le prvi na voljo za prijavo.", "An unspecified error occurred. Please check log and settings." : "Prišlo je do nedoločene napake: preverite dnevnik in nastavitve.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter iskanja ni veljaven. Najverjetneje je to zaradi napake skladnje, kot je neustrezno ali neskladno uporabljen oklepaj. Preverite vpis.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Prišlo je do napake povezave z LDAP / AD. Preverite podatke o gostitelju, vratih in poverilih.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Manjka vsebnik »%uid«. Zamenjan bo z uporabniškim imenom pri poizvedbah LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Prišlo je do napake povezave z LDAP / AD. Preverite podatke o gostitelju, vratih in poverilih.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Manjka vsebnik »ID %u«. Zamenjan bo z uporabniškim imenom pri poizvedbah LDAP / AD.", "Please provide a login name to test against" : "Vpisati je treba uporabniško ime za preizkus", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupina je onemogočena, ker na strežniku LDAP / AD ni omogočena podpora atributu memberOf.", - "Password change rejected. Hint: " : "Spreminjanje gesla je zavrnjeno. Namig: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Skupina je onemogočena, ker na strežniku LDAP / AD ni omogočena podpora atributu memberOf.", "Please login with the new password" : "Prijavite se z novim geslom", "LDAP User backend" : "Uporabniška povezava LDAP", "Your password will expire tomorrow." : "Vaše geslo bo jutri poteklo.", "Your password will expire today." : "Geslo vam poteče danes!", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Geslo bo poteklo čez %n dan.","Geslo bo poteklo čez %n dneva","Geslo bo poteklo čez %n dni.","Geslo bo poteklo čez %n dni."], - "LDAP / AD integration" : "Združevalnik za LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"], - "_%s user found_::_%s users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"], + "LDAP/AD integration" : "Združevalnik za LDAP / AD", + "_%n group found_::_%n groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"], + "> 1000 groups found" : "> 1000 najdenih skupin", + "> 1000 users found" : "> 1000 najdenih uporabnikov", + "_%n user found_::_%n users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Ni mogoče zaznati atributa prikaznega imena. Določiti ga je treba ročno med nastavitvami LDAP.", "Could not find the desired feature" : "Želene zmožnosti ni mogoče najti", "Invalid Host" : "Neveljaven gostitelj", @@ -80,10 +80,10 @@ OC.L10N.register( "LDAP Filter:" : "Filter LDAP:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filter določa, katere skupine LDAP bodo imele dostop do %s.", "Verify settings and count the groups" : "Preveri nastavitve in preštej skupine", - "When logging in, %s will find the user based on the following attributes:" : "Pri prijavi bodo prek %s najdeni uporabniki na osnovi navedenih atributov:", - "LDAP / AD Username:" : "Uporabniško ime LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Omogoča prijavo prek uporabniškega imena LDAP / AD, ki je ali »UID« ali ime računa »sAMAccountName«, ki bo zaznano.", - "LDAP / AD Email Address:" : "Elektronski naslov LDAP / AD:", + "When logging in, %s will find the user based on the following attributes:" : "Ob prijavi bodo uporabniki v %s najdeni na osnovi navedenih atributov:", + "LDAP/AD Username:" : "Uporabniško ime LDAP / AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Omogoča prijavo prek uporabniškega imena LDAP / AD, ki je ali »UID« ali ime računa »sAMAccountName«, ki bo zaznano.", + "LDAP/AD Email Address:" : "Elektronski naslov LDAP / AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Omogoči prijavo z elektronskim naslovom; dovoljeni sta možnosti »mail« in »mailPrimaryAddress«.", "Other Attributes:" : "Drugi atributi:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Določi filter, ki bo uveljavljen ob poskusu prijave. »UID %%« zamenja uporabniško ime pri prijavi, na primer: »uid=%%uid«.", @@ -164,9 +164,10 @@ OC.L10N.register( "Paging chunksize" : "Velikost odvoda za razbremenitev delovnega pomnilnik", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost odvoda za razbremenitev delovnega pomnilnika, ki ga uporablja iskalnik LDAP, pri oštevilčenju uporabnika ali skupine (vrednost 0 možnost onemogoči).", "Enable LDAP password changes per user" : "Omogoči uporabnikom spreminjanje gesel LDAP", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Uporabnikom LDAP dovoli spreminjanje osebnega gesla, nadzornikom in skrbnikom skupin pa spreminjanje gesel povezanih skupin uporabnikov LDAP. Možnost deluje le, če so na strežniku LDAP ustrezno nastavljena priavila dostopa. Ko so gesla poslana na strežnik LDAP kot običajno besedilo, je priporočljivo uporabiti transportno šifriranje in omogočiti varnostno razprševanje gesel.", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Uporabnikom LDAP dovoli spreminjanje osebnega gesla, nadzornikom in skrbnikom skupin pa spreminjanje gesel povezanih skupin uporabnikov LDAP. Možnost deluje le, če so na strežniku LDAP ustrezno nastavljena pravila dostopa. Ko so gesla poslana na strežnik LDAP kot običajno besedilo, je priporočljivo uporabiti transportno šifriranje in omogočiti varnostno razprševanje gesel.", "(New password is sent as plain text to LDAP)" : "(novo geslo je poslano kot besedilo na LDAP)", "Default password policy DN" : "Privzeta pravila gesel enoznačnih imen DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Enoznačno ime (DN) privzetega pravilnika gesel, ki bo uporabljen za ravnanje z gesli po poteku veljavnosti. Deluje le, ko so omogočene spremembe gesel LDAP po uporabniku in ga podpira le OpenLDAP. Prazno polje onemogoči uveljavitev pravil za ravnanje z gesli po preteku.", "Special Attributes" : "Posebni atributi", "Quota Field" : "Polje količinske omejitve", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Pustite prazno za privzeto količinsko omejitev, sicer navedite atribut LDAP/AD.", @@ -178,8 +179,10 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pustite prazno za uporabniško ime (privzeto), sicer navedite atribut LDAP/AD.", "\"$home\" Placeholder Field" : "Polje vsebnika »$home«", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Vrednost »$home« bo znotraj nastavitev zunanje shrambe zamenjaj z vrednostjo določenega atributa.", + "User Profile Attributes" : "Atributi profila uporabnika", + "Phone Field" : "Polje številke telefona", "Internal Username" : "Programsko uporabniško ime", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Privzeto je notranje uporabniško ime ustvarjeno po atributu UUID. To zagotavlja, da je uporabniško ime enkratno in da znakov ni treba posebej pretvarjati. Notrajne uporabniško ime ima določeno omejitev uporabe izključno znakov [ a-zA-Z0-9_.@- ]. Vsi drugi znaki so zamenjani z ustreznimi ASCII zamenjavami ali pa so enostavno izpuščeni. V primeru spora je k imenu dodana še številka. Notranje uporabniško ime je namenjeno določitvi istovetnosti in je hkrati tudi privzeto ime uporabnikove osebne mape. Je tudi del oddaljenega naslova URL, na primer za vse storitve *DAV. Ta možnost nastavitve privzet sistem prepiše, spremembe pa se uveljavijo le za na novo dodane (preslikane) uporabnike LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Privzeto je notranje uporabniško ime ustvarjeno po atributu UUID. To zagotavlja, da je uporabniško ime enkratno in da znakov ni treba posebej pretvarjati. Notranje uporabniško ime ima določeno omejitev uporabe izključno znakov [a-zA-Z0-9_.@- ]. Vsi drugi znaki so zamenjani z ustreznimi ASCII zamenjavami, ali pa so enostavno izpuščeni. V primeru spora je k imenu dodana še številka. Notranje uporabniško ime je namenjeno določitvi istovetnosti in je hkrati tudi privzeto ime uporabnikove osebne mape. Je tudi del oddaljenega naslova URL, na primer za vse storitve *DAV. Ta možnost nastavitve privzetega sistema prepiše, spremembe pa se uveljavijo le za na novo dodane (preslikane) uporabnike LDAP. Za privzeto delovanje mora biti polje prazno.", "Internal Username Attribute:" : "Programski atribut uporabniškega imena:", "Override UUID detection" : "Prezri zaznavo 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." : "Privzeto je atribut UUID samodejno zaznan. Uporabljen je za določevanje uporabnikov LDAP in skupin. Notranje uporabniško ime je določeno prav na atributu UUID, če ni določeno drugače. To nastavitev je mogoče prepisati in poslati poljuben atribut. Zagotoviti je treba le, da je ta pridobljen kot enolični podatek za uporabnika ali skupino. Prazno polje določa privzeti način. Spremembe bodo vplivale na novo preslikane (dodane) uporabnike LDAP in skupine.", @@ -188,6 +191,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Uporabniška preslikava uporabniškega imena na LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Uporabniška imena se uporabljajo za shranjevanje in dodeljevanje metapodatkov. Za natančno določevanje uporabnikov je vsakemu uporabniku LDAP preslikano tudi notranje uporabniško ime in sicer na UUID uporabnika LDAP. Poleg tega se enoznačno ime DN shrani tudi v predpomnilnik, da se zmanjša število poslanih zahtevkov na strežnik, a se to ne uporablja za določevanje. Če se enoznačno ime spremeni, bodo usrezno usklajene tudi spremembe. Notranje uporabniško ime se sicer uporablja na več mestih, zato je pričakovati, da ostanejo pri čiščenju preslikav nepovezani podatki. To brisanje ne vpliva upošteva ravni nastavitev, ampak deluje na vse nastavitve LDAP! Preslikav ni nikoli piporočljivo počistiti v produkcijskem okolju, je pa to mogoče v preizkusnem. ", "Clear Username-LDAP User Mapping" : "Izbriši preslikavo uporabniškega imena na LDAP", - "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP" + "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Neveljavne nastavitve: za več podrobnosti si oglejte dnevniške zapise." }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/user_ldap/l10n/sl.json b/apps/user_ldap/l10n/sl.json index e23a09ee6ea..1c3c57768b9 100644 --- a/apps/user_ldap/l10n/sl.json +++ b/apps/user_ldap/l10n/sl.json @@ -4,11 +4,10 @@ "Invalid configuration: Anonymous binding is not allowed." : "Neveljavne nastavitve: brezimne vezi niso dovoljene.", "Valid configuration, connection established!" : "Veljavne nastavitve: povezava je vzpostavljena!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Veljavne nastavitve, a je povezava vseeno spodletela: preverite nastavitve strežnika in poverila.", - "Invalid configuration. Please have a look at the logs for further details." : "Neveljavne nastavitve: za več podrobnosti si oglejte dnevniške zapise.", "No action specified" : "Ni določenega dejanja", "No configuration specified" : "Ni določenih nastavitev", "No data specified" : "Ni navedenih podatkov", - " Could not set configuration %s" : "Ni mogoče uveljaviti nastavitev %s", + "Invalid data specified" : "Določeni so neveljavni podatki", "Action does not exist" : "Dejanje ne obstaja", "Renewing …" : "Poteka ponastavljanje ...", "Very weak password" : "Zelo šibko geslo", @@ -47,19 +46,20 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Razmislite o zoženju iskalnega niza, saj trenutni opredeljuje večje število uporabnikov, med katerimi je le prvi na voljo za prijavo.", "An unspecified error occurred. Please check log and settings." : "Prišlo je do nedoločene napake: preverite dnevnik in nastavitve.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter iskanja ni veljaven. Najverjetneje je to zaradi napake skladnje, kot je neustrezno ali neskladno uporabljen oklepaj. Preverite vpis.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Prišlo je do napake povezave z LDAP / AD. Preverite podatke o gostitelju, vratih in poverilih.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Manjka vsebnik »%uid«. Zamenjan bo z uporabniškim imenom pri poizvedbah LDAP / AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Prišlo je do napake povezave z LDAP / AD. Preverite podatke o gostitelju, vratih in poverilih.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Manjka vsebnik »ID %u«. Zamenjan bo z uporabniškim imenom pri poizvedbah LDAP / AD.", "Please provide a login name to test against" : "Vpisati je treba uporabniško ime za preizkus", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupina je onemogočena, ker na strežniku LDAP / AD ni omogočena podpora atributu memberOf.", - "Password change rejected. Hint: " : "Spreminjanje gesla je zavrnjeno. Namig: ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Skupina je onemogočena, ker na strežniku LDAP / AD ni omogočena podpora atributu memberOf.", "Please login with the new password" : "Prijavite se z novim geslom", "LDAP User backend" : "Uporabniška povezava LDAP", "Your password will expire tomorrow." : "Vaše geslo bo jutri poteklo.", "Your password will expire today." : "Geslo vam poteče danes!", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Geslo bo poteklo čez %n dan.","Geslo bo poteklo čez %n dneva","Geslo bo poteklo čez %n dni.","Geslo bo poteklo čez %n dni."], - "LDAP / AD integration" : "Združevalnik za LDAP / AD", - "_%s group found_::_%s groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"], - "_%s user found_::_%s users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"], + "LDAP/AD integration" : "Združevalnik za LDAP / AD", + "_%n group found_::_%n groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"], + "> 1000 groups found" : "> 1000 najdenih skupin", + "> 1000 users found" : "> 1000 najdenih uporabnikov", + "_%n user found_::_%n users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Ni mogoče zaznati atributa prikaznega imena. Določiti ga je treba ročno med nastavitvami LDAP.", "Could not find the desired feature" : "Želene zmožnosti ni mogoče najti", "Invalid Host" : "Neveljaven gostitelj", @@ -78,10 +78,10 @@ "LDAP Filter:" : "Filter LDAP:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filter določa, katere skupine LDAP bodo imele dostop do %s.", "Verify settings and count the groups" : "Preveri nastavitve in preštej skupine", - "When logging in, %s will find the user based on the following attributes:" : "Pri prijavi bodo prek %s najdeni uporabniki na osnovi navedenih atributov:", - "LDAP / AD Username:" : "Uporabniško ime LDAP / AD:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Omogoča prijavo prek uporabniškega imena LDAP / AD, ki je ali »UID« ali ime računa »sAMAccountName«, ki bo zaznano.", - "LDAP / AD Email Address:" : "Elektronski naslov LDAP / AD:", + "When logging in, %s will find the user based on the following attributes:" : "Ob prijavi bodo uporabniki v %s najdeni na osnovi navedenih atributov:", + "LDAP/AD Username:" : "Uporabniško ime LDAP / AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Omogoča prijavo prek uporabniškega imena LDAP / AD, ki je ali »UID« ali ime računa »sAMAccountName«, ki bo zaznano.", + "LDAP/AD Email Address:" : "Elektronski naslov LDAP / AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Omogoči prijavo z elektronskim naslovom; dovoljeni sta možnosti »mail« in »mailPrimaryAddress«.", "Other Attributes:" : "Drugi atributi:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Določi filter, ki bo uveljavljen ob poskusu prijave. »UID %%« zamenja uporabniško ime pri prijavi, na primer: »uid=%%uid«.", @@ -162,9 +162,10 @@ "Paging chunksize" : "Velikost odvoda za razbremenitev delovnega pomnilnik", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost odvoda za razbremenitev delovnega pomnilnika, ki ga uporablja iskalnik LDAP, pri oštevilčenju uporabnika ali skupine (vrednost 0 možnost onemogoči).", "Enable LDAP password changes per user" : "Omogoči uporabnikom spreminjanje gesel LDAP", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Uporabnikom LDAP dovoli spreminjanje osebnega gesla, nadzornikom in skrbnikom skupin pa spreminjanje gesel povezanih skupin uporabnikov LDAP. Možnost deluje le, če so na strežniku LDAP ustrezno nastavljena priavila dostopa. Ko so gesla poslana na strežnik LDAP kot običajno besedilo, je priporočljivo uporabiti transportno šifriranje in omogočiti varnostno razprševanje gesel.", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Uporabnikom LDAP dovoli spreminjanje osebnega gesla, nadzornikom in skrbnikom skupin pa spreminjanje gesel povezanih skupin uporabnikov LDAP. Možnost deluje le, če so na strežniku LDAP ustrezno nastavljena pravila dostopa. Ko so gesla poslana na strežnik LDAP kot običajno besedilo, je priporočljivo uporabiti transportno šifriranje in omogočiti varnostno razprševanje gesel.", "(New password is sent as plain text to LDAP)" : "(novo geslo je poslano kot besedilo na LDAP)", "Default password policy DN" : "Privzeta pravila gesel enoznačnih imen DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Enoznačno ime (DN) privzetega pravilnika gesel, ki bo uporabljen za ravnanje z gesli po poteku veljavnosti. Deluje le, ko so omogočene spremembe gesel LDAP po uporabniku in ga podpira le OpenLDAP. Prazno polje onemogoči uveljavitev pravil za ravnanje z gesli po preteku.", "Special Attributes" : "Posebni atributi", "Quota Field" : "Polje količinske omejitve", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Pustite prazno za privzeto količinsko omejitev, sicer navedite atribut LDAP/AD.", @@ -176,8 +177,10 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Pustite prazno za uporabniško ime (privzeto), sicer navedite atribut LDAP/AD.", "\"$home\" Placeholder Field" : "Polje vsebnika »$home«", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Vrednost »$home« bo znotraj nastavitev zunanje shrambe zamenjaj z vrednostjo določenega atributa.", + "User Profile Attributes" : "Atributi profila uporabnika", + "Phone Field" : "Polje številke telefona", "Internal Username" : "Programsko uporabniško ime", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Privzeto je notranje uporabniško ime ustvarjeno po atributu UUID. To zagotavlja, da je uporabniško ime enkratno in da znakov ni treba posebej pretvarjati. Notrajne uporabniško ime ima določeno omejitev uporabe izključno znakov [ a-zA-Z0-9_.@- ]. Vsi drugi znaki so zamenjani z ustreznimi ASCII zamenjavami ali pa so enostavno izpuščeni. V primeru spora je k imenu dodana še številka. Notranje uporabniško ime je namenjeno določitvi istovetnosti in je hkrati tudi privzeto ime uporabnikove osebne mape. Je tudi del oddaljenega naslova URL, na primer za vse storitve *DAV. Ta možnost nastavitve privzet sistem prepiše, spremembe pa se uveljavijo le za na novo dodane (preslikane) uporabnike LDAP.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Privzeto je notranje uporabniško ime ustvarjeno po atributu UUID. To zagotavlja, da je uporabniško ime enkratno in da znakov ni treba posebej pretvarjati. Notranje uporabniško ime ima določeno omejitev uporabe izključno znakov [a-zA-Z0-9_.@- ]. Vsi drugi znaki so zamenjani z ustreznimi ASCII zamenjavami, ali pa so enostavno izpuščeni. V primeru spora je k imenu dodana še številka. Notranje uporabniško ime je namenjeno določitvi istovetnosti in je hkrati tudi privzeto ime uporabnikove osebne mape. Je tudi del oddaljenega naslova URL, na primer za vse storitve *DAV. Ta možnost nastavitve privzetega sistema prepiše, spremembe pa se uveljavijo le za na novo dodane (preslikane) uporabnike LDAP. Za privzeto delovanje mora biti polje prazno.", "Internal Username Attribute:" : "Programski atribut uporabniškega imena:", "Override UUID detection" : "Prezri zaznavo 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." : "Privzeto je atribut UUID samodejno zaznan. Uporabljen je za določevanje uporabnikov LDAP in skupin. Notranje uporabniško ime je določeno prav na atributu UUID, če ni določeno drugače. To nastavitev je mogoče prepisati in poslati poljuben atribut. Zagotoviti je treba le, da je ta pridobljen kot enolični podatek za uporabnika ali skupino. Prazno polje določa privzeti način. Spremembe bodo vplivale na novo preslikane (dodane) uporabnike LDAP in skupine.", @@ -186,6 +189,7 @@ "Username-LDAP User Mapping" : "Uporabniška preslikava uporabniškega imena na LDAP", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Uporabniška imena se uporabljajo za shranjevanje in dodeljevanje metapodatkov. Za natančno določevanje uporabnikov je vsakemu uporabniku LDAP preslikano tudi notranje uporabniško ime in sicer na UUID uporabnika LDAP. Poleg tega se enoznačno ime DN shrani tudi v predpomnilnik, da se zmanjša število poslanih zahtevkov na strežnik, a se to ne uporablja za določevanje. Če se enoznačno ime spremeni, bodo usrezno usklajene tudi spremembe. Notranje uporabniško ime se sicer uporablja na več mestih, zato je pričakovati, da ostanejo pri čiščenju preslikav nepovezani podatki. To brisanje ne vpliva upošteva ravni nastavitev, ampak deluje na vse nastavitve LDAP! Preslikav ni nikoli piporočljivo počistiti v produkcijskem okolju, je pa to mogoče v preizkusnem. ", "Clear Username-LDAP User Mapping" : "Izbriši preslikavo uporabniškega imena na LDAP", - "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP" + "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Neveljavne nastavitve: za več podrobnosti si oglejte dnevniške zapise." },"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/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js index 17c5ba6dd11..8c45bd37c00 100644 --- a/apps/user_ldap/l10n/sq.js +++ b/apps/user_ldap/l10n/sq.js @@ -6,11 +6,9 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Konfigurim i pavlefshëm: Lidhja anonim nuk është e lejueshme.", "Valid configuration, connection established!" : "Konfigurim i vlefshëm, lidhja u krijuar!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfigurime të vlefshme, por lidhja dështoi. Ju lutem kontrolloni konfigurimet dhe kredencialet e serverit.", - "Invalid configuration. Please have a look at the logs for further details." : "Konfigurime të pavlefshme. Ju lutem shikoni hyrjet për detaje të mëtejshme.", "No action specified" : "S’është treguar veprim", "No configuration specified" : "S’u dha formësim", "No data specified" : "S’u treguan të dhëna", - " Could not set configuration %s" : "S’vuri dot në punë formësimin %s", "Action does not exist" : "Veprimi s’ekziston", "Renewing …" : "Duke rinovuar...", "Very weak password" : "Fjalëkalim shumë i dobët", @@ -48,18 +46,11 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Konsideroni të kufizoni kërkimin tuaj, pasi ai përfshin shumë përdorues, vetëm i pari ij të cilëve do të jetë në gjendje të hyjë.", "An unspecified error occurred. Please check log and settings." : "Një gabim i pa specifikuar ndodhi. Ju lutem kontrolloni hyrjet dhe konfigurimet.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtri i kërkimit është i pavlefshëm, ndoshta për shkak problemesh sintakse, të tillë si një numër jo i njëjtë kllpash të hapura dhe mbyllura. Ju lutemi, rishikojeni.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ndodhi një gabim lidhje te LDAP / AD, ju lutemi, kontrolloni strehën, portën dhe kredencialet.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Vendi \"%uis\" po mungon. Do të zëvendësohet me emrin e identifikimit kur të kërkohet LDAP / AD.", "Please provide a login name to test against" : "Ju lutemi, jepni një emër hyrjesh që të ritestohet", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kutia e grupeve u çaktivizua, ngaqë shërbyesi LDAP / AD nuk mbulon memberOf.", - "Password change rejected. Hint: " : "Ndryshimi i fjalëkalimit u refuzua. Informatë:", "Please login with the new password" : "Ju lutem kyçuni me fjalëkalimin e ri", "Your password will expire tomorrow." : "Fjalëkalimi juaj do të skadojë nesër", "Your password will expire today." : "Fjalëkalimi juaj do të skadojë sot.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Fjalëkalimi juaj do të skadojë brenad %n ditëve","Fjalëkalimi juaj do të skadojë brenad %n ditëve"], - "LDAP / AD integration" : "Integrimi LDAP / AD", - "_%s group found_::_%s groups found_" : ["U gjet %s grup","U gjetën %s grupe"], - "_%s user found_::_%s users found_" : ["U gjet %s përdorues","U gjetën %s përdorues"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nuk mund të zbulohej atributi i emrit të ekranit të përdoruesit. Ju lutemi specifikoni vetë në avancë parametrat e LDAP.", "Could not find the desired feature" : "S’u gjet dot veçoria e dëshiruar", "Invalid Host" : "Strehë e Pavlefshme", @@ -77,8 +68,6 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtri përcakton se cilët grupe LDAP do të kenë hyrje te instanca %s.", "Verify settings and count the groups" : "Verifiko konfigurimet dhe numëro grupet", "When logging in, %s will find the user based on the following attributes:" : "Kur hyhet, %s do ta gjejë përdoruesin duke u bazuar në atributet vijues:", - "LDAP / AD Username:" : "Emër përdoruesi LDAP / AD:", - "LDAP / AD Email Address:" : "Adresë Email LDAP / AD:", "Other Attributes:" : "Atribute të Tjerë:", "Test Loginname" : "Testo Emër hyrjesh", "Verify settings" : "Verifikoni rregullimet", @@ -169,7 +158,6 @@ OC.L10N.register( "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Vendos emailin e përdoruesit nga atributi i tyre LDAP. Lëreni bosh për sjelljen e paracaktuar.", "User Home Folder Naming Rule" : "Rregull Emërtimi Dosjeje Kreu të Përdoruesit", "Internal Username" : "Emër i Brendshëm Përdoruesi", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Në paracaktim, emri i brendshëm i përdoruesit do të krijohet nga atributi UUID. Sigurohuni që emri i përdoruesit është unik dhe karakteret nuk kanë nevojë të konvertohen. Emri i përdoruesit të brendshëm ka kufizim që lejohen vetëm këto karaktere: [a-zA-Z0-9 _. @ -]. Karaktere të tjera zëvendësohen me korrespondencën e tyre ASCII ose thjesht hiqen. Për goditjet një numër do të shtohet / rritet. Emri i brendshëm përdoret për të identifikuar një përdorues brenda. Është gjithashtu emri i parazgjedhur për dosjen e përdoruesit në shtëpi. Është gjithashtu një pjesë e URL-ve të largëta, për shembull për të gjitha shërbimet * DAV. Me këtë cilësim, sjellja e parazgjedhur mund të fshihet. Lëreni bosh për sjelljen e paracaktuar. Ndryshimet do të kenë efekt vetëm në përdoruesit e sapo hartuar (shtuar) LDAP.", "Internal Username Attribute:" : "Atribut Emër i Brendshëm Përdoruesi:", "Override UUID detection" : "Anashkalo zbullim UUID-je", "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." : "Si parazgjedhje, atributi UUID zbulohet automatikisht. Atributi UUID përdoret për të identifikuar pa dyshime përdorues dhe grupe LDAP. Gjithashtu, emri i brendshëm i përdoruesi do të krijohet mbi bazën e UUID-së, në mos u përcaktoftë ndryshe më sipër. Mund ta anashkaloni rregullimin dhe të jepni një atribut tuajin sipas dëshirës. Duhet të siguroni që atributi sipas dëshirës të mund të jepet si për përdorues, ashtu edhe për grupe, dhe se është unik. Lëreni të zbrazët që të ruhet sjellja parazgjedhje. Ndryshimet do të kenë efekt vetëm etëm mbi përdorues LDAP të përshoqëruar (shtuar) rishtas.", @@ -177,6 +165,7 @@ OC.L10N.register( "UUID Attribute for Groups:" : "Atribut UUID për Grupe:", "Username-LDAP User Mapping" : "Përshoqërim Emër përdoruesi-Përdorues LDAP", "Clear Username-LDAP User Mapping" : "Pastro Përshoqërimin Emër përdoruesi-Përdorues LDAP", - "Clear Groupname-LDAP Group Mapping" : "Pastro Përshoqërimin Emër grupi-Grup LDAP" + "Clear Groupname-LDAP Group Mapping" : "Pastro Përshoqërimin Emër grupi-Grup LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Konfigurime të pavlefshme. Ju lutem shikoni hyrjet për detaje të mëtejshme." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json index 3506a1e0c33..aa6123c6a9c 100644 --- a/apps/user_ldap/l10n/sq.json +++ b/apps/user_ldap/l10n/sq.json @@ -4,11 +4,9 @@ "Invalid configuration: Anonymous binding is not allowed." : "Konfigurim i pavlefshëm: Lidhja anonim nuk është e lejueshme.", "Valid configuration, connection established!" : "Konfigurim i vlefshëm, lidhja u krijuar!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Konfigurime të vlefshme, por lidhja dështoi. Ju lutem kontrolloni konfigurimet dhe kredencialet e serverit.", - "Invalid configuration. Please have a look at the logs for further details." : "Konfigurime të pavlefshme. Ju lutem shikoni hyrjet për detaje të mëtejshme.", "No action specified" : "S’është treguar veprim", "No configuration specified" : "S’u dha formësim", "No data specified" : "S’u treguan të dhëna", - " Could not set configuration %s" : "S’vuri dot në punë formësimin %s", "Action does not exist" : "Veprimi s’ekziston", "Renewing …" : "Duke rinovuar...", "Very weak password" : "Fjalëkalim shumë i dobët", @@ -46,18 +44,11 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Konsideroni të kufizoni kërkimin tuaj, pasi ai përfshin shumë përdorues, vetëm i pari ij të cilëve do të jetë në gjendje të hyjë.", "An unspecified error occurred. Please check log and settings." : "Një gabim i pa specifikuar ndodhi. Ju lutem kontrolloni hyrjet dhe konfigurimet.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtri i kërkimit është i pavlefshëm, ndoshta për shkak problemesh sintakse, të tillë si një numër jo i njëjtë kllpash të hapura dhe mbyllura. Ju lutemi, rishikojeni.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ndodhi një gabim lidhje te LDAP / AD, ju lutemi, kontrolloni strehën, portën dhe kredencialet.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Vendi \"%uis\" po mungon. Do të zëvendësohet me emrin e identifikimit kur të kërkohet LDAP / AD.", "Please provide a login name to test against" : "Ju lutemi, jepni një emër hyrjesh që të ritestohet", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kutia e grupeve u çaktivizua, ngaqë shërbyesi LDAP / AD nuk mbulon memberOf.", - "Password change rejected. Hint: " : "Ndryshimi i fjalëkalimit u refuzua. Informatë:", "Please login with the new password" : "Ju lutem kyçuni me fjalëkalimin e ri", "Your password will expire tomorrow." : "Fjalëkalimi juaj do të skadojë nesër", "Your password will expire today." : "Fjalëkalimi juaj do të skadojë sot.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Fjalëkalimi juaj do të skadojë brenad %n ditëve","Fjalëkalimi juaj do të skadojë brenad %n ditëve"], - "LDAP / AD integration" : "Integrimi LDAP / AD", - "_%s group found_::_%s groups found_" : ["U gjet %s grup","U gjetën %s grupe"], - "_%s user found_::_%s users found_" : ["U gjet %s përdorues","U gjetën %s përdorues"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Nuk mund të zbulohej atributi i emrit të ekranit të përdoruesit. Ju lutemi specifikoni vetë në avancë parametrat e LDAP.", "Could not find the desired feature" : "S’u gjet dot veçoria e dëshiruar", "Invalid Host" : "Strehë e Pavlefshme", @@ -75,8 +66,6 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtri përcakton se cilët grupe LDAP do të kenë hyrje te instanca %s.", "Verify settings and count the groups" : "Verifiko konfigurimet dhe numëro grupet", "When logging in, %s will find the user based on the following attributes:" : "Kur hyhet, %s do ta gjejë përdoruesin duke u bazuar në atributet vijues:", - "LDAP / AD Username:" : "Emër përdoruesi LDAP / AD:", - "LDAP / AD Email Address:" : "Adresë Email LDAP / AD:", "Other Attributes:" : "Atribute të Tjerë:", "Test Loginname" : "Testo Emër hyrjesh", "Verify settings" : "Verifikoni rregullimet", @@ -167,7 +156,6 @@ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Vendos emailin e përdoruesit nga atributi i tyre LDAP. Lëreni bosh për sjelljen e paracaktuar.", "User Home Folder Naming Rule" : "Rregull Emërtimi Dosjeje Kreu të Përdoruesit", "Internal Username" : "Emër i Brendshëm Përdoruesi", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Në paracaktim, emri i brendshëm i përdoruesit do të krijohet nga atributi UUID. Sigurohuni që emri i përdoruesit është unik dhe karakteret nuk kanë nevojë të konvertohen. Emri i përdoruesit të brendshëm ka kufizim që lejohen vetëm këto karaktere: [a-zA-Z0-9 _. @ -]. Karaktere të tjera zëvendësohen me korrespondencën e tyre ASCII ose thjesht hiqen. Për goditjet një numër do të shtohet / rritet. Emri i brendshëm përdoret për të identifikuar një përdorues brenda. Është gjithashtu emri i parazgjedhur për dosjen e përdoruesit në shtëpi. Është gjithashtu një pjesë e URL-ve të largëta, për shembull për të gjitha shërbimet * DAV. Me këtë cilësim, sjellja e parazgjedhur mund të fshihet. Lëreni bosh për sjelljen e paracaktuar. Ndryshimet do të kenë efekt vetëm në përdoruesit e sapo hartuar (shtuar) LDAP.", "Internal Username Attribute:" : "Atribut Emër i Brendshëm Përdoruesi:", "Override UUID detection" : "Anashkalo zbullim UUID-je", "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." : "Si parazgjedhje, atributi UUID zbulohet automatikisht. Atributi UUID përdoret për të identifikuar pa dyshime përdorues dhe grupe LDAP. Gjithashtu, emri i brendshëm i përdoruesi do të krijohet mbi bazën e UUID-së, në mos u përcaktoftë ndryshe më sipër. Mund ta anashkaloni rregullimin dhe të jepni një atribut tuajin sipas dëshirës. Duhet të siguroni që atributi sipas dëshirës të mund të jepet si për përdorues, ashtu edhe për grupe, dhe se është unik. Lëreni të zbrazët që të ruhet sjellja parazgjedhje. Ndryshimet do të kenë efekt vetëm etëm mbi përdorues LDAP të përshoqëruar (shtuar) rishtas.", @@ -175,6 +163,7 @@ "UUID Attribute for Groups:" : "Atribut UUID për Grupe:", "Username-LDAP User Mapping" : "Përshoqërim Emër përdoruesi-Përdorues LDAP", "Clear Username-LDAP User Mapping" : "Pastro Përshoqërimin Emër përdoruesi-Përdorues LDAP", - "Clear Groupname-LDAP Group Mapping" : "Pastro Përshoqërimin Emër grupi-Grup LDAP" + "Clear Groupname-LDAP Group Mapping" : "Pastro Përshoqërimin Emër grupi-Grup LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Konfigurime të pavlefshme. Ju lutem shikoni hyrjet për detaje të mëtejshme." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js index 7e8112334e9..4d4ef42ffba 100644 --- a/apps/user_ldap/l10n/sr.js +++ b/apps/user_ldap/l10n/sr.js @@ -6,11 +6,12 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Неисправна конфигурација: Анонимно везивање није дозвољено.", "Valid configuration, connection established!" : "Исправна конфигурација, веза успостављена!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Исправна конфигурација, али везивање није успело. Проверите поставке сервера и акредитиве.", - "Invalid configuration. Please have a look at the logs for further details." : "Неисправна конфигурација. Погледајте дневник за више детаља.", + "Invalid configuration: %s" : "Неисправна конфигурације: %s", "No action specified" : "Није наведена радња", "No configuration specified" : "Није наведена постава", "No data specified" : "Нису наведени подаци", - " Could not set configuration %s" : "Нисам могао да подесим конфигурацију %s", + "Invalid data specified" : "Наведени су неисправни подаци", + "Could not set configuration %1$s to %2$s" : "Конфигурација %1$s није могла да се постави на %2$s", "Action does not exist" : "Радња не постоји", "Renewing …" : "Обнављам …", "Very weak password" : "Веома слаба лозинка", @@ -49,19 +50,36 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Размислите и да смањите претрагу, пошто обухвата много корисника, од којих ће само први моћи да се пријави.", "An unspecified error occurred. Please check log and settings." : "Десила се непозната грешка. Погледајте дневник и подешавања.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Филтер претраге је неисправан, вероватно због синтаксе попут неједнаког броја отворених и затворених заграда. Проверите.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Дошло је до грешке LDAP / AD везе. Проверите домаћина, порт и акредитиве.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "„%uid“ резервисано поље недостаје. Биће замењено са корисничким именом када се ради упит над LDAP / AD-ом.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Дошло је до грешко приликом повезивања на LDAP/AD. Молимо вас да проверите хост, порт и креденцијале.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Недостаје „%uid” чувар места. Замениће се именом за пријаву када се буде вршио упит LDAP/AD.", "Please provide a login name to test against" : "Наведите пријавно име за тест са", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Поље групе је искључено јер LDAP / AD сервер не подржава припадност групи.", - "Password change rejected. Hint: " : "Промена лозинке није прихваћена. Смерница:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Кутија групе је искључена јер LDAP/AD сервер не подржава memberOf.", + "Password change rejected. Hint: %s" : "Промена лозинке није прихваћена. Савет: %s", + "Mandatory field \"%s\" left empty" : "Обавезно поље „%s” је остављено празно", + "A password is given, but not an LDAP agent" : "Лозинка је наведена, али LDAP агент није", + "No password is given for the user agent" : "Није наведена ниједна лозинка за корисничког агента", + "No LDAP base DN was given" : "Није наведен ниједан LDAP базни DN", + "User base DN is not a subnode of global base DN" : "Корисников базни DN није подчвор глобалног базног DN", + "Group base DN is not a subnode of global base DN" : "Базни DN групе није подчвор глобалног базног DN", + "Login filter does not contain %s placeholder." : "Филтер пријаве не садржи %s чувар места", "Please login with the new password" : "Пријавите се са новом лозинком", "LDAP User backend" : "LDAP позадина за кориснике", "Your password will expire tomorrow." : "Ваша лозинка ће истећи сутра.", "Your password will expire today." : "Ваша лозинка ће истећи данас.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ваша лозинка ће истећи за %n дан.","Ваша лозинка ће истећи за %n дана.","Ваша лозинка ће истећи за %n дана."], - "LDAP / AD integration" : "LDAP / AD интеграција", - "_%s group found_::_%s groups found_" : ["нађена %s група","нађене %s групе","Нађено %s група"], - "_%s user found_::_%s users found_" : ["нађен %s корисник","нађена %s корисника","Нађено %s корисника"], + "LDAP/AD integration" : "LDAP/AD интеграција", + "LDAP Connection" : "LDAP веза", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Није успело везивање за ову LDAP конфигурацију: %s","Није успело везивање за %n LDAP конфигурације: %s","Није успело везивање за %n LDAP конфигурација: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Није успела претрага за ову LDAP конфигурацију: %s","Није успела претрага за %n LDAP конфигурације: %s","Није успела претрага за %n LDAP конфигурација: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Постоји неактивна LDAP конфигурација: %s","Постоје %n неактивне LDAP конфигурације: %s","Постоји %n неактивних LDAP конфигурација: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Везивање и претрага функционишу на конфигурисаној LDAP вези (%s)","Везивање и претрага функционишу на свих %n конфигурисаних LDAP веза (%s)","Везивање и претрага функционишу на свих %n конфигурисаних LDAP веза (%s)"], + "Invalid LDAP UUIDs" : "Неисправни LDAP UUID идентификатори", + "None found" : "Није пронађен ниједан", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Пронађени су неисправни UUID бројеви LDAP налога или група. Молимо вас да ревидирате своја „Премости UUID детекцију\" подешавања у Експерт делу LDAP конфигурације и употребите „occ ldap:update-uuid” да их ажурирате.", + "_%n group found_::_%n groups found_" : ["пронађена је %n група","пронађене су %n групе","пронађено је %n група"], + "> 1000 groups found" : "пронађено је >1000 група", + "> 1000 users found" : "пронаћено је > 1000 корисника", + "_%n user found_::_%n users found_" : ["пронађен је %n корисник","пронађено је %n корисника","пронађено је %n корисника"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не могу да пронађем атрибут имена за приказ корисника. Молимо сами га наведите у LDAP напредним подешавањима.", "Could not find the desired feature" : "Не могу да пронађем жељену особину", "Invalid Host" : "Неисправан домаћин", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Филтер прецизира које ће LDAP групе требају имати приступ %s случају.", "Verify settings and count the groups" : "Верификуј поставке и преброј групе", "When logging in, %s will find the user based on the following attributes:" : "При пријављивању, %s ће пронаћи корисника на основу следећих атрибута:", - "LDAP / AD Username:" : "LDAP / AD корисничко име:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Дозволи пријављивање преко LDAP / AD корисничког имена, које је или „uid“ или „sAMAccountName“ и биће детектовано.", - "LDAP / AD Email Address:" : "LDAP / AD адреса е-поште:", + "LDAP/AD Username:" : "LDAP/AD корисничко име:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Омогућава пријаву према LDAP/AD корисничком имену, што је или „uid” или „sAMAccountName” и детектоваће се.", + "LDAP/AD Email Address:" : "LDAP/AD и-мејл адреса:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Дозволи пријављивање преко атрибута адресе е-поште. „mail“ и „mailPrimaryAddress“ су дозвољени.", "Other Attributes:" : "Остали атрибути:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Дефинише филтер који ће се применити, када се покуша пријава. „%%uid“ замењује корисничко име у пријави. Пример: „uid=%%uid“", "Test Loginname" : "Испробај име за пријаву", + "Attempts to receive a DN for the given loginname and the current login filter" : "Покушава да прими Име домена за наведено име пријаве и текући филтер пријаве", "Verify settings" : "Провери поставке", "%s. Server:" : "%s. Сервер:", "Add a new configuration" : "Додај нову поставку", @@ -151,6 +170,8 @@ OC.L10N.register( "One User Base DN per line" : "Један Корисников јединствени назив DN по линији", "User Search Attributes" : "Параметри претраге корисника", "Optional; one attribute per line" : "Опционо; један параметар по линији", + "Disable users missing from LDAP" : "Искључи кориниске којих нема у LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Када је укључено, корисници који се увезу из LDAP па онда недостају ће се искључити", "Group Display Name Field" : "Име приказа групе", "The LDAP attribute to use to generate the groups's display name." : "LDAP параметар за формирање имена за приказ група.", "Base Group Tree" : "Стабло основне групе", @@ -179,8 +200,31 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставите празно за корисничко име (подразумевано). У супротном, наведите особину LDAP/AD.", "\"$home\" Placeholder Field" : "Резервисано место за поље „$home“", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home ће се у подешавању спољног складишта заменити са вредношћу задатог атрибута", + "User Profile Attributes" : "Атрибути корисничког профила", + "Phone Field" : "Поље телефона", + "User profile Phone will be set from the specified attribute" : "Телефон корисничког профила ће се поставити из наведеног атрибута", + "Website Field" : "Поље веб сајта", + "User profile Website will be set from the specified attribute" : "Веб сајт корисничког профила ће се поставити из наведеног атрибута", + "Address Field" : "Поље адресе", + "User profile Address will be set from the specified attribute" : "Адреса корисничког профила ће се поставити из наведеног атрибута", + "Twitter Field" : "Twitter поље", + "User profile Twitter will be set from the specified attribute" : "Twitter налог корисничког профила ће се поставити из наведеног атрибута", + "Fediverse Field" : "Fediverse поље", + "User profile Fediverse will be set from the specified attribute" : "Fediverse налог корисничког профила ће се поставити из наведеног атрибута", + "Organisation Field" : "Поље организације", + "User profile Organisation will be set from the specified attribute" : "Организација корисничког профила ће се поставити из наведеног атрибута", + "Role Field" : "Поље улоге", + "User profile Role will be set from the specified attribute" : "Улога корисничког профила ће се поставити из наведеног атрибута", + "Headline Field" : "Поље насловне линије", + "User profile Headline will be set from the specified attribute" : "Насловна линија корисничког профила ће се поставити из наведеног атрибута", + "Biography Field" : "Поље биографије", + "User profile Biography will be set from the specified attribute" : "Биографија корисничког профила ће се поставити из наведеног атрибута", + "Birthdate Field" : "Пође рођендана", + "User profile Date of birth will be set from the specified attribute" : "Датум рођења за кориснички профил ће да се постави из наведеног атрибута", + "Pronouns Field" : "Поље заменица", + "User profile Pronouns will be set from the specified attribute" : "Заменице корисничког профила ће се поставити из наведеног атрибута", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Подразумевано се интерно корисничко име креира од UUID атрибута. Тиме се гарантује да се корисничко име јединствено и да карактери не морају да се конвертују. Интерно корисничко име има ограничења да су дозвољени само следећи карактери: [ a-zA-Z0-9_.@- ]. Остали карактери ће или бити замењени ASCII еквивалентима или ће бити прескочени. Ако се деси поклапање са постојећим корисничким именом, додаће се број на крај имена. Интерно корисничко име се користи да идентификује корисника интерно. Такође се користи и као подразумевано име за име корисничку фасцикле, а и део је удаљених адреса, нпр. свих *DAV сервиса. Уз помоћ овог подешавања, може да се промени подразумевано понашање. Оставите га празним за подразумевано понашање. Промене ће се тицати само новомапираних (додатих) LDAP корисника.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Интерно име ће се подразумевано креирати из UUID атрибута. Тако се обезбеђује да је корисничко име јединствено и да нема потребе да се карактери конвертују. Интерно корисничко име је ограничено тако да су дозвољени само следећи карактери: [a-zA-Z0-9_.@-]. Остали карактери ће се заменити својим одговарајућим ASCII карактерима или ће се једноставно изоставити. У случају колизија, дописаће се/увећати број. Интерно корисничко име се користи да се корисник интерно идентификује. То је такође и подразумевано име за коринсиков почетни фолдер. Такође је део удаљених URL адреса, на пример за све DAV сервисе. Овим подешавањем је могуће преиначење подразумеваног понашања. Измене ће ступити на снагу само за ново мапиране (додате) 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." : "Подразумевано, атрибут UUID се аутоматски детектује. Атрибут UUID се користи за сигурну идентификацију LDAP корисника и група. Такође, локално корисничко име ће бити креирано на основу UUID-a, ако није другачије назначено. Можете заобићи поставке и проследити други атрибут по вашем избору. Морате бити сигурни да је изабрани атрибут јединствен и да га корисници и групе могу преносити. Оставите празно за подразумевано понашање. Промене ће имати дејство само на новомапираним (доданим) LDAP корисницима и групама.", @@ -189,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Username-LDAP мапирање корисника", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Корисничка имена се користи за чување и додељивање метаподатака. Да би се прецизно идентификовали и препознавали кориснике, сваки LDAP корисник ће имати локално корисничко име. Ово захтева мапирање од корисничког имена до LDAP корисника. Креирано корисничко име се мапира у UUID LDAP корисника. Поред тога, DN се кешира да смањи LDAP интеракцију, али се не користи за идентификацију. Ако се DN мења, промене се могу наћи. Локално корисничко име се користи свуда. Чишћење мапирања оставља свуда остатке. Чишћење мапирања није осетљиво на конфигурацију, оно утиче на све LDAP конфигурације! Никада не користит чишћење мапирања у радном окружењу, већ само у тестирању или експерименталној фази.", "Clear Username-LDAP User Mapping" : "Очисти Username-LDAP мапирање корисника", - "Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група" + "Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група", + "Invalid configuration. Please have a look at the logs for further details." : "Неисправна конфигурација. Погледајте дневник за више детаља." }, "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/sr.json b/apps/user_ldap/l10n/sr.json index aea8c087401..d2c8defd599 100644 --- a/apps/user_ldap/l10n/sr.json +++ b/apps/user_ldap/l10n/sr.json @@ -4,11 +4,12 @@ "Invalid configuration: Anonymous binding is not allowed." : "Неисправна конфигурација: Анонимно везивање није дозвољено.", "Valid configuration, connection established!" : "Исправна конфигурација, веза успостављена!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Исправна конфигурација, али везивање није успело. Проверите поставке сервера и акредитиве.", - "Invalid configuration. Please have a look at the logs for further details." : "Неисправна конфигурација. Погледајте дневник за више детаља.", + "Invalid configuration: %s" : "Неисправна конфигурације: %s", "No action specified" : "Није наведена радња", "No configuration specified" : "Није наведена постава", "No data specified" : "Нису наведени подаци", - " Could not set configuration %s" : "Нисам могао да подесим конфигурацију %s", + "Invalid data specified" : "Наведени су неисправни подаци", + "Could not set configuration %1$s to %2$s" : "Конфигурација %1$s није могла да се постави на %2$s", "Action does not exist" : "Радња не постоји", "Renewing …" : "Обнављам …", "Very weak password" : "Веома слаба лозинка", @@ -47,19 +48,36 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Размислите и да смањите претрагу, пошто обухвата много корисника, од којих ће само први моћи да се пријави.", "An unspecified error occurred. Please check log and settings." : "Десила се непозната грешка. Погледајте дневник и подешавања.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Филтер претраге је неисправан, вероватно због синтаксе попут неједнаког броја отворених и затворених заграда. Проверите.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Дошло је до грешке LDAP / AD везе. Проверите домаћина, порт и акредитиве.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "„%uid“ резервисано поље недостаје. Биће замењено са корисничким именом када се ради упит над LDAP / AD-ом.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Дошло је до грешко приликом повезивања на LDAP/AD. Молимо вас да проверите хост, порт и креденцијале.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Недостаје „%uid” чувар места. Замениће се именом за пријаву када се буде вршио упит LDAP/AD.", "Please provide a login name to test against" : "Наведите пријавно име за тест са", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Поље групе је искључено јер LDAP / AD сервер не подржава припадност групи.", - "Password change rejected. Hint: " : "Промена лозинке није прихваћена. Смерница:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Кутија групе је искључена јер LDAP/AD сервер не подржава memberOf.", + "Password change rejected. Hint: %s" : "Промена лозинке није прихваћена. Савет: %s", + "Mandatory field \"%s\" left empty" : "Обавезно поље „%s” је остављено празно", + "A password is given, but not an LDAP agent" : "Лозинка је наведена, али LDAP агент није", + "No password is given for the user agent" : "Није наведена ниједна лозинка за корисничког агента", + "No LDAP base DN was given" : "Није наведен ниједан LDAP базни DN", + "User base DN is not a subnode of global base DN" : "Корисников базни DN није подчвор глобалног базног DN", + "Group base DN is not a subnode of global base DN" : "Базни DN групе није подчвор глобалног базног DN", + "Login filter does not contain %s placeholder." : "Филтер пријаве не садржи %s чувар места", "Please login with the new password" : "Пријавите се са новом лозинком", "LDAP User backend" : "LDAP позадина за кориснике", "Your password will expire tomorrow." : "Ваша лозинка ће истећи сутра.", "Your password will expire today." : "Ваша лозинка ће истећи данас.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ваша лозинка ће истећи за %n дан.","Ваша лозинка ће истећи за %n дана.","Ваша лозинка ће истећи за %n дана."], - "LDAP / AD integration" : "LDAP / AD интеграција", - "_%s group found_::_%s groups found_" : ["нађена %s група","нађене %s групе","Нађено %s група"], - "_%s user found_::_%s users found_" : ["нађен %s корисник","нађена %s корисника","Нађено %s корисника"], + "LDAP/AD integration" : "LDAP/AD интеграција", + "LDAP Connection" : "LDAP веза", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Није успело везивање за ову LDAP конфигурацију: %s","Није успело везивање за %n LDAP конфигурације: %s","Није успело везивање за %n LDAP конфигурација: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Није успела претрага за ову LDAP конфигурацију: %s","Није успела претрага за %n LDAP конфигурације: %s","Није успела претрага за %n LDAP конфигурација: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Постоји неактивна LDAP конфигурација: %s","Постоје %n неактивне LDAP конфигурације: %s","Постоји %n неактивних LDAP конфигурација: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Везивање и претрага функционишу на конфигурисаној LDAP вези (%s)","Везивање и претрага функционишу на свих %n конфигурисаних LDAP веза (%s)","Везивање и претрага функционишу на свих %n конфигурисаних LDAP веза (%s)"], + "Invalid LDAP UUIDs" : "Неисправни LDAP UUID идентификатори", + "None found" : "Није пронађен ниједан", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Пронађени су неисправни UUID бројеви LDAP налога или група. Молимо вас да ревидирате своја „Премости UUID детекцију\" подешавања у Експерт делу LDAP конфигурације и употребите „occ ldap:update-uuid” да их ажурирате.", + "_%n group found_::_%n groups found_" : ["пронађена је %n група","пронађене су %n групе","пронађено је %n група"], + "> 1000 groups found" : "пронађено је >1000 група", + "> 1000 users found" : "пронаћено је > 1000 корисника", + "_%n user found_::_%n users found_" : ["пронађен је %n корисник","пронађено је %n корисника","пронађено је %n корисника"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не могу да пронађем атрибут имена за приказ корисника. Молимо сами га наведите у LDAP напредним подешавањима.", "Could not find the desired feature" : "Не могу да пронађем жељену особину", "Invalid Host" : "Неисправан домаћин", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Филтер прецизира које ће LDAP групе требају имати приступ %s случају.", "Verify settings and count the groups" : "Верификуј поставке и преброј групе", "When logging in, %s will find the user based on the following attributes:" : "При пријављивању, %s ће пронаћи корисника на основу следећих атрибута:", - "LDAP / AD Username:" : "LDAP / AD корисничко име:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Дозволи пријављивање преко LDAP / AD корисничког имена, које је или „uid“ или „sAMAccountName“ и биће детектовано.", - "LDAP / AD Email Address:" : "LDAP / AD адреса е-поште:", + "LDAP/AD Username:" : "LDAP/AD корисничко име:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Омогућава пријаву према LDAP/AD корисничком имену, што је или „uid” или „sAMAccountName” и детектоваће се.", + "LDAP/AD Email Address:" : "LDAP/AD и-мејл адреса:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Дозволи пријављивање преко атрибута адресе е-поште. „mail“ и „mailPrimaryAddress“ су дозвољени.", "Other Attributes:" : "Остали атрибути:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Дефинише филтер који ће се применити, када се покуша пријава. „%%uid“ замењује корисничко име у пријави. Пример: „uid=%%uid“", "Test Loginname" : "Испробај име за пријаву", + "Attempts to receive a DN for the given loginname and the current login filter" : "Покушава да прими Име домена за наведено име пријаве и текући филтер пријаве", "Verify settings" : "Провери поставке", "%s. Server:" : "%s. Сервер:", "Add a new configuration" : "Додај нову поставку", @@ -149,6 +168,8 @@ "One User Base DN per line" : "Један Корисников јединствени назив DN по линији", "User Search Attributes" : "Параметри претраге корисника", "Optional; one attribute per line" : "Опционо; један параметар по линији", + "Disable users missing from LDAP" : "Искључи кориниске којих нема у LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Када је укључено, корисници који се увезу из LDAP па онда недостају ће се искључити", "Group Display Name Field" : "Име приказа групе", "The LDAP attribute to use to generate the groups's display name." : "LDAP параметар за формирање имена за приказ група.", "Base Group Tree" : "Стабло основне групе", @@ -177,8 +198,31 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставите празно за корисничко име (подразумевано). У супротном, наведите особину LDAP/AD.", "\"$home\" Placeholder Field" : "Резервисано место за поље „$home“", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home ће се у подешавању спољног складишта заменити са вредношћу задатог атрибута", + "User Profile Attributes" : "Атрибути корисничког профила", + "Phone Field" : "Поље телефона", + "User profile Phone will be set from the specified attribute" : "Телефон корисничког профила ће се поставити из наведеног атрибута", + "Website Field" : "Поље веб сајта", + "User profile Website will be set from the specified attribute" : "Веб сајт корисничког профила ће се поставити из наведеног атрибута", + "Address Field" : "Поље адресе", + "User profile Address will be set from the specified attribute" : "Адреса корисничког профила ће се поставити из наведеног атрибута", + "Twitter Field" : "Twitter поље", + "User profile Twitter will be set from the specified attribute" : "Twitter налог корисничког профила ће се поставити из наведеног атрибута", + "Fediverse Field" : "Fediverse поље", + "User profile Fediverse will be set from the specified attribute" : "Fediverse налог корисничког профила ће се поставити из наведеног атрибута", + "Organisation Field" : "Поље организације", + "User profile Organisation will be set from the specified attribute" : "Организација корисничког профила ће се поставити из наведеног атрибута", + "Role Field" : "Поље улоге", + "User profile Role will be set from the specified attribute" : "Улога корисничког профила ће се поставити из наведеног атрибута", + "Headline Field" : "Поље насловне линије", + "User profile Headline will be set from the specified attribute" : "Насловна линија корисничког профила ће се поставити из наведеног атрибута", + "Biography Field" : "Поље биографије", + "User profile Biography will be set from the specified attribute" : "Биографија корисничког профила ће се поставити из наведеног атрибута", + "Birthdate Field" : "Пође рођендана", + "User profile Date of birth will be set from the specified attribute" : "Датум рођења за кориснички профил ће да се постави из наведеног атрибута", + "Pronouns Field" : "Поље заменица", + "User profile Pronouns will be set from the specified attribute" : "Заменице корисничког профила ће се поставити из наведеног атрибута", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Подразумевано се интерно корисничко име креира од UUID атрибута. Тиме се гарантује да се корисничко име јединствено и да карактери не морају да се конвертују. Интерно корисничко име има ограничења да су дозвољени само следећи карактери: [ a-zA-Z0-9_.@- ]. Остали карактери ће или бити замењени ASCII еквивалентима или ће бити прескочени. Ако се деси поклапање са постојећим корисничким именом, додаће се број на крај имена. Интерно корисничко име се користи да идентификује корисника интерно. Такође се користи и као подразумевано име за име корисничку фасцикле, а и део је удаљених адреса, нпр. свих *DAV сервиса. Уз помоћ овог подешавања, може да се промени подразумевано понашање. Оставите га празним за подразумевано понашање. Промене ће се тицати само новомапираних (додатих) LDAP корисника.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Интерно име ће се подразумевано креирати из UUID атрибута. Тако се обезбеђује да је корисничко име јединствено и да нема потребе да се карактери конвертују. Интерно корисничко име је ограничено тако да су дозвољени само следећи карактери: [a-zA-Z0-9_.@-]. Остали карактери ће се заменити својим одговарајућим ASCII карактерима или ће се једноставно изоставити. У случају колизија, дописаће се/увећати број. Интерно корисничко име се користи да се корисник интерно идентификује. То је такође и подразумевано име за коринсиков почетни фолдер. Такође је део удаљених URL адреса, на пример за све DAV сервисе. Овим подешавањем је могуће преиначење подразумеваног понашања. Измене ће ступити на снагу само за ново мапиране (додате) 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." : "Подразумевано, атрибут UUID се аутоматски детектује. Атрибут UUID се користи за сигурну идентификацију LDAP корисника и група. Такође, локално корисничко име ће бити креирано на основу UUID-a, ако није другачије назначено. Можете заобићи поставке и проследити други атрибут по вашем избору. Морате бити сигурни да је изабрани атрибут јединствен и да га корисници и групе могу преносити. Оставите празно за подразумевано понашање. Промене ће имати дејство само на новомапираним (доданим) LDAP корисницима и групама.", @@ -187,6 +231,7 @@ "Username-LDAP User Mapping" : "Username-LDAP мапирање корисника", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Корисничка имена се користи за чување и додељивање метаподатака. Да би се прецизно идентификовали и препознавали кориснике, сваки LDAP корисник ће имати локално корисничко име. Ово захтева мапирање од корисничког имена до LDAP корисника. Креирано корисничко име се мапира у UUID LDAP корисника. Поред тога, DN се кешира да смањи LDAP интеракцију, али се не користи за идентификацију. Ако се DN мења, промене се могу наћи. Локално корисничко име се користи свуда. Чишћење мапирања оставља свуда остатке. Чишћење мапирања није осетљиво на конфигурацију, оно утиче на све LDAP конфигурације! Никада не користит чишћење мапирања у радном окружењу, већ само у тестирању или експерименталној фази.", "Clear Username-LDAP User Mapping" : "Очисти Username-LDAP мапирање корисника", - "Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група" + "Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група", + "Invalid configuration. Please have a look at the logs for further details." : "Неисправна конфигурација. Погледајте дневник за више детаља." },"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/user_ldap/l10n/sr@latin.js b/apps/user_ldap/l10n/sr@latin.js deleted file mode 100644 index 7769a4b6bda..00000000000 --- a/apps/user_ldap/l10n/sr@latin.js +++ /dev/null @@ -1,14 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Server" : "Server", - "Users" : "Korisnici", - "Groups" : "Grupe", - "Help" : "Pomoć", - "Host" : "Računar", - "Port" : "Port", - "Password" : "Lozinka", - "Continue" : "Nastavi", - "Advanced" : "Napredno" -}, -"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/sr@latin.json b/apps/user_ldap/l10n/sr@latin.json deleted file mode 100644 index ad4492827f7..00000000000 --- a/apps/user_ldap/l10n/sr@latin.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "translations": { - "Server" : "Server", - "Users" : "Korisnici", - "Groups" : "Grupe", - "Help" : "Pomoć", - "Host" : "Računar", - "Port" : "Port", - "Password" : "Lozinka", - "Continue" : "Nastavi", - "Advanced" : "Napredno" -},"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/user_ldap/l10n/su.js b/apps/user_ldap/l10n/su.js deleted file mode 100644 index 5494dcae62e..00000000000 --- a/apps/user_ldap/l10n/su.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : [""], - "_%s user found_::_%s users found_" : [""] -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/su.json b/apps/user_ldap/l10n/su.json deleted file mode 100644 index 75f0f056cc4..00000000000 --- a/apps/user_ldap/l10n/su.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : [""], - "_%s user found_::_%s users found_" : [""] -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js index 0e77a245fe8..67024534e36 100644 --- a/apps/user_ldap/l10n/sv.js +++ b/apps/user_ldap/l10n/sv.js @@ -6,11 +6,12 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Ogiltig konfiguration: Anonym bindning är inte tillåten.", "Valid configuration, connection established!" : "Giltig konfiguration, anslutning upprättad!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Giltig konfiguration, men bindning misslyckades. Vänligen kontrollera uppgifter och serverinställningarna.", - "Invalid configuration. Please have a look at the logs for further details." : "Ogiltig konfiguration. Vänligen undersök loggar för mer detaljer.", - "No action specified" : "Ingen åtgärd har angetts", + "Invalid configuration: %s" : "Ogiltig konfiguration: %s", + "No action specified" : "Ingen funktion har angetts", "No configuration specified" : "Ingen konfiguration har angetts", "No data specified" : "Inga data har angetts", - " Could not set configuration %s" : "Kunde inte sätta inställning %s", + "Invalid data specified" : "Ogiltig data har angetts", + "Could not set configuration %1$s to %2$s" : "Kunde inte ställa in konfigurationen %1$s till %2$s", "Action does not exist" : "Åtgärd finns inte", "Renewing …" : "Förnyar ...", "Very weak password" : "Väldigt svagt lösenord", @@ -27,20 +28,20 @@ OC.L10N.register( "Select object classes" : "Välj objekt-klasser", "Please check the credentials, they seem to be wrong." : "Vänligen kontrollera dina uppgifter, de verkar vara fel.", "Please specify the port, it could not be auto-detected." : "Vänligen ange porten, den kunde inte upptäckas automatiskt.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Grundläggande DN kunde inte upptäckas automatiskt, vänligen dubbelkolla dina uppgifter, värd och port.", - "Could not detect Base DN, please enter it manually." : "Kunde inte upptäcka Base DN, vänligen ange det manuellt.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Grundläggande DN kunde inte upptäckas automatiskt, dubbelkolla dina uppgifter, värd och port.", + "Could not detect Base DN, please enter it manually." : "Kunde inte upptäcka Base DN, ange det manuellt.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "Inget objekt funnet i den givna Base DN. Vänligen granska.", "More than 1,000 directory entries available." : "Mer än 1,000 katalogposter tillgängliga.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} post tillgänglig inom den medföljande Base DN","{objectsFound} poster tillgängliga inom den medföljande Base DN"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ett fel uppstod. Vänligen kontrollera Base DN, och även anslutningsinställningar och referenser.", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ett fel uppstod. Kontrollera Base DN, och även anslutningsinställningar och referenser.", "Do you really want to delete the current Server Configuration?" : "Vill du verkligen ta bort den nuvarande serverinställningen?", "Confirm Deletion" : "Bekräfta radering", "Mappings cleared successfully!" : "Rensning av mappningar lyckades!", "Error while clearing the mappings." : "Fel uppstod under rensning av mappningar", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym bindning inte tillåten. Vänligen ange en användar-DN och lösenord.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym bindning inte tillåten. Ange en användar-DN och lösenord.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP Operations error. Anonym bindning kanske inte längre tillåts.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Sparandet misslyckades. Vänligen kontrollera att databasen är verksam. Uppdatera innan du fortsätter.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Sparandet misslyckades. Kontrollera att databasen är verksam. Uppdatera innan du fortsätter.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Byte av läge kommer aktivera automatiska LDAP förfrågningar. Beroende på din LDAP storlek kan de ta ett tag. Vill du fortfarande ändra läge?", "Mode switch" : "Lägesändring", "Select attributes" : "Välj attribut", @@ -49,19 +50,36 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Överväg att specificera din sökning eftersom den resulterade i många användare och bara den första kommer att kunna logga in.", "An unspecified error occurred. Please check log and settings." : "Ett ospecificerat fel inträffade. Vänligen kontrollera loggen och inställningarna.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Sökfiltret är ogiltigt, troligen på grund av syntaxproblem som ojämnt antal öppna och slutna klamrar. Vänligen granska.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Vänligen granska värd, port och inloggningsuppgifter.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : " \"%uid\"-platshållaren saknas. Den kommer bli ersatt med inloggningsnamn när LDAP / AD efterfrågas.", - "Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Grupplådan var inaktiverat eftersom LDAP/AD-servern inte stödjer memberOf.", - "Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Ett anslutningsfel till LDAP/AD uppstod. Kontrollera server, port och inloggningsuppgifter.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"%uid\"-platshållaren saknas. Den kommer att ersättas med inloggningsnamn när LDAP/AD efterfrågas.", + "Please provide a login name to test against" : "Ange ett inloggningsnamn att försöka ansluta med", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Grupprutan inaktiverades eftersom LDAP/AD-servern inte stöder memberOf.", + "Password change rejected. Hint: %s" : "Lösenordsändring avvisad. Anledning/tips: %s", + "Mandatory field \"%s\" left empty" : "Obligatoriskt fält \"%s\" lämnad tom", + "A password is given, but not an LDAP agent" : "Ett lösenord har angetts, men ingen LDAP-agent", + "No password is given for the user agent" : "Inget lösenord har angetts för användaragenten", + "No LDAP base DN was given" : "Ingen LDAP-base DN har angetts", + "User base DN is not a subnode of global base DN" : "Användarens base DN är inte en undernod till den globala base DN", + "Group base DN is not a subnode of global base DN" : "Gruppens base DN är inte en undernod till den globala base DN", + "Login filter does not contain %s placeholder." : "Inloggningsfiltret innehåller inte %s platshållare.", "Please login with the new password" : "Vänligen logga in med det nya lösenordet", "LDAP User backend" : "LDAP användarbackend", "Your password will expire tomorrow." : "Ditt lösenord kommer att gå ut imorgon.", "Your password will expire today." : "Ditt lösenord kommer att gå ut idag.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ditt lösenord kommer gå ut inom %n dag.","Ditt lösenord kommer gå ut inom %n dagar."], - "LDAP / AD integration" : "LDAP / AD integration", - "_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"], - "_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"], + "LDAP/AD integration" : "LDAP/AD-integration", + "LDAP Connection" : "LDAP-anslutning", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Bindning misslyckades för denna LDAP-konfiguration: %s","Bindning misslyckades för %n LDAP-konfigurationer: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Sökning misslyckades för denna LDAP-konfiguration: %s","Sökning misslyckades för %n LDAP-konfigurationer: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Det finns en inaktiv LDAP-konfiguration: %s","Det finns %n inaktiva LDAP-konfigurationer: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Bindning och sökning fungerar på den konfigurerade LDAP-anslutningen (%s)","Bindning och sökning fungerar på alla %n konfigurerade LDAP-anslutningar (%s)"], + "Invalid LDAP UUIDs" : "Ogiltiga LDAP UUIDs", + "None found" : "Ingen hittades", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Ogiltiga UUID för LDAP-användare eller -grupper har hittats. Granska dina \"Åsidosätt UUID-detektering\"-inställningar i expertdelen av LDAP-konfigurationen och använd \"occ ldap:update-uuid\" för att uppdatera dem.", + "_%n group found_::_%n groups found_" : ["%n grupp hittades","%n grupper hittades"], + "> 1000 groups found" : "> 1000 grupper hittades", + "> 1000 users found" : "> 1000 användare hittades", + "_%n user found_::_%n users found_" : ["%n användare hittades","%n användare hittades"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kunde inte upptäcka ditt visningsnamnsattribut. Vänligen specificera det själv i avancerade inställningar för LDAP.", "Could not find the desired feature" : "Det gick inte hitta den önskade funktionen", "Invalid Host" : "Felaktig värd", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtret specificerar vilka LDAD-grupper som ska ha åtkomst till %s instans", "Verify settings and count the groups" : "Verifiera inställningar och räkna grupperna", "When logging in, %s will find the user based on the following attributes:" : "Vid inloggning, %s kan hitta användaren baserat på följande attribut:", - "LDAP / AD Username:" : "LDAP / AD Användarnamn:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillåter inloggning mot LDAP / AD-användarnamn, vilket är antingen \"uid\" eller \"sAMAccountName\" och kommer att upptäckas.", - "LDAP / AD Email Address:" : "LDAP / AD E-postadress:", + "LDAP/AD Username:" : "LDAP/AD Användarnamn:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillåter inloggning med LDAP/AD-användarnamn, som antingen är \"uid\" eller \"sAMAccountName\" vilket kommer att upptäckas.", + "LDAP/AD Email Address:" : "LDAP/AD E-postadress:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Tillåter inloggning mot ett e-post-attribut. \"mail\" och \"mailPrimaryAddress\" tillåtna.", "Other Attributes:" : "Övriga attribut:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definierar filtret som ska appliceras vid inloggningsförsök. \"%%uid\" ersätter användarnamnet i inloggningshändelsen. Exempel: \"uid=%%uid\"", "Test Loginname" : "Testa inloggningsnamn", + "Attempts to receive a DN for the given loginname and the current login filter" : "Försöker att få ett DN för det angivna inloggningsnamnet och det aktuella inloggningsfiltret", "Verify settings" : "Verifiera inställningar", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Lägg till en ny konfiguration", @@ -109,7 +128,7 @@ OC.L10N.register( "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undviker automatiska LDAP-förfrågningar. Bättre för större installationer, men kräver en del LDAP-kunskap.", "Manually enter LDAP filters (recommended for large directories)" : "Ange LDAP-filter manuellt (rekommenderat för stora kataloger)", "Listing and searching for users is constrained by these criteria:" : "Listning och sökning av användare är begränsade efter dessa 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 mest vanliga objektklasserna för användare är organizationalPerson, person, user och inetOrgPerson. Om du inte är säker vilken objektklass som ska väljas, vänligen hör med din mappadministratör.", + "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 mest vanliga objektklasserna för användare är organizationalPerson, person, user och inetOrgPerson. Om du inte är säker vilken objektklass som ska väljas, hör med din mappadministratör.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtret specificerar vilka LDAP-användare som skall ha åtkomst till %s instans", "Verify settings and count users" : "Verifiera inställningar och räkna användare", "Saving" : "Sparar", @@ -129,7 +148,7 @@ OC.L10N.register( "Groups" : "Grupper", "Expert" : "Expert", "Advanced" : "Avancerad", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varning:</b> PHP LDAP-modulen är inte installerad, backend kommer inte att fungera. Vänligen be din systemadministratör att installera den.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varning:</b> PHP LDAP-modulen är inte installerad, backend kommer inte att fungera. Be din systemadministratör att installera den.", "Connection Settings" : "Uppkopplingsinställningar", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Ifall denna är avbockad så kommer konfigurationen att skippas.", @@ -146,11 +165,13 @@ OC.L10N.register( "User Display Name Field" : "Attribut för användarnamn", "The LDAP attribute to use to generate the user's display name." : "LDAP-attributet som ska användas för att generera användarens visningsnamn.", "2nd User Display Name Field" : "2:a Visningsnamns Fält", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Frivilligt. Ett LDAP-attribut att läggas till visningsnamnet i parentes. Resulterar i t.ex. »John Doe (john.doe@example.org)«.", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Frivilligt. Ett LDAP-attribut att läggas till visningsnamnet i parentes. Resulterar i t.ex. \"John Doe (john.doe@example.org)\".", "Base User Tree" : "Bas för användare i katalogtjänst", "One User Base DN per line" : "En användarstart-DN per rad", "User Search Attributes" : "Användarsökningsattribut", "Optional; one attribute per line" : "Valfritt; ett attribut per rad", + "Disable users missing from LDAP" : "Inaktivera användare som saknas via LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "När aktiverad kommer användare som importerats från LDAP som sedan saknas att inaktiveras", "Group Display Name Field" : "Attribut för gruppnamn", "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributet som ska användas för att generera gruppens visningsnamn.", "Base Group Tree" : "Bas för grupper i katalogtjänst", @@ -179,8 +200,31 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP-/AD-attribut.", "\"$home\" Placeholder Field" : "\"$home\" Platshållare-fält", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home i en extern lagringskonfiguration kommer ersättas med värdet av det angivna attributet", + "User Profile Attributes" : "Användarprofilattribut", + "Phone Field" : "Telefon", + "User profile Phone will be set from the specified attribute" : "Telefon i användarprofilen kommer att ställas in från det angivna attributet", + "Website Field" : "Webbplats", + "User profile Website will be set from the specified attribute" : "Webbplats i användarprofilen kommer att ställas in från det angivna attributet", + "Address Field" : "Adress", + "User profile Address will be set from the specified attribute" : "Adress i användarprofilen kommer att ställas in från det angivna attributet", + "Twitter Field" : "Twitter", + "User profile Twitter will be set from the specified attribute" : "Twitter i användarprofilen kommer att ställas in från det angivna attributet", + "Fediverse Field" : "Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Fediverse i användarprofilen kommer att ställas in från det angivna attributet", + "Organisation Field" : "Organisation", + "User profile Organisation will be set from the specified attribute" : "Organisation i användarprofilen kommer att ställas in från det angivna attributet", + "Role Field" : "Roll", + "User profile Role will be set from the specified attribute" : "Roll i användarprofilen kommer att ställas in från det angivna attributet", + "Headline Field" : "Rubrik", + "User profile Headline will be set from the specified attribute" : "Rubrik i användarprofilen kommer att ställas in från det angivna attributet", + "Biography Field" : "Biografi", + "User profile Biography will be set from the specified attribute" : "Biografi i användarprofilen kommer att ställas in från det angivna attributet", + "Birthdate Field" : "Fält för födelsedatum", + "User profile Date of birth will be set from the specified attribute" : "Födelsedatum i användarprofilen kommer att ställas in från det angivna attributet", + "Pronouns Field" : "Fält för pronomen", + "User profile Pronouns will be set from the specified attribute" : "Pronomen i användarprofilen kommer att ställas in från det angivna attributet", "Internal Username" : "Internt användarnamn", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som standard kommer de interna användarnamnen skapas från UUID-attributen. Det säkerställer att användarnamnet är unikt och att tecken inte behöver konverteras. Det interna användarnamnet har begränsningen att bara dessa tecken tillåts: [ a-zA-Z0-9_.@- ]. Andra tecken kommer att ersättas med deras korresponderande ASCII-kod eller utelämnas. Vid kollisioner kommer ett nummer läggas till/ökas. Det interna användarnamnet används för att identifiera en användare internt. Det är också standardnamnet för användarens hemmapp. Det är också en del av externa webbadresser, till exempel för alla *DAV-tjänster. Med denna inställning, kan standardbeteendet bli överskrivet. Lämna det tomt för standardbeteende. Ändringar kommer att bara gälla för nya mappningar (tillagda) LDAP-användare.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Som standard kommer de interna användarnamnen skapas från UUID-attributen. Det säkerställer att användarnamnet är unikt och att tecken inte behöver konverteras. Det interna användarnamnet har begränsningen att bara dessa tecken tillåts: [ a-zA-Z0-9_.@- ]. Andra tecken kommer att ersättas med deras korresponderande ASCII-kod eller utelämnas. Vid kollisioner kommer ett nummer läggas till/ökas. Det interna användarnamnet används för att identifiera en användare internt. Det är också standardnamnet för användarens hemmapp. Det är också en del av externa webbadresser, till exempel för alla *DAV-tjänster. Med denna inställning, kan standardbeteendet bli överskrivet. Lämna det tomt för standardbeteende. Ändringar kommer att bara gälla för nya mappningar (tillagda) LDAP-användare. Lämna tomt för standardbeteende.", "Internal Username Attribute:" : "Internt användarnamnsattribut:", "Override UUID detection" : "Åsidosätt UUID-detektion", "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." : "Som standard upptäcker ownCloud automatiskt UUID-attributet. Det UUID-attributet används för att utan tvivel identifiera LDAP-användare och grupper. Dessutom kommer interna användarnamn skapas baserat på detta UUID, om inte annat anges ovan. Du kan åsidosätta inställningen och passera ett attribut som du själv väljer. Du måste se till att attributet som du väljer kan hämtas för både användare och grupper och att det är unikt. Lämna det tomt för standard beteende. Förändringar kommer endast att påverka nyligen mappade (tillagda) LDAP-användare och grupper.", @@ -189,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Användarnamn-LDAP användarmappning", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Användarnamn används för att lagra och tilldela metadata. För att exakt identifiera användare har varje LDAP-användare ett internt användarnamn. Detta kräver en mappning från användarnamn till LDAP-användare. Det skapade användarnamnet är mappat till UUID för LDAP-användaren. Dessutom cachas DN för att minska LDAP-interaktion, men den används inte för identifiering. Om DN ändras kommer ändringarna att hittas. Det interna användarnamnet används på nytt. Att rensa mappningarna kommer att ha rester överallt. Att rensa mappningarna är inte konfigurationskänsligt, det påverkar alla LDAP-konfigurationer! Rensa aldrig mappningarna i en produktionsmiljö, bara i en test- eller experimentfas.", "Clear Username-LDAP User Mapping" : "Rensa användarnamn-LDAP användarmappning", - "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning" + "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning", + "Invalid configuration. Please have a look at the logs for further details." : "Ogiltig konfiguration. Vänligen undersök loggar för mer detaljer." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json index adfa0ef1c50..d8f95dc5c97 100644 --- a/apps/user_ldap/l10n/sv.json +++ b/apps/user_ldap/l10n/sv.json @@ -4,11 +4,12 @@ "Invalid configuration: Anonymous binding is not allowed." : "Ogiltig konfiguration: Anonym bindning är inte tillåten.", "Valid configuration, connection established!" : "Giltig konfiguration, anslutning upprättad!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Giltig konfiguration, men bindning misslyckades. Vänligen kontrollera uppgifter och serverinställningarna.", - "Invalid configuration. Please have a look at the logs for further details." : "Ogiltig konfiguration. Vänligen undersök loggar för mer detaljer.", - "No action specified" : "Ingen åtgärd har angetts", + "Invalid configuration: %s" : "Ogiltig konfiguration: %s", + "No action specified" : "Ingen funktion har angetts", "No configuration specified" : "Ingen konfiguration har angetts", "No data specified" : "Inga data har angetts", - " Could not set configuration %s" : "Kunde inte sätta inställning %s", + "Invalid data specified" : "Ogiltig data har angetts", + "Could not set configuration %1$s to %2$s" : "Kunde inte ställa in konfigurationen %1$s till %2$s", "Action does not exist" : "Åtgärd finns inte", "Renewing …" : "Förnyar ...", "Very weak password" : "Väldigt svagt lösenord", @@ -25,20 +26,20 @@ "Select object classes" : "Välj objekt-klasser", "Please check the credentials, they seem to be wrong." : "Vänligen kontrollera dina uppgifter, de verkar vara fel.", "Please specify the port, it could not be auto-detected." : "Vänligen ange porten, den kunde inte upptäckas automatiskt.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Grundläggande DN kunde inte upptäckas automatiskt, vänligen dubbelkolla dina uppgifter, värd och port.", - "Could not detect Base DN, please enter it manually." : "Kunde inte upptäcka Base DN, vänligen ange det manuellt.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Grundläggande DN kunde inte upptäckas automatiskt, dubbelkolla dina uppgifter, värd och port.", + "Could not detect Base DN, please enter it manually." : "Kunde inte upptäcka Base DN, ange det manuellt.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "Inget objekt funnet i den givna Base DN. Vänligen granska.", "More than 1,000 directory entries available." : "Mer än 1,000 katalogposter tillgängliga.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} post tillgänglig inom den medföljande Base DN","{objectsFound} poster tillgängliga inom den medföljande Base DN"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ett fel uppstod. Vänligen kontrollera Base DN, och även anslutningsinställningar och referenser.", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ett fel uppstod. Kontrollera Base DN, och även anslutningsinställningar och referenser.", "Do you really want to delete the current Server Configuration?" : "Vill du verkligen ta bort den nuvarande serverinställningen?", "Confirm Deletion" : "Bekräfta radering", "Mappings cleared successfully!" : "Rensning av mappningar lyckades!", "Error while clearing the mappings." : "Fel uppstod under rensning av mappningar", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym bindning inte tillåten. Vänligen ange en användar-DN och lösenord.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym bindning inte tillåten. Ange en användar-DN och lösenord.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP Operations error. Anonym bindning kanske inte längre tillåts.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Sparandet misslyckades. Vänligen kontrollera att databasen är verksam. Uppdatera innan du fortsätter.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Sparandet misslyckades. Kontrollera att databasen är verksam. Uppdatera innan du fortsätter.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Byte av läge kommer aktivera automatiska LDAP förfrågningar. Beroende på din LDAP storlek kan de ta ett tag. Vill du fortfarande ändra läge?", "Mode switch" : "Lägesändring", "Select attributes" : "Välj attribut", @@ -47,19 +48,36 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Överväg att specificera din sökning eftersom den resulterade i många användare och bara den första kommer att kunna logga in.", "An unspecified error occurred. Please check log and settings." : "Ett ospecificerat fel inträffade. Vänligen kontrollera loggen och inställningarna.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Sökfiltret är ogiltigt, troligen på grund av syntaxproblem som ojämnt antal öppna och slutna klamrar. Vänligen granska.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Vänligen granska värd, port och inloggningsuppgifter.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : " \"%uid\"-platshållaren saknas. Den kommer bli ersatt med inloggningsnamn när LDAP / AD efterfrågas.", - "Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Grupplådan var inaktiverat eftersom LDAP/AD-servern inte stödjer memberOf.", - "Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Ett anslutningsfel till LDAP/AD uppstod. Kontrollera server, port och inloggningsuppgifter.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"%uid\"-platshållaren saknas. Den kommer att ersättas med inloggningsnamn när LDAP/AD efterfrågas.", + "Please provide a login name to test against" : "Ange ett inloggningsnamn att försöka ansluta med", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Grupprutan inaktiverades eftersom LDAP/AD-servern inte stöder memberOf.", + "Password change rejected. Hint: %s" : "Lösenordsändring avvisad. Anledning/tips: %s", + "Mandatory field \"%s\" left empty" : "Obligatoriskt fält \"%s\" lämnad tom", + "A password is given, but not an LDAP agent" : "Ett lösenord har angetts, men ingen LDAP-agent", + "No password is given for the user agent" : "Inget lösenord har angetts för användaragenten", + "No LDAP base DN was given" : "Ingen LDAP-base DN har angetts", + "User base DN is not a subnode of global base DN" : "Användarens base DN är inte en undernod till den globala base DN", + "Group base DN is not a subnode of global base DN" : "Gruppens base DN är inte en undernod till den globala base DN", + "Login filter does not contain %s placeholder." : "Inloggningsfiltret innehåller inte %s platshållare.", "Please login with the new password" : "Vänligen logga in med det nya lösenordet", "LDAP User backend" : "LDAP användarbackend", "Your password will expire tomorrow." : "Ditt lösenord kommer att gå ut imorgon.", "Your password will expire today." : "Ditt lösenord kommer att gå ut idag.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ditt lösenord kommer gå ut inom %n dag.","Ditt lösenord kommer gå ut inom %n dagar."], - "LDAP / AD integration" : "LDAP / AD integration", - "_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"], - "_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"], + "LDAP/AD integration" : "LDAP/AD-integration", + "LDAP Connection" : "LDAP-anslutning", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Bindning misslyckades för denna LDAP-konfiguration: %s","Bindning misslyckades för %n LDAP-konfigurationer: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Sökning misslyckades för denna LDAP-konfiguration: %s","Sökning misslyckades för %n LDAP-konfigurationer: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Det finns en inaktiv LDAP-konfiguration: %s","Det finns %n inaktiva LDAP-konfigurationer: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Bindning och sökning fungerar på den konfigurerade LDAP-anslutningen (%s)","Bindning och sökning fungerar på alla %n konfigurerade LDAP-anslutningar (%s)"], + "Invalid LDAP UUIDs" : "Ogiltiga LDAP UUIDs", + "None found" : "Ingen hittades", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Ogiltiga UUID för LDAP-användare eller -grupper har hittats. Granska dina \"Åsidosätt UUID-detektering\"-inställningar i expertdelen av LDAP-konfigurationen och använd \"occ ldap:update-uuid\" för att uppdatera dem.", + "_%n group found_::_%n groups found_" : ["%n grupp hittades","%n grupper hittades"], + "> 1000 groups found" : "> 1000 grupper hittades", + "> 1000 users found" : "> 1000 användare hittades", + "_%n user found_::_%n users found_" : ["%n användare hittades","%n användare hittades"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Kunde inte upptäcka ditt visningsnamnsattribut. Vänligen specificera det själv i avancerade inställningar för LDAP.", "Could not find the desired feature" : "Det gick inte hitta den önskade funktionen", "Invalid Host" : "Felaktig värd", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtret specificerar vilka LDAD-grupper som ska ha åtkomst till %s instans", "Verify settings and count the groups" : "Verifiera inställningar och räkna grupperna", "When logging in, %s will find the user based on the following attributes:" : "Vid inloggning, %s kan hitta användaren baserat på följande attribut:", - "LDAP / AD Username:" : "LDAP / AD Användarnamn:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillåter inloggning mot LDAP / AD-användarnamn, vilket är antingen \"uid\" eller \"sAMAccountName\" och kommer att upptäckas.", - "LDAP / AD Email Address:" : "LDAP / AD E-postadress:", + "LDAP/AD Username:" : "LDAP/AD Användarnamn:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Tillåter inloggning med LDAP/AD-användarnamn, som antingen är \"uid\" eller \"sAMAccountName\" vilket kommer att upptäckas.", + "LDAP/AD Email Address:" : "LDAP/AD E-postadress:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Tillåter inloggning mot ett e-post-attribut. \"mail\" och \"mailPrimaryAddress\" tillåtna.", "Other Attributes:" : "Övriga attribut:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Definierar filtret som ska appliceras vid inloggningsförsök. \"%%uid\" ersätter användarnamnet i inloggningshändelsen. Exempel: \"uid=%%uid\"", "Test Loginname" : "Testa inloggningsnamn", + "Attempts to receive a DN for the given loginname and the current login filter" : "Försöker att få ett DN för det angivna inloggningsnamnet och det aktuella inloggningsfiltret", "Verify settings" : "Verifiera inställningar", "%s. Server:" : "%s. Server:", "Add a new configuration" : "Lägg till en ny konfiguration", @@ -107,7 +126,7 @@ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undviker automatiska LDAP-förfrågningar. Bättre för större installationer, men kräver en del LDAP-kunskap.", "Manually enter LDAP filters (recommended for large directories)" : "Ange LDAP-filter manuellt (rekommenderat för stora kataloger)", "Listing and searching for users is constrained by these criteria:" : "Listning och sökning av användare är begränsade efter dessa 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 mest vanliga objektklasserna för användare är organizationalPerson, person, user och inetOrgPerson. Om du inte är säker vilken objektklass som ska väljas, vänligen hör med din mappadministratör.", + "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 mest vanliga objektklasserna för användare är organizationalPerson, person, user och inetOrgPerson. Om du inte är säker vilken objektklass som ska väljas, hör med din mappadministratör.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtret specificerar vilka LDAP-användare som skall ha åtkomst till %s instans", "Verify settings and count users" : "Verifiera inställningar och räkna användare", "Saving" : "Sparar", @@ -127,7 +146,7 @@ "Groups" : "Grupper", "Expert" : "Expert", "Advanced" : "Avancerad", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varning:</b> PHP LDAP-modulen är inte installerad, backend kommer inte att fungera. Vänligen be din systemadministratör att installera den.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varning:</b> PHP LDAP-modulen är inte installerad, backend kommer inte att fungera. Be din systemadministratör att installera den.", "Connection Settings" : "Uppkopplingsinställningar", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Ifall denna är avbockad så kommer konfigurationen att skippas.", @@ -144,11 +163,13 @@ "User Display Name Field" : "Attribut för användarnamn", "The LDAP attribute to use to generate the user's display name." : "LDAP-attributet som ska användas för att generera användarens visningsnamn.", "2nd User Display Name Field" : "2:a Visningsnamns Fält", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Frivilligt. Ett LDAP-attribut att läggas till visningsnamnet i parentes. Resulterar i t.ex. »John Doe (john.doe@example.org)«.", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Frivilligt. Ett LDAP-attribut att läggas till visningsnamnet i parentes. Resulterar i t.ex. \"John Doe (john.doe@example.org)\".", "Base User Tree" : "Bas för användare i katalogtjänst", "One User Base DN per line" : "En användarstart-DN per rad", "User Search Attributes" : "Användarsökningsattribut", "Optional; one attribute per line" : "Valfritt; ett attribut per rad", + "Disable users missing from LDAP" : "Inaktivera användare som saknas via LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "När aktiverad kommer användare som importerats från LDAP som sedan saknas att inaktiveras", "Group Display Name Field" : "Attribut för gruppnamn", "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributet som ska användas för att generera gruppens visningsnamn.", "Base Group Tree" : "Bas för grupper i katalogtjänst", @@ -177,8 +198,31 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP-/AD-attribut.", "\"$home\" Placeholder Field" : "\"$home\" Platshållare-fält", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home i en extern lagringskonfiguration kommer ersättas med värdet av det angivna attributet", + "User Profile Attributes" : "Användarprofilattribut", + "Phone Field" : "Telefon", + "User profile Phone will be set from the specified attribute" : "Telefon i användarprofilen kommer att ställas in från det angivna attributet", + "Website Field" : "Webbplats", + "User profile Website will be set from the specified attribute" : "Webbplats i användarprofilen kommer att ställas in från det angivna attributet", + "Address Field" : "Adress", + "User profile Address will be set from the specified attribute" : "Adress i användarprofilen kommer att ställas in från det angivna attributet", + "Twitter Field" : "Twitter", + "User profile Twitter will be set from the specified attribute" : "Twitter i användarprofilen kommer att ställas in från det angivna attributet", + "Fediverse Field" : "Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Fediverse i användarprofilen kommer att ställas in från det angivna attributet", + "Organisation Field" : "Organisation", + "User profile Organisation will be set from the specified attribute" : "Organisation i användarprofilen kommer att ställas in från det angivna attributet", + "Role Field" : "Roll", + "User profile Role will be set from the specified attribute" : "Roll i användarprofilen kommer att ställas in från det angivna attributet", + "Headline Field" : "Rubrik", + "User profile Headline will be set from the specified attribute" : "Rubrik i användarprofilen kommer att ställas in från det angivna attributet", + "Biography Field" : "Biografi", + "User profile Biography will be set from the specified attribute" : "Biografi i användarprofilen kommer att ställas in från det angivna attributet", + "Birthdate Field" : "Fält för födelsedatum", + "User profile Date of birth will be set from the specified attribute" : "Födelsedatum i användarprofilen kommer att ställas in från det angivna attributet", + "Pronouns Field" : "Fält för pronomen", + "User profile Pronouns will be set from the specified attribute" : "Pronomen i användarprofilen kommer att ställas in från det angivna attributet", "Internal Username" : "Internt användarnamn", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som standard kommer de interna användarnamnen skapas från UUID-attributen. Det säkerställer att användarnamnet är unikt och att tecken inte behöver konverteras. Det interna användarnamnet har begränsningen att bara dessa tecken tillåts: [ a-zA-Z0-9_.@- ]. Andra tecken kommer att ersättas med deras korresponderande ASCII-kod eller utelämnas. Vid kollisioner kommer ett nummer läggas till/ökas. Det interna användarnamnet används för att identifiera en användare internt. Det är också standardnamnet för användarens hemmapp. Det är också en del av externa webbadresser, till exempel för alla *DAV-tjänster. Med denna inställning, kan standardbeteendet bli överskrivet. Lämna det tomt för standardbeteende. Ändringar kommer att bara gälla för nya mappningar (tillagda) LDAP-användare.", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Som standard kommer de interna användarnamnen skapas från UUID-attributen. Det säkerställer att användarnamnet är unikt och att tecken inte behöver konverteras. Det interna användarnamnet har begränsningen att bara dessa tecken tillåts: [ a-zA-Z0-9_.@- ]. Andra tecken kommer att ersättas med deras korresponderande ASCII-kod eller utelämnas. Vid kollisioner kommer ett nummer läggas till/ökas. Det interna användarnamnet används för att identifiera en användare internt. Det är också standardnamnet för användarens hemmapp. Det är också en del av externa webbadresser, till exempel för alla *DAV-tjänster. Med denna inställning, kan standardbeteendet bli överskrivet. Lämna det tomt för standardbeteende. Ändringar kommer att bara gälla för nya mappningar (tillagda) LDAP-användare. Lämna tomt för standardbeteende.", "Internal Username Attribute:" : "Internt användarnamnsattribut:", "Override UUID detection" : "Åsidosätt UUID-detektion", "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." : "Som standard upptäcker ownCloud automatiskt UUID-attributet. Det UUID-attributet används för att utan tvivel identifiera LDAP-användare och grupper. Dessutom kommer interna användarnamn skapas baserat på detta UUID, om inte annat anges ovan. Du kan åsidosätta inställningen och passera ett attribut som du själv väljer. Du måste se till att attributet som du väljer kan hämtas för både användare och grupper och att det är unikt. Lämna det tomt för standard beteende. Förändringar kommer endast att påverka nyligen mappade (tillagda) LDAP-användare och grupper.", @@ -187,6 +231,7 @@ "Username-LDAP User Mapping" : "Användarnamn-LDAP användarmappning", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Användarnamn används för att lagra och tilldela metadata. För att exakt identifiera användare har varje LDAP-användare ett internt användarnamn. Detta kräver en mappning från användarnamn till LDAP-användare. Det skapade användarnamnet är mappat till UUID för LDAP-användaren. Dessutom cachas DN för att minska LDAP-interaktion, men den används inte för identifiering. Om DN ändras kommer ändringarna att hittas. Det interna användarnamnet används på nytt. Att rensa mappningarna kommer att ha rester överallt. Att rensa mappningarna är inte konfigurationskänsligt, det påverkar alla LDAP-konfigurationer! Rensa aldrig mappningarna i en produktionsmiljö, bara i en test- eller experimentfas.", "Clear Username-LDAP User Mapping" : "Rensa användarnamn-LDAP användarmappning", - "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning" + "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning", + "Invalid configuration. Please have a look at the logs for further details." : "Ogiltig konfiguration. Vänligen undersök loggar för mer detaljer." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/sw_KE.js b/apps/user_ldap/l10n/sw_KE.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/sw_KE.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/sw_KE.json b/apps/user_ldap/l10n/sw_KE.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/sw_KE.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ta_IN.js b/apps/user_ldap/l10n/ta_IN.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/ta_IN.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ta_IN.json b/apps/user_ldap/l10n/ta_IN.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/ta_IN.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ta_LK.js b/apps/user_ldap/l10n/ta_LK.js deleted file mode 100644 index 51b6fd44fe0..00000000000 --- a/apps/user_ldap/l10n/ta_LK.js +++ /dev/null @@ -1,25 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "பயனாளர்", - "Groups" : "குழுக்கள்", - "Help" : "உதவி", - "Host" : "ஓம்புனர்", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "நீங்கள் SSL சேவையை தவிர உடன்படு வரைமுறையை தவிர்க்க முடியும். பிறகு ldaps:.// உடன் ஆரம்பிக்கவும்", - "Port" : "துறை ", - "User DN" : "பயனாளர் DN", - "Password" : "கடவுச்சொல்", - "You can specify Base DN for users and groups in the Advanced tab" : "நீங்கள் பயனாளர்களுக்கும் மேன்மை தத்தலில் உள்ள குழுவிற்கும் தள DN ஐ குறிப்பிடலாம் ", - "Back" : "பின்னுக்கு", - "Advanced" : "உயர்ந்த", - "Turn off SSL certificate validation." : "SSL சான்றிதழின் செல்லுபடியை நிறுத்திவிடவும்", - "in seconds. A change empties the cache." : "செக்கன்களில். ஒரு மாற்றம் இடைமாற்றுநினைவகத்தை வெற்றிடமாக்கும்.", - "User Display Name Field" : "பயனாளர் காட்சிப்பெயர் புலம்", - "Base User Tree" : "தள பயனாளர் மரம்", - "Group Display Name Field" : "குழுவின் காட்சி பெயர் புலம் ", - "Base Group Tree" : "தள குழு மரம்", - "Group-Member association" : "குழு உறுப்பினர் சங்கம்", - "in bytes" : "bytes களில் ", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "பயனாளர் பெயரிற்கு வெற்றிடமாக விடவும் (பொது இருப்பு). இல்லாவிடின் LDAP/AD பண்புக்கூறை குறிப்பிடவும்." -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ta_LK.json b/apps/user_ldap/l10n/ta_LK.json deleted file mode 100644 index 496dbcc6a31..00000000000 --- a/apps/user_ldap/l10n/ta_LK.json +++ /dev/null @@ -1,23 +0,0 @@ -{ "translations": { - "Users" : "பயனாளர்", - "Groups" : "குழுக்கள்", - "Help" : "உதவி", - "Host" : "ஓம்புனர்", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "நீங்கள் SSL சேவையை தவிர உடன்படு வரைமுறையை தவிர்க்க முடியும். பிறகு ldaps:.// உடன் ஆரம்பிக்கவும்", - "Port" : "துறை ", - "User DN" : "பயனாளர் DN", - "Password" : "கடவுச்சொல்", - "You can specify Base DN for users and groups in the Advanced tab" : "நீங்கள் பயனாளர்களுக்கும் மேன்மை தத்தலில் உள்ள குழுவிற்கும் தள DN ஐ குறிப்பிடலாம் ", - "Back" : "பின்னுக்கு", - "Advanced" : "உயர்ந்த", - "Turn off SSL certificate validation." : "SSL சான்றிதழின் செல்லுபடியை நிறுத்திவிடவும்", - "in seconds. A change empties the cache." : "செக்கன்களில். ஒரு மாற்றம் இடைமாற்றுநினைவகத்தை வெற்றிடமாக்கும்.", - "User Display Name Field" : "பயனாளர் காட்சிப்பெயர் புலம்", - "Base User Tree" : "தள பயனாளர் மரம்", - "Group Display Name Field" : "குழுவின் காட்சி பெயர் புலம் ", - "Base Group Tree" : "தள குழு மரம்", - "Group-Member association" : "குழு உறுப்பினர் சங்கம்", - "in bytes" : "bytes களில் ", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "பயனாளர் பெயரிற்கு வெற்றிடமாக விடவும் (பொது இருப்பு). இல்லாவிடின் LDAP/AD பண்புக்கூறை குறிப்பிடவும்." -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/te.js b/apps/user_ldap/l10n/te.js deleted file mode 100644 index 7be587b12af..00000000000 --- a/apps/user_ldap/l10n/te.js +++ /dev/null @@ -1,10 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "వాడుకరులు", - "Help" : "సహాయం", - "Password" : "సంకేతపదం", - "Continue" : "కొనసాగించు", - "Advanced" : "ఉన్నతం" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/te.json b/apps/user_ldap/l10n/te.json deleted file mode 100644 index 89d2f4d7337..00000000000 --- a/apps/user_ldap/l10n/te.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "translations": { - "Users" : "వాడుకరులు", - "Help" : "సహాయం", - "Password" : "సంకేతపదం", - "Continue" : "కొనసాగించు", - "Advanced" : "ఉన్నతం" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/tg_TJ.js b/apps/user_ldap/l10n/tg_TJ.js deleted file mode 100644 index 37042a4f412..00000000000 --- a/apps/user_ldap/l10n/tg_TJ.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/tg_TJ.json b/apps/user_ldap/l10n/tg_TJ.json deleted file mode 100644 index 521de7ba1a8..00000000000 --- a/apps/user_ldap/l10n/tg_TJ.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/th.js b/apps/user_ldap/l10n/th.js index 4f9ecc7856c..c33d42a4871 100644 --- a/apps/user_ldap/l10n/th.js +++ b/apps/user_ldap/l10n/th.js @@ -1,146 +1,140 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "ล้มเหลวขณะล้าง Mappings", + "Failed to clear the mappings." : "ไม่สามารถล้างการแมป", "Failed to delete the server configuration" : "ลบการกำหนดค่าเซิร์ฟเวอร์ล้มเหลว", "No action specified" : "ไม่ได้ระบุการดำเนินการ", - "No configuration specified" : "ไม่ได้กำหนดค่า", - "No data specified" : "ไม่มีข้อมูลที่ระบุ", - " Could not set configuration %s" : "ไม่สามารถตั้งค่า %s", - "Action does not exist" : "ไม่มีการดำเนินการ", - "Very weak password" : "รหัสผ่านระดับต่ำมาก", - "Weak password" : "รหัสผ่านระดับต่ำ", - "So-so password" : "รหัสผ่านระดับปกติ", + "No configuration specified" : "ไม่ได้ระบุการกำหนดค่า", + "No data specified" : "ไม่ได้ระบุข้อมูล", + "Action does not exist" : "ไม่มีการดำเนินการนี้อยู่", + "Very weak password" : "รหัสผ่านคาดเดาง่ายมาก", + "Weak password" : "รหัสผ่านคาดเดาง่าย", + "So-so password" : "รหัสผ่านระดับพอใช้", "Good password" : "รหัสผ่านระดับดี", - "Strong password" : "รหัสผ่านระดับดีมาก", + "Strong password" : "รหัสผ่านคาดเดายาก", "The Base DN appears to be wrong" : "Base DN ดูเหมือนจะไม่ถูกต้อง", - "Testing configuration…" : "กำลังทดสอบการตั้งค่า ...", + "Testing configuration…" : "กำลังทดสอบการตั้งค่า...", "Configuration incorrect" : "การกำหนดค่าไม่ถูกต้อง", - "Configuration incomplete" : "กำหนดค่าไม่สำเร็จ", - "Configuration OK" : "กำหนดค่าเสร็จสมบูรณ์", + "Configuration incomplete" : "การกำหนดค่าไม่ครบถ้วน", + "Configuration OK" : "การกำหนดค่าใช้งานได้", "Select groups" : "เลือกกลุ่ม", "Select object classes" : "เลือกคลาสวัตถุ", - "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัวของพวกเขาดูเหมือนจะมีข้อผิดพลาด", - "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต มันไม่สามารถตรวจพบอัตโนมัติ", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN ไม่สามารถตรวจพบโดยอัตโนมัติกรุณาแก้ไขข้อมูลของโฮสต์และพอร์ต", - "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดเลือกด้วยตนเอง", + "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัว ดูเหมือนจะใส่ไม่ถูกต้อง", + "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต เนื่องจากไม่สามารถตรวจพบโดยอัตโนมัติ", + "Base DN could not be auto-detected, please revise credentials, host and port." : "ไม่สามารถตรวจพบ Base DN โดยอัตโนมัติ กรุณาแก้ไขข้อมูลประจำตัว โฮสต์ และพอร์ต", + "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดระบุด้วยตนเอง", "{nthServer}. Server" : "เซิร์ฟเวอร์ {nthServer}", - "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุที่กำหนดใน Base DN กรุณาแก้ไข", + "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุใน Base DN ที่ให้ไว้ กรุณาแก้ไข", "More than 1,000 directory entries available." : "ไดเรกทอรีมีอยู่มากกว่า 1,000 รายการ", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN เช่นเดียวกับการตั้งค่าการเชื่อมต่อและข้อมูลที่สำคัญ", - "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจแล้วหรือว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบันทิ้งไป?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN รวมถึงการตั้งค่าการเชื่อมต่อและข้อมูลประจำตัว", + "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจหรือไม่ว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบัน?", "Confirm Deletion" : "ยืนยันการลบทิ้ง", - "Mappings cleared successfully!" : "ล้าง Mappings เรียบร้อยแล้ว", - "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้าง Mappings", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "บุคคลนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", - "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP บุคคลนิรนามอาจจะไม่ได้รับอนุญาต ", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "บันทึกล้มเหลว โปรดตรวจสอบฐานข้อมูลที่อยู่ในการดำเนินงาน โหลดหน้าใหม่อีกครั้งก่อนดำเนินการต่อ", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "โหมดสลับจะช่วยค้นหา LDAP อัตโนมัติ ขึ้นอยู่กับขนาด LDAP ของคุณมันอาจใช้เวลาสักครู่ คุณยังยังต้องการใช้โหมดสลับ?", - "Mode switch" : "โหมดสลับ", - "Select attributes" : "เลือกคุณลักษณะ", + "Mappings cleared successfully!" : "ล้างการแมปเรียบร้อยแล้ว", + "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้างการแมป", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "การผูกนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", + "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP การผูกนิรนามอาจจะไม่ได้รับอนุญาต ", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "การบันทึกล้มเหลว โปรดตรวจสอบว่าฐานข้อมูลอยู่ใน Operation โหลดหน้าใหม่ก่อนดำเนินการต่อ", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "การสลับโหมดจะเปิดใช้คิวรี LDAP อัตโนมัติ ซึ่งอาจใช้เวลาสักครู่ขึ้นอยู่กับขนาด LDAP ของคุณ คุณยังต้องการสลับโหมดหรือไม่?", + "Mode switch" : "สลับโหมด", + "Select attributes" : "เลือกแอททริบิวต์", "User found and settings verified." : "พบผู้ใช้และการตั้งค่าได้รับการตรวจสอบแล้ว", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้องอาจเป็นเพราะปัญหาไวยากรณ์เช่นหมายเลขที่ไม่สม่ำเสมอของวงเล็บเปิดและปิด กรุณาแก้ไข", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยัง LDAP/AD โปรดตรวจสอบโฮสต์พอร์ตและข้อมูลอื่นๆ", - "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบข้อขัดแย้ง", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "กล่องข้อความกลุ่มถูกปิดการใช้งานเนื่องจากเซิร์ฟเวอร์ LDAP/AD ไม่สนับสนุน memberOf", - "_%s group found_::_%s groups found_" : ["พบ %s กลุ่ม"], - "_%s user found_::_%s users found_" : ["พบผู้ใช้ %s คน"], + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้อง อาจเป็นเพราะปัญหาไวยากรณ์ เช่น จำนวนวงเล็บเปิดและปิดที่ไม่สม่ำเสมอ กรุณาแก้ไข", + "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบ", "Could not find the desired feature" : "ไม่พบคุณลักษณะที่ต้องการ", "Invalid Host" : "โฮสต์ไม่ถูกต้อง", "Test Configuration" : "ทดสอบการตั้งค่า", "Help" : "ช่วยเหลือ", - "Groups meeting these criteria are available in %s:" : "การประชุมกลุ่มเหล่านี้มีหลักเกณฑ์อยู่ใน %s:", + "Groups meeting these criteria are available in %s:" : "กลุ่มที่เข้าเกณฑ์เหล่านี้มีอยู่ใน %s:", "Only these object classes:" : "เฉพาะคลาสของวัตถุเหล่านี้:", "Only from these groups:" : "เฉพาะจากกลุ่มเหล่านี้:", "Search groups" : "ค้นหากลุ่ม", "Available groups" : "กลุ่มที่สามารถใช้ได้", "Selected groups" : "กลุ่มที่เลือก", - "Edit LDAP Query" : "แก้ไข LDAP Query", + "Edit LDAP Query" : "แก้ไขคิวรี LDAP", "LDAP Filter:" : "ตัวกรอง LDAP:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "ระบุตัวกรองกลุ่ม LDAP ที่จะเข้าถึง %s", - "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะได้พบกับผู้ใช้ตามลักษณะดังต่อไปนี้:", - "LDAP / AD Username:" : "ชื่อผู้ใช้ LDAP/AD:", - "LDAP / AD Email Address:" : "ที่อยู่อีเมล LDAP/AD:", - "Other Attributes:" : "คุณลักษณะอื่นๆ:", - "Test Loginname" : "ทดสอบชื่อที่ใช้ในการเข้าสู่ระบบ", + "The filter specifies which LDAP groups shall have access to the %s instance." : "ตัวกรองระบุว่ากลุ่ม LDAP ใดบ้างจะสามารถเข้าถึงเซิร์ฟเวอร์ %s", + "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะค้นหาผู้ใช้ตามแอททริบิวต์ดังต่อไปนี้:", + "Other Attributes:" : "คุณลักษณะอื่น ๆ:", + "Test Loginname" : "ทดสอบชื่อที่ใช้เข้าสู่ระบบ", "Verify settings" : "ตรวจสอบการตั้งค่า", - "%s. Server:" : "เซิร์ฟเวอร์%s", - "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในไดเรกทอรีใหม่ที่ผูกกัน", - "Delete the current configuration" : "ลบการตั้งค่าปัจจุบัน", + "%s. Server:" : "%s เซิร์ฟเวอร์:", + "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในการผูกไดเรกทอรีใหม่", + "Delete the current configuration" : "ลบการกำหนดค่าปัจจุบัน", "Host" : "โฮสต์", "Port" : "พอร์ต", - "Detect Port" : "ตรวจพบพอร์ต", + "Detect 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=agent, dc=example, 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 และรหัสผ่านไว้", + "For anonymous access, leave DN and Password empty." : "สำหรับการเข้าถึงนิรนาม ให้เว้นช่อง DN และรหัสผ่านไว้", "One Base DN per line" : "หนึ่ง Base DN ต่อหนึ่งบรรทัด", - "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่างๆในแท็บขั้นสูงได้", - "Detect Base DN" : "ตรวจพบ Base DN", + "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่าง ๆ ได้ในแท็บขั้นสูง", + "Detect Base DN" : "ตรวจจับ Base DN", "Test Base DN" : "ทดสอบ Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงการร้องขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องมีความรู้เรื่อง LDAP", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงคำขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องพอมีความรู้เรื่อง LDAP", "Manually enter LDAP filters (recommended for large directories)" : "ป้อนตัวกรอง LDAP ด้วยตนเอง (แนะนำสำหรับไดเรกทอรีขนาดใหญ่)", - "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." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหนโปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", - "The filter specifies which LDAP users shall have access to the %s instance." : "ระบุตัวกรองที่ผู้ใช้ LDAP จะมีการเข้าถึง %s", - "Verify settings and count users" : "ตรวจสอบการตั้งค่าและการนับจำนวนผู้ใช้", - "Saving" : "บันทึก", + "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." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหน โปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", + "The filter specifies which LDAP users shall have access to the %s instance." : "ตัวกรองระบุว่าผู้ใช้ LDAP ใดบ้างจะสามารถเข้าถึงเซิร์ฟเวอร์ %s", + "Verify settings and count users" : "ตรวจสอบการตั้งค่าและนับจำนวนผู้ใช้", + "Saving" : "กำลังบันทึก", "Back" : "ย้อนกลับ", "Continue" : "ดำเนินการต่อ", - "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "An internal error occurred." : "เกิดข้อผิดพลาดภายใน", + "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบของคุณ", "Current password" : "รหัสผ่านปัจจุบัน", "New password" : "รหัสผ่านใหม่", - "Wrong password." : "รหัสผ่านผิดพลาด", + "Wrong password." : "รหัสผ่านไม่ถูกต้อง", "Cancel" : "ยกเลิก", "Server" : "เซิร์ฟเวอร์", "Users" : "ผู้ใช้งาน", - "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", + "Login Attributes" : "แอททริบิวต์การเข้าสู่ระบบ", "Groups" : "กลุ่ม", "Expert" : "ผู้เชี่ยวชาญ", "Advanced" : "ขั้นสูง", - "<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> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง, ระบบด้านหลังจะไม่สามารถทำงานได้ กรุณาติดต่อผู้ดูแลระบบของคุณเพื่อทำการติดตั้งโมดูลดังกล่าว", + "<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> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง แบ็กเอนด์จะไม่สามารถทำงานได้ กรุณาติดต่อให้ผู้ดูแลระบบของคุณทำการติดตั้ง", "Connection Settings" : "ตั้งค่าการเชื่อมต่อ", - "Configuration Active" : "ตั้งค่าการใช้งาน", - "When unchecked, this configuration will be skipped." : "ถ้าไม่เลือก การตั้งค่านี้จะถูกข้ามไป", - "Backup (Replica) Host" : "การสำรองข้อมูลโฮสต์ (สำรอง) ", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "ให้โฮสต์สำรองข้อมูลที่จำเป็นของเซิร์ฟเวอร์ LDAP/AD หลัก", - "Backup (Replica) Port" : "สำรองข้อมูลพอร์ต (จำลอง) ", + "Configuration Active" : "การกำหนดค่าใช้งานอยู่", + "When unchecked, this configuration will be skipped." : "เมื่อไม่เลือก การกำหนดค่านี้จะถูกข้ามไป", + "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." : "เฉพาะเชื่อมต่อกับเซิร์ฟเวอร์แบบจำลอง", - "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." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL เซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", - "Cache Time-To-Live" : "แคช TTL", - "in seconds. A change empties the cache." : "ในอีกไม่กี่วินาที ระบบจะล้างข้อมูลในแคชให้ว่างเปล่า", - "Directory Settings" : "ตั้งค่าไดเร็กทอรี่", - "User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งาน", - "The LDAP attribute to use to generate the user's display name." : "คุณลักษณะ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของผู้ใช้", - "2nd User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งานคนที่ 2", + "Only connect to the replica server." : "เชื่อมต่อกับเซิร์ฟเวอร์แบบจำลองเท่านั้น", + "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." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL ของเซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", + "Cache Time-To-Live" : "เวลาที่ดำรงอยู่ของแคช", + "in seconds. A change empties the cache." : "ในวินาที การเปลี่ยนค่านี้จะล้างข้อมูลในแคช", + "Directory Settings" : "ตั้งค่าไดเร็กทอรี", + "User Display Name Field" : "ช่องชื่อที่แสดงของผู้ใช้", + "The LDAP attribute to use to generate the user's display name." : "แอททริบิวต์ LDAP เพื่อใช้ในการสร้างชื่อที่แสดงของผู้ใช้", + "2nd User Display Name Field" : "ช่องชื่อที่แสดงของผู้ใช้ที่ 2", "Base User Tree" : "รายการผู้ใช้งานหลักแบบ Tree", - "One User Base DN per line" : "หนึ่งผู้ใช้ Base DN ต่อหนึ่งบรรทัด", + "One User Base DN per line" : "หนึ่ง Base DN ผู้ใช้ ต่อหนึ่งบรรทัด", "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 เพื่อใช้ในการสร้างชื่อที่ปรากฏของกลุ่ม", + "Group Display Name Field" : "ช่องชื่อที่แสดงของกลุ่ม", + "The LDAP attribute to use to generate the groups's display name." : "แอททริบิวต์ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของกลุ่ม", "Base Group Tree" : "รายการกลุ่มหลักแบบ Tree", - "One Group Base DN per line" : "หนึ่ง Group Base DN ต่อหนึ่งบรรทัด", - "Group Search Attributes" : "คุณลักษณะการค้นหาแบบกลุ่ม", - "Group-Member association" : "ความสัมพันธ์ของสมาชิกในกลุ่ม", + "One Group Base DN per line" : "หนึ่ง Base DN กลุ่ม ต่อหนึ่งบรรทัด", + "Group Search Attributes" : "แอททริบิวต์การค้นหากลุ่ม", + "Group-Member association" : "ความสัมพันธ์ของกลุ่ม-สมาชิก", "Nested Groups" : "กลุ่มที่ซ้อนกัน", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มจะได้รับการสนันสนุน (เฉพาะการทำงานถ้าคุณลักษณะสมาชิกกลุ่มมี DN)", - "Paging chunksize" : "ขนาด Paging chunk", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize ใช้สำหรับการค้นหาเพจ LDAP มันส่งคืนผลลัพธ์ที่มีขนาดใหญ่เช่นการนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งาน)", - "Special Attributes" : "คุณลักษณะพิเศษ", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มที่มีกลุ่มอยู่ด้านในจะได้รับการสนับสนุน (ใช้ได้เฉพาะถ้าแอททริบิวต์สมาชิกกลุ่มมี DN)", + "Paging chunksize" : "ขนาดกลุ่มเพจ", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ขนาดกลุ่มที่ใช้สำหรับการค้นหา LDAP แบบเพจ ที่อาจส่งคืนผลลัพธ์ขนาดใหญ่ เช่น การนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งานการค้นหา LDAP แบบเพจในสถานการณ์เหล่านั้น)", + "Special Attributes" : "แอททริบิวต์พิเศษ", "Quota Field" : "ช่องโควต้า", "Quota Default" : "โควต้าเริ่มต้น", "Email Field" : "ช่องอีเมล", - "User Home Folder Naming Rule" : "กฎการตั้งชื่อโฟลเดอร์แรกของผู้ใช้", + "User Home Folder Naming Rule" : "กฎการตั้งชื่อโฮมโฟลเดอร์ของผู้ใช้", "Internal Username" : "ชื่อผู้ใช้ภายใน", - "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." : "โดยค่าเริ่มต้นแอตทริบิวต์ UUID มีถูกตรวจพบโดยอัตโนมัติ แอตทริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้ของ LDAP และกลุ่ม นอกจากนี้ยังมีชื่อผู้ใช้ภายในจะถูกสร้างขึ้นบนพื้นฐาน UUID หากไม่ได้ระบุไว้ข้างต้น คุณสามารถแทนที่การตั้งค่าและส่งแอตทริบิวต์ที่คุณเลือก คุณต้องให้แน่ใจว่าแอตทริบิวต์ที่คุณเลือกสามารถเป็นจริงสำหรับทั้งผู้ใช้และกลุ่มและมันควรจะไม่ซ้ำกัน ปล่อยให้มันว่างเปล่าสำหรับการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะในแมปใหม่ (เพิ่ม) ผู้ใช้ LDAP และกลุ่ม", - "UUID Attribute for Users:" : "แอตทริบิวต์ UUID สำหรับผู้ใช้:", - "UUID Attribute for Groups:" : "แอตทริบิวต์ UUID สำหรับกลุ่ม:", - "Username-LDAP User Mapping" : "Username-LDAP ผู้ใช้ Mapping", - "Clear Username-LDAP User Mapping" : "ล้าง Username-LDAP ผู้ใช้ Mapping", - "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping" + "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." : "โดยค่าเริ่มต้น แอททริบิวต์ UUID จะถูกตรวจพบโดยอัตโนมัติ แอททริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้และกลุ่มของ LDAP โดยไม่ต้องสงสัย นอกจากนี้ หากไม่ได้ระบุไว้ข้างต้น ชื่อผู้ใช้ภายในจะถูกสร้างขึ้นโดยใช้ UUID เป็นฐาน คุณสามารถแทนที่การตั้งค่าและส่งแอททริบิวต์ที่คุณเลือกได้ คุณต้องให้แน่ใจว่าแอททริบิวต์ที่คุณเลือกสามารถดึงได้สำหรับทั้งผู้ใช้และกลุ่มและต้องไม่ซ้ำกัน ปล่อยว่างไว้สำหรับรูปแบบการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะผู้ใช้ LDAP และกลุ่มที่เพิ่งแมปใหม่ (เพิ่งเพิ่ม)", + "UUID Attribute for Users:" : "แอททริบิวต์ UUID สำหรับผู้ใช้:", + "UUID Attribute for Groups:" : "แอททริบิวต์ UUID สำหรับกลุ่ม:", + "Username-LDAP User Mapping" : "การแมปชื่อผู้ใช้-ผู้ใช้ LDAP", + "Clear Username-LDAP User Mapping" : "ล้างการแมปชื่อผู้ใช้-ผู้ใช้ LDAP", + "Clear Groupname-LDAP Group Mapping" : "ล้างการแมปกลุ่ม Groupname-LDAP" }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/th.json b/apps/user_ldap/l10n/th.json index f4a5033cfce..3c745186c56 100644 --- a/apps/user_ldap/l10n/th.json +++ b/apps/user_ldap/l10n/th.json @@ -1,144 +1,138 @@ { "translations": { - "Failed to clear the mappings." : "ล้มเหลวขณะล้าง Mappings", + "Failed to clear the mappings." : "ไม่สามารถล้างการแมป", "Failed to delete the server configuration" : "ลบการกำหนดค่าเซิร์ฟเวอร์ล้มเหลว", "No action specified" : "ไม่ได้ระบุการดำเนินการ", - "No configuration specified" : "ไม่ได้กำหนดค่า", - "No data specified" : "ไม่มีข้อมูลที่ระบุ", - " Could not set configuration %s" : "ไม่สามารถตั้งค่า %s", - "Action does not exist" : "ไม่มีการดำเนินการ", - "Very weak password" : "รหัสผ่านระดับต่ำมาก", - "Weak password" : "รหัสผ่านระดับต่ำ", - "So-so password" : "รหัสผ่านระดับปกติ", + "No configuration specified" : "ไม่ได้ระบุการกำหนดค่า", + "No data specified" : "ไม่ได้ระบุข้อมูล", + "Action does not exist" : "ไม่มีการดำเนินการนี้อยู่", + "Very weak password" : "รหัสผ่านคาดเดาง่ายมาก", + "Weak password" : "รหัสผ่านคาดเดาง่าย", + "So-so password" : "รหัสผ่านระดับพอใช้", "Good password" : "รหัสผ่านระดับดี", - "Strong password" : "รหัสผ่านระดับดีมาก", + "Strong password" : "รหัสผ่านคาดเดายาก", "The Base DN appears to be wrong" : "Base DN ดูเหมือนจะไม่ถูกต้อง", - "Testing configuration…" : "กำลังทดสอบการตั้งค่า ...", + "Testing configuration…" : "กำลังทดสอบการตั้งค่า...", "Configuration incorrect" : "การกำหนดค่าไม่ถูกต้อง", - "Configuration incomplete" : "กำหนดค่าไม่สำเร็จ", - "Configuration OK" : "กำหนดค่าเสร็จสมบูรณ์", + "Configuration incomplete" : "การกำหนดค่าไม่ครบถ้วน", + "Configuration OK" : "การกำหนดค่าใช้งานได้", "Select groups" : "เลือกกลุ่ม", "Select object classes" : "เลือกคลาสวัตถุ", - "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัวของพวกเขาดูเหมือนจะมีข้อผิดพลาด", - "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต มันไม่สามารถตรวจพบอัตโนมัติ", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN ไม่สามารถตรวจพบโดยอัตโนมัติกรุณาแก้ไขข้อมูลของโฮสต์และพอร์ต", - "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดเลือกด้วยตนเอง", + "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัว ดูเหมือนจะใส่ไม่ถูกต้อง", + "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต เนื่องจากไม่สามารถตรวจพบโดยอัตโนมัติ", + "Base DN could not be auto-detected, please revise credentials, host and port." : "ไม่สามารถตรวจพบ Base DN โดยอัตโนมัติ กรุณาแก้ไขข้อมูลประจำตัว โฮสต์ และพอร์ต", + "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดระบุด้วยตนเอง", "{nthServer}. Server" : "เซิร์ฟเวอร์ {nthServer}", - "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุที่กำหนดใน Base DN กรุณาแก้ไข", + "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุใน Base DN ที่ให้ไว้ กรุณาแก้ไข", "More than 1,000 directory entries available." : "ไดเรกทอรีมีอยู่มากกว่า 1,000 รายการ", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN เช่นเดียวกับการตั้งค่าการเชื่อมต่อและข้อมูลที่สำคัญ", - "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจแล้วหรือว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบันทิ้งไป?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN รวมถึงการตั้งค่าการเชื่อมต่อและข้อมูลประจำตัว", + "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจหรือไม่ว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบัน?", "Confirm Deletion" : "ยืนยันการลบทิ้ง", - "Mappings cleared successfully!" : "ล้าง Mappings เรียบร้อยแล้ว", - "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้าง Mappings", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "บุคคลนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", - "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP บุคคลนิรนามอาจจะไม่ได้รับอนุญาต ", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "บันทึกล้มเหลว โปรดตรวจสอบฐานข้อมูลที่อยู่ในการดำเนินงาน โหลดหน้าใหม่อีกครั้งก่อนดำเนินการต่อ", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "โหมดสลับจะช่วยค้นหา LDAP อัตโนมัติ ขึ้นอยู่กับขนาด LDAP ของคุณมันอาจใช้เวลาสักครู่ คุณยังยังต้องการใช้โหมดสลับ?", - "Mode switch" : "โหมดสลับ", - "Select attributes" : "เลือกคุณลักษณะ", + "Mappings cleared successfully!" : "ล้างการแมปเรียบร้อยแล้ว", + "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้างการแมป", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "การผูกนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", + "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP การผูกนิรนามอาจจะไม่ได้รับอนุญาต ", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "การบันทึกล้มเหลว โปรดตรวจสอบว่าฐานข้อมูลอยู่ใน Operation โหลดหน้าใหม่ก่อนดำเนินการต่อ", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "การสลับโหมดจะเปิดใช้คิวรี LDAP อัตโนมัติ ซึ่งอาจใช้เวลาสักครู่ขึ้นอยู่กับขนาด LDAP ของคุณ คุณยังต้องการสลับโหมดหรือไม่?", + "Mode switch" : "สลับโหมด", + "Select attributes" : "เลือกแอททริบิวต์", "User found and settings verified." : "พบผู้ใช้และการตั้งค่าได้รับการตรวจสอบแล้ว", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้องอาจเป็นเพราะปัญหาไวยากรณ์เช่นหมายเลขที่ไม่สม่ำเสมอของวงเล็บเปิดและปิด กรุณาแก้ไข", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยัง LDAP/AD โปรดตรวจสอบโฮสต์พอร์ตและข้อมูลอื่นๆ", - "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบข้อขัดแย้ง", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "กล่องข้อความกลุ่มถูกปิดการใช้งานเนื่องจากเซิร์ฟเวอร์ LDAP/AD ไม่สนับสนุน memberOf", - "_%s group found_::_%s groups found_" : ["พบ %s กลุ่ม"], - "_%s user found_::_%s users found_" : ["พบผู้ใช้ %s คน"], + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้อง อาจเป็นเพราะปัญหาไวยากรณ์ เช่น จำนวนวงเล็บเปิดและปิดที่ไม่สม่ำเสมอ กรุณาแก้ไข", + "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบ", "Could not find the desired feature" : "ไม่พบคุณลักษณะที่ต้องการ", "Invalid Host" : "โฮสต์ไม่ถูกต้อง", "Test Configuration" : "ทดสอบการตั้งค่า", "Help" : "ช่วยเหลือ", - "Groups meeting these criteria are available in %s:" : "การประชุมกลุ่มเหล่านี้มีหลักเกณฑ์อยู่ใน %s:", + "Groups meeting these criteria are available in %s:" : "กลุ่มที่เข้าเกณฑ์เหล่านี้มีอยู่ใน %s:", "Only these object classes:" : "เฉพาะคลาสของวัตถุเหล่านี้:", "Only from these groups:" : "เฉพาะจากกลุ่มเหล่านี้:", "Search groups" : "ค้นหากลุ่ม", "Available groups" : "กลุ่มที่สามารถใช้ได้", "Selected groups" : "กลุ่มที่เลือก", - "Edit LDAP Query" : "แก้ไข LDAP Query", + "Edit LDAP Query" : "แก้ไขคิวรี LDAP", "LDAP Filter:" : "ตัวกรอง LDAP:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "ระบุตัวกรองกลุ่ม LDAP ที่จะเข้าถึง %s", - "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะได้พบกับผู้ใช้ตามลักษณะดังต่อไปนี้:", - "LDAP / AD Username:" : "ชื่อผู้ใช้ LDAP/AD:", - "LDAP / AD Email Address:" : "ที่อยู่อีเมล LDAP/AD:", - "Other Attributes:" : "คุณลักษณะอื่นๆ:", - "Test Loginname" : "ทดสอบชื่อที่ใช้ในการเข้าสู่ระบบ", + "The filter specifies which LDAP groups shall have access to the %s instance." : "ตัวกรองระบุว่ากลุ่ม LDAP ใดบ้างจะสามารถเข้าถึงเซิร์ฟเวอร์ %s", + "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะค้นหาผู้ใช้ตามแอททริบิวต์ดังต่อไปนี้:", + "Other Attributes:" : "คุณลักษณะอื่น ๆ:", + "Test Loginname" : "ทดสอบชื่อที่ใช้เข้าสู่ระบบ", "Verify settings" : "ตรวจสอบการตั้งค่า", - "%s. Server:" : "เซิร์ฟเวอร์%s", - "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในไดเรกทอรีใหม่ที่ผูกกัน", - "Delete the current configuration" : "ลบการตั้งค่าปัจจุบัน", + "%s. Server:" : "%s เซิร์ฟเวอร์:", + "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในการผูกไดเรกทอรีใหม่", + "Delete the current configuration" : "ลบการกำหนดค่าปัจจุบัน", "Host" : "โฮสต์", "Port" : "พอร์ต", - "Detect Port" : "ตรวจพบพอร์ต", + "Detect 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=agent, dc=example, 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 และรหัสผ่านไว้", + "For anonymous access, leave DN and Password empty." : "สำหรับการเข้าถึงนิรนาม ให้เว้นช่อง DN และรหัสผ่านไว้", "One Base DN per line" : "หนึ่ง Base DN ต่อหนึ่งบรรทัด", - "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่างๆในแท็บขั้นสูงได้", - "Detect Base DN" : "ตรวจพบ Base DN", + "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่าง ๆ ได้ในแท็บขั้นสูง", + "Detect Base DN" : "ตรวจจับ Base DN", "Test Base DN" : "ทดสอบ Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงการร้องขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องมีความรู้เรื่อง LDAP", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงคำขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องพอมีความรู้เรื่อง LDAP", "Manually enter LDAP filters (recommended for large directories)" : "ป้อนตัวกรอง LDAP ด้วยตนเอง (แนะนำสำหรับไดเรกทอรีขนาดใหญ่)", - "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." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหนโปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", - "The filter specifies which LDAP users shall have access to the %s instance." : "ระบุตัวกรองที่ผู้ใช้ LDAP จะมีการเข้าถึง %s", - "Verify settings and count users" : "ตรวจสอบการตั้งค่าและการนับจำนวนผู้ใช้", - "Saving" : "บันทึก", + "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." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหน โปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", + "The filter specifies which LDAP users shall have access to the %s instance." : "ตัวกรองระบุว่าผู้ใช้ LDAP ใดบ้างจะสามารถเข้าถึงเซิร์ฟเวอร์ %s", + "Verify settings and count users" : "ตรวจสอบการตั้งค่าและนับจำนวนผู้ใช้", + "Saving" : "กำลังบันทึก", "Back" : "ย้อนกลับ", "Continue" : "ดำเนินการต่อ", - "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "An internal error occurred." : "เกิดข้อผิดพลาดภายใน", + "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบของคุณ", "Current password" : "รหัสผ่านปัจจุบัน", "New password" : "รหัสผ่านใหม่", - "Wrong password." : "รหัสผ่านผิดพลาด", + "Wrong password." : "รหัสผ่านไม่ถูกต้อง", "Cancel" : "ยกเลิก", "Server" : "เซิร์ฟเวอร์", "Users" : "ผู้ใช้งาน", - "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", + "Login Attributes" : "แอททริบิวต์การเข้าสู่ระบบ", "Groups" : "กลุ่ม", "Expert" : "ผู้เชี่ยวชาญ", "Advanced" : "ขั้นสูง", - "<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> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง, ระบบด้านหลังจะไม่สามารถทำงานได้ กรุณาติดต่อผู้ดูแลระบบของคุณเพื่อทำการติดตั้งโมดูลดังกล่าว", + "<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> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง แบ็กเอนด์จะไม่สามารถทำงานได้ กรุณาติดต่อให้ผู้ดูแลระบบของคุณทำการติดตั้ง", "Connection Settings" : "ตั้งค่าการเชื่อมต่อ", - "Configuration Active" : "ตั้งค่าการใช้งาน", - "When unchecked, this configuration will be skipped." : "ถ้าไม่เลือก การตั้งค่านี้จะถูกข้ามไป", - "Backup (Replica) Host" : "การสำรองข้อมูลโฮสต์ (สำรอง) ", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "ให้โฮสต์สำรองข้อมูลที่จำเป็นของเซิร์ฟเวอร์ LDAP/AD หลัก", - "Backup (Replica) Port" : "สำรองข้อมูลพอร์ต (จำลอง) ", + "Configuration Active" : "การกำหนดค่าใช้งานอยู่", + "When unchecked, this configuration will be skipped." : "เมื่อไม่เลือก การกำหนดค่านี้จะถูกข้ามไป", + "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." : "เฉพาะเชื่อมต่อกับเซิร์ฟเวอร์แบบจำลอง", - "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." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL เซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", - "Cache Time-To-Live" : "แคช TTL", - "in seconds. A change empties the cache." : "ในอีกไม่กี่วินาที ระบบจะล้างข้อมูลในแคชให้ว่างเปล่า", - "Directory Settings" : "ตั้งค่าไดเร็กทอรี่", - "User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งาน", - "The LDAP attribute to use to generate the user's display name." : "คุณลักษณะ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของผู้ใช้", - "2nd User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งานคนที่ 2", + "Only connect to the replica server." : "เชื่อมต่อกับเซิร์ฟเวอร์แบบจำลองเท่านั้น", + "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." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL ของเซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", + "Cache Time-To-Live" : "เวลาที่ดำรงอยู่ของแคช", + "in seconds. A change empties the cache." : "ในวินาที การเปลี่ยนค่านี้จะล้างข้อมูลในแคช", + "Directory Settings" : "ตั้งค่าไดเร็กทอรี", + "User Display Name Field" : "ช่องชื่อที่แสดงของผู้ใช้", + "The LDAP attribute to use to generate the user's display name." : "แอททริบิวต์ LDAP เพื่อใช้ในการสร้างชื่อที่แสดงของผู้ใช้", + "2nd User Display Name Field" : "ช่องชื่อที่แสดงของผู้ใช้ที่ 2", "Base User Tree" : "รายการผู้ใช้งานหลักแบบ Tree", - "One User Base DN per line" : "หนึ่งผู้ใช้ Base DN ต่อหนึ่งบรรทัด", + "One User Base DN per line" : "หนึ่ง Base DN ผู้ใช้ ต่อหนึ่งบรรทัด", "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 เพื่อใช้ในการสร้างชื่อที่ปรากฏของกลุ่ม", + "Group Display Name Field" : "ช่องชื่อที่แสดงของกลุ่ม", + "The LDAP attribute to use to generate the groups's display name." : "แอททริบิวต์ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของกลุ่ม", "Base Group Tree" : "รายการกลุ่มหลักแบบ Tree", - "One Group Base DN per line" : "หนึ่ง Group Base DN ต่อหนึ่งบรรทัด", - "Group Search Attributes" : "คุณลักษณะการค้นหาแบบกลุ่ม", - "Group-Member association" : "ความสัมพันธ์ของสมาชิกในกลุ่ม", + "One Group Base DN per line" : "หนึ่ง Base DN กลุ่ม ต่อหนึ่งบรรทัด", + "Group Search Attributes" : "แอททริบิวต์การค้นหากลุ่ม", + "Group-Member association" : "ความสัมพันธ์ของกลุ่ม-สมาชิก", "Nested Groups" : "กลุ่มที่ซ้อนกัน", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มจะได้รับการสนันสนุน (เฉพาะการทำงานถ้าคุณลักษณะสมาชิกกลุ่มมี DN)", - "Paging chunksize" : "ขนาด Paging chunk", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize ใช้สำหรับการค้นหาเพจ LDAP มันส่งคืนผลลัพธ์ที่มีขนาดใหญ่เช่นการนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งาน)", - "Special Attributes" : "คุณลักษณะพิเศษ", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มที่มีกลุ่มอยู่ด้านในจะได้รับการสนับสนุน (ใช้ได้เฉพาะถ้าแอททริบิวต์สมาชิกกลุ่มมี DN)", + "Paging chunksize" : "ขนาดกลุ่มเพจ", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ขนาดกลุ่มที่ใช้สำหรับการค้นหา LDAP แบบเพจ ที่อาจส่งคืนผลลัพธ์ขนาดใหญ่ เช่น การนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งานการค้นหา LDAP แบบเพจในสถานการณ์เหล่านั้น)", + "Special Attributes" : "แอททริบิวต์พิเศษ", "Quota Field" : "ช่องโควต้า", "Quota Default" : "โควต้าเริ่มต้น", "Email Field" : "ช่องอีเมล", - "User Home Folder Naming Rule" : "กฎการตั้งชื่อโฟลเดอร์แรกของผู้ใช้", + "User Home Folder Naming Rule" : "กฎการตั้งชื่อโฮมโฟลเดอร์ของผู้ใช้", "Internal Username" : "ชื่อผู้ใช้ภายใน", - "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." : "โดยค่าเริ่มต้นแอตทริบิวต์ UUID มีถูกตรวจพบโดยอัตโนมัติ แอตทริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้ของ LDAP และกลุ่ม นอกจากนี้ยังมีชื่อผู้ใช้ภายในจะถูกสร้างขึ้นบนพื้นฐาน UUID หากไม่ได้ระบุไว้ข้างต้น คุณสามารถแทนที่การตั้งค่าและส่งแอตทริบิวต์ที่คุณเลือก คุณต้องให้แน่ใจว่าแอตทริบิวต์ที่คุณเลือกสามารถเป็นจริงสำหรับทั้งผู้ใช้และกลุ่มและมันควรจะไม่ซ้ำกัน ปล่อยให้มันว่างเปล่าสำหรับการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะในแมปใหม่ (เพิ่ม) ผู้ใช้ LDAP และกลุ่ม", - "UUID Attribute for Users:" : "แอตทริบิวต์ UUID สำหรับผู้ใช้:", - "UUID Attribute for Groups:" : "แอตทริบิวต์ UUID สำหรับกลุ่ม:", - "Username-LDAP User Mapping" : "Username-LDAP ผู้ใช้ Mapping", - "Clear Username-LDAP User Mapping" : "ล้าง Username-LDAP ผู้ใช้ Mapping", - "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping" + "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." : "โดยค่าเริ่มต้น แอททริบิวต์ UUID จะถูกตรวจพบโดยอัตโนมัติ แอททริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้และกลุ่มของ LDAP โดยไม่ต้องสงสัย นอกจากนี้ หากไม่ได้ระบุไว้ข้างต้น ชื่อผู้ใช้ภายในจะถูกสร้างขึ้นโดยใช้ UUID เป็นฐาน คุณสามารถแทนที่การตั้งค่าและส่งแอททริบิวต์ที่คุณเลือกได้ คุณต้องให้แน่ใจว่าแอททริบิวต์ที่คุณเลือกสามารถดึงได้สำหรับทั้งผู้ใช้และกลุ่มและต้องไม่ซ้ำกัน ปล่อยว่างไว้สำหรับรูปแบบการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะผู้ใช้ LDAP และกลุ่มที่เพิ่งแมปใหม่ (เพิ่งเพิ่ม)", + "UUID Attribute for Users:" : "แอททริบิวต์ UUID สำหรับผู้ใช้:", + "UUID Attribute for Groups:" : "แอททริบิวต์ UUID สำหรับกลุ่ม:", + "Username-LDAP User Mapping" : "การแมปชื่อผู้ใช้-ผู้ใช้ LDAP", + "Clear Username-LDAP User Mapping" : "ล้างการแมปชื่อผู้ใช้-ผู้ใช้ LDAP", + "Clear Groupname-LDAP Group Mapping" : "ล้างการแมปกลุ่ม Groupname-LDAP" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/th_TH.js b/apps/user_ldap/l10n/th_TH.js deleted file mode 100644 index a5faa068c46..00000000000 --- a/apps/user_ldap/l10n/th_TH.js +++ /dev/null @@ -1,158 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "ล้มเหลวขณะล้าง Mappings", - "Failed to delete the server configuration" : "ลบการกำหนดค่าเซิร์ฟเวอร์ล้มเหลว", - "The configuration is invalid: anonymous bind is not allowed." : "การกำหนดค่าไม่ถูกต้อง: การไม่ระบุตัวตนไม่ได้รับอนุญาต", - "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." : "การกำหนดค่าไม่ถูกต้อง ดูได้ที่บันทึกสำหรับรายละเอียดเพิ่มเติม", - "No action specified" : "ไม่ได้ระบุการดำเนินการ", - "No configuration specified" : "ไม่ได้กำหนดค่า", - "No data specified" : "ไม่มีข้อมูลที่ระบุ", - " Could not set configuration %s" : "ไม่สามารถตั้งค่า %s", - "Action does not exist" : "ไม่มีการดำเนินการ", - "The Base DN appears to be wrong" : "Base DN ดูเหมือนจะไม่ถูกต้อง", - "Testing configuration…" : "กำลังทดสอบการตั้งค่า ...", - "Configuration incorrect" : "การกำหนดค่าไม่ถูกต้อง", - "Configuration incomplete" : "กำหนดค่าไม่สำเร็จ", - "Configuration OK" : "กำหนดค่าเสร็จสมบูรณ์", - "Select groups" : "เลือกกลุ่ม", - "Select object classes" : "เลือกคลาสวัตถุ", - "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัวของพวกเขาดูเหมือนจะมีข้อผิดพลาด", - "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต มันไม่สามารถตรวจพบอัตโนมัติ", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN ไม่สามารถตรวจพบโดยอัตโนมัติกรุณาแก้ไขข้อมูลของโฮสต์และพอร์ต", - "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดเลือกด้วยตนเอง", - "{nthServer}. Server" : "เซิร์ฟเวอร์ {nthServer}", - "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุที่กำหนดใน Base DN กรุณาแก้ไข", - "More than 1,000 directory entries available." : "ไดเรกทอรีมีอยู่มากกว่า 1,000 รายการ", - " entries available within the provided Base DN" : "รายการที่มีอยู่ใน Base DN", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN เช่นเดียวกับการตั้งค่าการเชื่อมต่อและข้อมูลที่สำคัญ", - "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจแล้วหรือว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบันทิ้งไป?", - "Confirm Deletion" : "ยืนยันการลบทิ้ง", - "Mappings cleared successfully!" : "ล้าง Mappings เรียบร้อยแล้ว", - "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้าง Mappings", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "บุคคลนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", - "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP บุคคลนิรนามอาจจะไม่ได้รับอนุญาต ", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "บันทึกล้มเหลว โปรดตรวจสอบฐานข้อมูลที่อยู่ในการดำเนินงาน โหลดหน้าใหม่อีกครั้งก่อนดำเนินการต่อ", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "โหมดสลับจะช่วยค้นหา LDAP อัตโนมัติ ขึ้นอยู่กับขนาด LDAP ของคุณมันอาจใช้เวลาสักครู่ คุณยังยังต้องการใช้โหมดสลับ?", - "Mode switch" : "โหมดสลับ", - "Select attributes" : "เลือกคุณลักษณะ", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "ไม่พบผู้ใช้ กรุณาตรวจสอบคุณลักษณะการเข้าสู่ระบบและชื่อผู้ใช้ของคุณ ตัวกรองที่มีประสิทธิภาพ (การคัดลอกและวางสำหรับการตรวจสอบคำสั่งทีละบรรทัด): <br/>", - "User found and settings verified." : "พบผู้ใช้และการตั้งค่าได้รับการตรวจสอบแล้ว", - "An unspecified error occurred. Please check the settings and the log." : "เกิดข้อผิดพลาดที่ระบุไม่ได้ กรุณาตรวจสอบการตั้งค่าและบันทึกของคุณ", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้องอาจเป็นเพราะปัญหาไวยากรณ์เช่นหมายเลขที่ไม่สม่ำเสมอของวงเล็บเปิดและปิด กรุณาแก้ไข", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยัง LDAP/AD โปรดตรวจสอบโฮสต์พอร์ตและข้อมูลอื่นๆ", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "ตัวยึดตำแหน่ง %uid หายไป มันจะถูกแทนที่ด้วยชื่อที่ใช้ในการเข้าสู่ระบบเมื่อสอบถาม LDAP/AD", - "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบข้อขัดแย้ง", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "กล่องข้อความกลุ่มถูกปิดการใช้งานเนื่องจากเซิร์ฟเวอร์ LDAP/AD ไม่สนับสนุน memberOf", - "_%s group found_::_%s groups found_" : ["พบ %s กลุ่ม"], - "_%s user found_::_%s users found_" : ["พบผู้ใช้ %s คน"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "ไม่สามารถตรวจสอบคุณลักษณะการแสดงชื่อของผู้ใช้ กรุณาระบุการตั้งค่า LDAP ขั้นสูงด้วยตัวคุณเอง", - "Could not find the desired feature" : "ไม่พบคุณลักษณะที่ต้องการ", - "Invalid Host" : "โฮสต์ไม่ถูกต้อง", - "Test Configuration" : "ทดสอบการตั้งค่า", - "Help" : "ช่วยเหลือ", - "Groups meeting these criteria are available in %s:" : "การประชุมกลุ่มเหล่านี้มีหลักเกณฑ์อยู่ใน %s:", - "Only these object classes:" : "เฉพาะคลาสของวัตถุเหล่านี้:", - "Only from these groups:" : "เฉพาะจากกลุ่มเหล่านี้:", - "Search groups" : "ค้นหากลุ่ม", - "Available groups" : "กลุ่มที่สามารถใช้ได้", - "Selected groups" : "กลุ่มที่เลือก", - "Edit LDAP Query" : "แก้ไข LDAP Query", - "LDAP Filter:" : "ตัวกรอง LDAP:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "ระบุตัวกรองกลุ่ม LDAP ที่จะเข้าถึง %s", - "Verify settings and count groups" : "ตรวจสอบการตั้งค่าและจำนวนกลุ่มนับ", - "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะได้พบกับผู้ใช้ตามลักษณะดังต่อไปนี้:", - "LDAP / AD Username:" : "ชื่อผู้ใช้ LDAP/AD:", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "อนุญาตให้ผู้ใช้เข้าสู่ระบบ LDAP/AD ซึ่งเป็นทั้ง uid หรือ samAccountName และมันจะถูกตรวจพบ", - "LDAP / AD Email Address:" : "ที่อยู่อีเมล LDAP/AD:", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "อนุญาตให้เข้าสู่ระบบด้วยอีเมล Mail และ mailPrimaryAddress จะได้รับอนุญาต", - "Other Attributes:" : "คุณลักษณะอื่นๆ:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "กำหนดตัวกรองที่จะใช้ เมื่อพยายามเข้าสู่ระบบจะใช้ %%uid แทนชื่อผู้ใช้ในการดำเนินการเข้าสู่ระบบ ตัวอย่าง: \"uid=%%uid\"", - "Test Loginname" : "ทดสอบชื่อที่ใช้ในการเข้าสู่ระบบ", - "Verify settings" : "ตรวจสอบการตั้งค่า", - "1. Server" : "1. เซิร์ฟเวอร์", - "%s. Server:" : "เซิร์ฟเวอร์%s", - "Add a new and blank configuration" : "เพิ่มใหม่และการกำหนดค่าว่าง", - "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในไดเรกทอรีใหม่ที่ผูกกัน", - "Delete the current configuration" : "ลบการตั้งค่าปัจจุบัน", - "Host" : "โฮสต์", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "คุณสามารถปล่อยช่องโปรโตคอลเว้นไว้ได้, ยกเว้นกรณีที่คุณต้องการใช้ SSL จากนั้นเริ่มต้นด้วย ldaps://", - "Port" : "พอร์ต", - "Detect 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=agent, dc=example, dc=com, สำหรับการเข้าถึงโดยบุคคลนิรนาม, ให้เว้นว่าง DN และรหัสผ่านเอาไว้", - "Password" : "รหัสผ่าน", - "For anonymous access, leave DN and Password empty." : "สำหรับการเข้าถึงโดยบุคคลนิรนาม ให้เว้นว่าง DN และรหัสผ่านไว้", - "One Base DN per line" : "หนึ่ง Base DN ต่อหนึ่งบรรทัด", - "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่างๆในแท็บขั้นสูงได้", - "Detect Base DN" : "ตรวจพบ Base DN", - "Test Base DN" : "ทดสอบ Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงการร้องขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องมีความรู้เรื่อง LDAP", - "Manually enter LDAP filters (recommended for large directories)" : "ป้อนตัวกรอง LDAP ด้วยตนเอง (แนะนำสำหรับไดเรกทอรีขนาดใหญ่)", - "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." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหนโปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", - "The filter specifies which LDAP users shall have access to the %s instance." : "ระบุตัวกรองที่ผู้ใช้ LDAP จะมีการเข้าถึง %s", - "Verify settings and count users" : "ตรวจสอบการตั้งค่าและการนับจำนวนผู้ใช้", - "Saving" : "บันทึก", - "Back" : "ย้อนกลับ", - "Continue" : "ดำเนินการต่อ", - "LDAP" : "LDAP", - "Server" : "เซิร์ฟเวอร์", - "Users" : "ผู้ใช้งาน", - "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", - "Groups" : "กลุ่ม", - "Expert" : "ผู้เชี่ยวชาญ", - "Advanced" : "ขั้นสูง", - "<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> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง, ระบบด้านหลังจะไม่สามารถทำงานได้ กรุณาติดต่อผู้ดูแลระบบของคุณเพื่อทำการติดตั้งโมดูลดังกล่าว", - "Connection Settings" : "ตั้งค่าการเชื่อมต่อ", - "Configuration Active" : "ตั้งค่าการใช้งาน", - "When unchecked, this configuration will be skipped." : "ถ้าไม่เลือก การตั้งค่านี้จะถูกข้ามไป", - "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." : "เฉพาะเชื่อมต่อกับเซิร์ฟเวอร์แบบจำลอง", - "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." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL เซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", - "Cache Time-To-Live" : "แคช TTL", - "in seconds. A change empties the cache." : "ในอีกไม่กี่วินาที ระบบจะล้างข้อมูลในแคชให้ว่างเปล่า", - "Directory Settings" : "ตั้งค่าไดเร็กทอรี่", - "User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งาน", - "The LDAP attribute to use to generate the user's display name." : "คุณลักษณะ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของผู้ใช้", - "2nd User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งานคนที่ 2", - "Base User Tree" : "รายการผู้ใช้งานหลักแบบ Tree", - "One User Base DN per line" : "หนึ่งผู้ใช้ Base DN ต่อหนึ่งบรรทัด", - "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" : "รายการกลุ่มหลักแบบ Tree", - "One Group Base DN per line" : "หนึ่ง Group Base DN ต่อหนึ่งบรรทัด", - "Group Search Attributes" : "คุณลักษณะการค้นหาแบบกลุ่ม", - "Group-Member association" : "ความสัมพันธ์ของสมาชิกในกลุ่ม", - "Nested Groups" : "กลุ่มที่ซ้อนกัน", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มจะได้รับการสนันสนุน (เฉพาะการทำงานถ้าคุณลักษณะสมาชิกกลุ่มมี DN)", - "Paging chunksize" : "ขนาด Paging chunk", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize ใช้สำหรับการค้นหาเพจ LDAP มันส่งคืนผลลัพธ์ที่มีขนาดใหญ่เช่นการนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งาน)", - "Special Attributes" : "คุณลักษณะพิเศษ", - "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", - "Internal Username" : "ชื่อผู้ใช้ภายใน", - "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." : "โดยค่าเริ่มต้นแอตทริบิวต์ UUID มีถูกตรวจพบโดยอัตโนมัติ แอตทริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้ของ LDAP และกลุ่ม นอกจากนี้ยังมีชื่อผู้ใช้ภายในจะถูกสร้างขึ้นบนพื้นฐาน UUID หากไม่ได้ระบุไว้ข้างต้น คุณสามารถแทนที่การตั้งค่าและส่งแอตทริบิวต์ที่คุณเลือก คุณต้องให้แน่ใจว่าแอตทริบิวต์ที่คุณเลือกสามารถเป็นจริงสำหรับทั้งผู้ใช้และกลุ่มและมันควรจะไม่ซ้ำกัน ปล่อยให้มันว่างเปล่าสำหรับการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะในแมปใหม่ (เพิ่ม) ผู้ใช้ LDAP และกลุ่ม", - "UUID Attribute for Users:" : "แอตทริบิวต์ UUID สำหรับผู้ใช้:", - "UUID Attribute for Groups:" : "แอตทริบิวต์ UUID สำหรับกลุ่ม:", - "Username-LDAP User Mapping" : "Username-LDAP ผู้ใช้ Mapping", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "ชื่อผู้ใช้จะใช้ในการจัดเก็บและกำหนดข้อมูล (เมตา) เพื่อรู้จักกับผู้ใช้และสามารถระบุได้อย่างแม่นยำ แต่ละ LDAP จะมีชื่อผู้ใช้ภายใน จึงต้องทำ Mapping ให้กับผู้ใช้ LDAP ชื่อผู้ใช้ที่ถูกสร้างขึ้นจะถูกแมปเข้ากับ UUID ของผู้ใช้ LDAP นอกจากนี้ DN ก็จะถูกแคชเช่นกันเพื่อลดการทำงานร่วมกันของ LDAP แต่มันก็ไม่ได้ใช้เพื่อระบุตัวตน หากมีการเปลี่ยนแปลง DN การเปลี่ยนแปลงจะถูกพบในทันที ชื่อผู้ใช้ภายในจะถูกใช้กับทั้งหมด การล้างแมปไม่มีผลต่อการกำหนดค่า LDAP ทั้งหมด! \nและจะเกิดขึ้นเฉพาะในการทดสอบหรือขั้นตอนการทดลอง", - "Clear Username-LDAP User Mapping" : "ล้าง Username-LDAP ผู้ใช้ Mapping", - "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "การตั้งค่าได้รับการตรวจสอบแล้ว แต่ผู้ใช้คนหนึ่งพบว่า มีเพียงครั้งแรกที่จะสามารถที่จะเข้าสู่ระบบ กรุณาพิจารณาตัวกรองที่จำกัดมากขึ้น" -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/th_TH.json b/apps/user_ldap/l10n/th_TH.json deleted file mode 100644 index 609090470a4..00000000000 --- a/apps/user_ldap/l10n/th_TH.json +++ /dev/null @@ -1,156 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "ล้มเหลวขณะล้าง Mappings", - "Failed to delete the server configuration" : "ลบการกำหนดค่าเซิร์ฟเวอร์ล้มเหลว", - "The configuration is invalid: anonymous bind is not allowed." : "การกำหนดค่าไม่ถูกต้อง: การไม่ระบุตัวตนไม่ได้รับอนุญาต", - "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." : "การกำหนดค่าไม่ถูกต้อง ดูได้ที่บันทึกสำหรับรายละเอียดเพิ่มเติม", - "No action specified" : "ไม่ได้ระบุการดำเนินการ", - "No configuration specified" : "ไม่ได้กำหนดค่า", - "No data specified" : "ไม่มีข้อมูลที่ระบุ", - " Could not set configuration %s" : "ไม่สามารถตั้งค่า %s", - "Action does not exist" : "ไม่มีการดำเนินการ", - "The Base DN appears to be wrong" : "Base DN ดูเหมือนจะไม่ถูกต้อง", - "Testing configuration…" : "กำลังทดสอบการตั้งค่า ...", - "Configuration incorrect" : "การกำหนดค่าไม่ถูกต้อง", - "Configuration incomplete" : "กำหนดค่าไม่สำเร็จ", - "Configuration OK" : "กำหนดค่าเสร็จสมบูรณ์", - "Select groups" : "เลือกกลุ่ม", - "Select object classes" : "เลือกคลาสวัตถุ", - "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัวของพวกเขาดูเหมือนจะมีข้อผิดพลาด", - "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต มันไม่สามารถตรวจพบอัตโนมัติ", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN ไม่สามารถตรวจพบโดยอัตโนมัติกรุณาแก้ไขข้อมูลของโฮสต์และพอร์ต", - "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดเลือกด้วยตนเอง", - "{nthServer}. Server" : "เซิร์ฟเวอร์ {nthServer}", - "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุที่กำหนดใน Base DN กรุณาแก้ไข", - "More than 1,000 directory entries available." : "ไดเรกทอรีมีอยู่มากกว่า 1,000 รายการ", - " entries available within the provided Base DN" : "รายการที่มีอยู่ใน Base DN", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN เช่นเดียวกับการตั้งค่าการเชื่อมต่อและข้อมูลที่สำคัญ", - "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจแล้วหรือว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบันทิ้งไป?", - "Confirm Deletion" : "ยืนยันการลบทิ้ง", - "Mappings cleared successfully!" : "ล้าง Mappings เรียบร้อยแล้ว", - "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้าง Mappings", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "บุคคลนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", - "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP บุคคลนิรนามอาจจะไม่ได้รับอนุญาต ", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "บันทึกล้มเหลว โปรดตรวจสอบฐานข้อมูลที่อยู่ในการดำเนินงาน โหลดหน้าใหม่อีกครั้งก่อนดำเนินการต่อ", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "โหมดสลับจะช่วยค้นหา LDAP อัตโนมัติ ขึ้นอยู่กับขนาด LDAP ของคุณมันอาจใช้เวลาสักครู่ คุณยังยังต้องการใช้โหมดสลับ?", - "Mode switch" : "โหมดสลับ", - "Select attributes" : "เลือกคุณลักษณะ", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "ไม่พบผู้ใช้ กรุณาตรวจสอบคุณลักษณะการเข้าสู่ระบบและชื่อผู้ใช้ของคุณ ตัวกรองที่มีประสิทธิภาพ (การคัดลอกและวางสำหรับการตรวจสอบคำสั่งทีละบรรทัด): <br/>", - "User found and settings verified." : "พบผู้ใช้และการตั้งค่าได้รับการตรวจสอบแล้ว", - "An unspecified error occurred. Please check the settings and the log." : "เกิดข้อผิดพลาดที่ระบุไม่ได้ กรุณาตรวจสอบการตั้งค่าและบันทึกของคุณ", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้องอาจเป็นเพราะปัญหาไวยากรณ์เช่นหมายเลขที่ไม่สม่ำเสมอของวงเล็บเปิดและปิด กรุณาแก้ไข", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยัง LDAP/AD โปรดตรวจสอบโฮสต์พอร์ตและข้อมูลอื่นๆ", - "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "ตัวยึดตำแหน่ง %uid หายไป มันจะถูกแทนที่ด้วยชื่อที่ใช้ในการเข้าสู่ระบบเมื่อสอบถาม LDAP/AD", - "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบข้อขัดแย้ง", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "กล่องข้อความกลุ่มถูกปิดการใช้งานเนื่องจากเซิร์ฟเวอร์ LDAP/AD ไม่สนับสนุน memberOf", - "_%s group found_::_%s groups found_" : ["พบ %s กลุ่ม"], - "_%s user found_::_%s users found_" : ["พบผู้ใช้ %s คน"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "ไม่สามารถตรวจสอบคุณลักษณะการแสดงชื่อของผู้ใช้ กรุณาระบุการตั้งค่า LDAP ขั้นสูงด้วยตัวคุณเอง", - "Could not find the desired feature" : "ไม่พบคุณลักษณะที่ต้องการ", - "Invalid Host" : "โฮสต์ไม่ถูกต้อง", - "Test Configuration" : "ทดสอบการตั้งค่า", - "Help" : "ช่วยเหลือ", - "Groups meeting these criteria are available in %s:" : "การประชุมกลุ่มเหล่านี้มีหลักเกณฑ์อยู่ใน %s:", - "Only these object classes:" : "เฉพาะคลาสของวัตถุเหล่านี้:", - "Only from these groups:" : "เฉพาะจากกลุ่มเหล่านี้:", - "Search groups" : "ค้นหากลุ่ม", - "Available groups" : "กลุ่มที่สามารถใช้ได้", - "Selected groups" : "กลุ่มที่เลือก", - "Edit LDAP Query" : "แก้ไข LDAP Query", - "LDAP Filter:" : "ตัวกรอง LDAP:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "ระบุตัวกรองกลุ่ม LDAP ที่จะเข้าถึง %s", - "Verify settings and count groups" : "ตรวจสอบการตั้งค่าและจำนวนกลุ่มนับ", - "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะได้พบกับผู้ใช้ตามลักษณะดังต่อไปนี้:", - "LDAP / AD Username:" : "ชื่อผู้ใช้ LDAP/AD:", - "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "อนุญาตให้ผู้ใช้เข้าสู่ระบบ LDAP/AD ซึ่งเป็นทั้ง uid หรือ samAccountName และมันจะถูกตรวจพบ", - "LDAP / AD Email Address:" : "ที่อยู่อีเมล LDAP/AD:", - "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "อนุญาตให้เข้าสู่ระบบด้วยอีเมล Mail และ mailPrimaryAddress จะได้รับอนุญาต", - "Other Attributes:" : "คุณลักษณะอื่นๆ:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "กำหนดตัวกรองที่จะใช้ เมื่อพยายามเข้าสู่ระบบจะใช้ %%uid แทนชื่อผู้ใช้ในการดำเนินการเข้าสู่ระบบ ตัวอย่าง: \"uid=%%uid\"", - "Test Loginname" : "ทดสอบชื่อที่ใช้ในการเข้าสู่ระบบ", - "Verify settings" : "ตรวจสอบการตั้งค่า", - "1. Server" : "1. เซิร์ฟเวอร์", - "%s. Server:" : "เซิร์ฟเวอร์%s", - "Add a new and blank configuration" : "เพิ่มใหม่และการกำหนดค่าว่าง", - "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในไดเรกทอรีใหม่ที่ผูกกัน", - "Delete the current configuration" : "ลบการตั้งค่าปัจจุบัน", - "Host" : "โฮสต์", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "คุณสามารถปล่อยช่องโปรโตคอลเว้นไว้ได้, ยกเว้นกรณีที่คุณต้องการใช้ SSL จากนั้นเริ่มต้นด้วย ldaps://", - "Port" : "พอร์ต", - "Detect 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=agent, dc=example, dc=com, สำหรับการเข้าถึงโดยบุคคลนิรนาม, ให้เว้นว่าง DN และรหัสผ่านเอาไว้", - "Password" : "รหัสผ่าน", - "For anonymous access, leave DN and Password empty." : "สำหรับการเข้าถึงโดยบุคคลนิรนาม ให้เว้นว่าง DN และรหัสผ่านไว้", - "One Base DN per line" : "หนึ่ง Base DN ต่อหนึ่งบรรทัด", - "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่างๆในแท็บขั้นสูงได้", - "Detect Base DN" : "ตรวจพบ Base DN", - "Test Base DN" : "ทดสอบ Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงการร้องขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องมีความรู้เรื่อง LDAP", - "Manually enter LDAP filters (recommended for large directories)" : "ป้อนตัวกรอง LDAP ด้วยตนเอง (แนะนำสำหรับไดเรกทอรีขนาดใหญ่)", - "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." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหนโปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", - "The filter specifies which LDAP users shall have access to the %s instance." : "ระบุตัวกรองที่ผู้ใช้ LDAP จะมีการเข้าถึง %s", - "Verify settings and count users" : "ตรวจสอบการตั้งค่าและการนับจำนวนผู้ใช้", - "Saving" : "บันทึก", - "Back" : "ย้อนกลับ", - "Continue" : "ดำเนินการต่อ", - "LDAP" : "LDAP", - "Server" : "เซิร์ฟเวอร์", - "Users" : "ผู้ใช้งาน", - "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", - "Groups" : "กลุ่ม", - "Expert" : "ผู้เชี่ยวชาญ", - "Advanced" : "ขั้นสูง", - "<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> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง, ระบบด้านหลังจะไม่สามารถทำงานได้ กรุณาติดต่อผู้ดูแลระบบของคุณเพื่อทำการติดตั้งโมดูลดังกล่าว", - "Connection Settings" : "ตั้งค่าการเชื่อมต่อ", - "Configuration Active" : "ตั้งค่าการใช้งาน", - "When unchecked, this configuration will be skipped." : "ถ้าไม่เลือก การตั้งค่านี้จะถูกข้ามไป", - "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." : "เฉพาะเชื่อมต่อกับเซิร์ฟเวอร์แบบจำลอง", - "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." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL เซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", - "Cache Time-To-Live" : "แคช TTL", - "in seconds. A change empties the cache." : "ในอีกไม่กี่วินาที ระบบจะล้างข้อมูลในแคชให้ว่างเปล่า", - "Directory Settings" : "ตั้งค่าไดเร็กทอรี่", - "User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งาน", - "The LDAP attribute to use to generate the user's display name." : "คุณลักษณะ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของผู้ใช้", - "2nd User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งานคนที่ 2", - "Base User Tree" : "รายการผู้ใช้งานหลักแบบ Tree", - "One User Base DN per line" : "หนึ่งผู้ใช้ Base DN ต่อหนึ่งบรรทัด", - "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" : "รายการกลุ่มหลักแบบ Tree", - "One Group Base DN per line" : "หนึ่ง Group Base DN ต่อหนึ่งบรรทัด", - "Group Search Attributes" : "คุณลักษณะการค้นหาแบบกลุ่ม", - "Group-Member association" : "ความสัมพันธ์ของสมาชิกในกลุ่ม", - "Nested Groups" : "กลุ่มที่ซ้อนกัน", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มจะได้รับการสนันสนุน (เฉพาะการทำงานถ้าคุณลักษณะสมาชิกกลุ่มมี DN)", - "Paging chunksize" : "ขนาด Paging chunk", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize ใช้สำหรับการค้นหาเพจ LDAP มันส่งคืนผลลัพธ์ที่มีขนาดใหญ่เช่นการนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งาน)", - "Special Attributes" : "คุณลักษณะพิเศษ", - "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", - "Internal Username" : "ชื่อผู้ใช้ภายใน", - "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." : "โดยค่าเริ่มต้นแอตทริบิวต์ UUID มีถูกตรวจพบโดยอัตโนมัติ แอตทริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้ของ LDAP และกลุ่ม นอกจากนี้ยังมีชื่อผู้ใช้ภายในจะถูกสร้างขึ้นบนพื้นฐาน UUID หากไม่ได้ระบุไว้ข้างต้น คุณสามารถแทนที่การตั้งค่าและส่งแอตทริบิวต์ที่คุณเลือก คุณต้องให้แน่ใจว่าแอตทริบิวต์ที่คุณเลือกสามารถเป็นจริงสำหรับทั้งผู้ใช้และกลุ่มและมันควรจะไม่ซ้ำกัน ปล่อยให้มันว่างเปล่าสำหรับการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะในแมปใหม่ (เพิ่ม) ผู้ใช้ LDAP และกลุ่ม", - "UUID Attribute for Users:" : "แอตทริบิวต์ UUID สำหรับผู้ใช้:", - "UUID Attribute for Groups:" : "แอตทริบิวต์ UUID สำหรับกลุ่ม:", - "Username-LDAP User Mapping" : "Username-LDAP ผู้ใช้ Mapping", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an 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." : "ชื่อผู้ใช้จะใช้ในการจัดเก็บและกำหนดข้อมูล (เมตา) เพื่อรู้จักกับผู้ใช้และสามารถระบุได้อย่างแม่นยำ แต่ละ LDAP จะมีชื่อผู้ใช้ภายใน จึงต้องทำ Mapping ให้กับผู้ใช้ LDAP ชื่อผู้ใช้ที่ถูกสร้างขึ้นจะถูกแมปเข้ากับ UUID ของผู้ใช้ LDAP นอกจากนี้ DN ก็จะถูกแคชเช่นกันเพื่อลดการทำงานร่วมกันของ LDAP แต่มันก็ไม่ได้ใช้เพื่อระบุตัวตน หากมีการเปลี่ยนแปลง DN การเปลี่ยนแปลงจะถูกพบในทันที ชื่อผู้ใช้ภายในจะถูกใช้กับทั้งหมด การล้างแมปไม่มีผลต่อการกำหนดค่า LDAP ทั้งหมด! \nและจะเกิดขึ้นเฉพาะในการทดสอบหรือขั้นตอนการทดลอง", - "Clear Username-LDAP User Mapping" : "ล้าง Username-LDAP ผู้ใช้ Mapping", - "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "การตั้งค่าได้รับการตรวจสอบแล้ว แต่ผู้ใช้คนหนึ่งพบว่า มีเพียงครั้งแรกที่จะสามารถที่จะเข้าสู่ระบบ กรุณาพิจารณาตัวกรองที่จำกัดมากขึ้น" -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/tl_PH.js b/apps/user_ldap/l10n/tl_PH.js deleted file mode 100644 index 95c97db2f9c..00000000000 --- a/apps/user_ldap/l10n/tl_PH.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n > 1);"); diff --git a/apps/user_ldap/l10n/tl_PH.json b/apps/user_ldap/l10n/tl_PH.json deleted file mode 100644 index 8e0cd6f6783..00000000000 --- a/apps/user_ldap/l10n/tl_PH.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n > 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index e3bf2ce7dc8..d0f0f55c247 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -6,11 +6,12 @@ OC.L10N.register( "Invalid configuration: Anonymous binding is not allowed." : "Yapılandırma geçersiz: Adsız bağlantı kurulmasına izin verilmiyor.", "Valid configuration, connection established!" : "Yapılandırma geçerli, bağlantı kuruldu.", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Yapılandırma geçerli ancak bağlantı kurulamadı. Lütfen sunucu ayarları ve kimlik doğrulama bilgilerini denetleyin.", - "Invalid configuration. Please have a look at the logs for further details." : "Yapılandırma geçersiz. Lütfen ayrıntılı bilgi almak için günlük dosyasına bakın.", + "Invalid configuration: %s" : "Yapılandırma geçersiz: %s", "No action specified" : "Hehrangi bir işlem belirtilmemiş", "No configuration specified" : "Henüz bir yapılandırma belirtilmemiş", "No data specified" : "Henüz bir veri belirtilmemiş", - " Could not set configuration %s" : "%s yapılandırması ayarlanamadı", + "Invalid data specified" : "Belirtilen veriler geçersiz", + "Could not set configuration %1$s to %2$s" : "%1$s yapılandırması %2$s için ayarlanamadı", "Action does not exist" : "İşlem bulunamadı", "Renewing …" : "Yenileniyor …", "Very weak password" : "Parola çok zayıf", @@ -26,86 +27,104 @@ OC.L10N.register( "Select groups" : "Grupları seçin", "Select object classes" : "Nesne sınıflarını seçin", "Please check the credentials, they seem to be wrong." : "Lütfen kimlik doğrulama bilgilerini denetleyin, yanlış görünüyor.", - "Please specify the port, it could not be auto-detected." : "Lütfen kapı numarasını belirtin. Otomatik olarak algılanamadı.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN otomatik olarak algılanamadı. Lütfen kimlik doğrulama bilgilerini, sunucu ve kapı numarasını gözden geçirin.", - "Could not detect Base DN, please enter it manually." : "Base DN algılanamadı. Lütfen el ile yazın.", + "Please specify the port, it could not be auto-detected." : "Lütfen bağlantı noktasını belirtin. Otomatik olarak algılanamadı.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN otomatik olarak algılanamadı. Lütfen kimlik doğrulama bilgilerini, sunucu ve bağlantı noktasını gözden geçirin.", + "Could not detect Base DN, please enter it manually." : "Base DN algılanamadı. Lütfen el ile yazın.", "{nthServer}. Server" : "{nthServer}. Sunucu", "No object found in the given Base DN. Please revise." : "Belirtilen Base DN içerisinde herhangi bir nesne bulunamadı. Lütfen gözden geçirin.", - "More than 1,000 directory entries available." : "Kullanılabilecek 1000'den fazla dizin kaydı var.", + "More than 1,000 directory entries available." : "Kullanılabilecek dizin sayısı 1000 üzerinde.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Belirtilen Base DN üzerinde {objectsFound} kayıt var","Belirtilen Base DN üzerinde {objectsFound} kayıt var"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Bir sorun çıktı. Lütfen Base DN ile birlikte bağlantı ayarlarını ve kimlik doğrulama bilgilerini denetleyin.", "Do you really want to delete the current Server Configuration?" : "Geçerli sunucu yapılandırmasını silmek istediğinize emin misiniz?", - "Confirm Deletion" : "Silmeyi Onaylıyorum", + "Confirm Deletion" : "Silmeyi onaylıyorum", "Mappings cleared successfully!" : "Eşleştirmeler temizlendi!", - "Error while clearing the mappings." : "Eşleşmeler temizlenirken sorun çıktı.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonim atamaya izin verilmiyor. Lütfen bir Kullanıcı DN ve Parola belirtin.", + "Error while clearing the mappings." : "Eşleştirmeler temizlenirken sorun çıktı.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonim atamaya izin verilmiyor. Lütfen bir Kullanıcı DN ve parola belirtin.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP işleminde sorun çıktı. Anonim bağlamaya izin verilmiyor.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Kaydedilemedi. Veritabanının çalışıyor olduğundan emin olun. Devam etmeden yeniden yükleyin.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Kipi değiştirmek otomatik LDAP sorgularını etkinleştirir. LDAP sisteminizin boyutlarına göre bu işlem uzun sürebilir. Kipi yine de değiştirmek istiyor musunuz?", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Kaydedilemedi. Veri tabanının çalışıyor olduğundan emin olun. İlerlemeden önce yeniden yükleyin.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Kipi değiştirmek otomatik LDAP sorgularını açar. LDAP sisteminizin boyutlarına göre bu işlem uzun sürebilir. Kipi yine de değiştirmek istiyor musunuz?", "Mode switch" : "Kip değişimi", "Select attributes" : "Öznitelikleri seçin", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Kullanıcı bulunamadı. Lütfen oturum açma özniteliklerini ve kullanıcı adını denetleyin. Etkin süzgeç (komut satırı doğrulamasında kullanmak için kopyalayıp yapıştırın): <br/>", "User found and settings verified." : "Kullanıcı bulundu ve ayarlar doğrulandı.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Çok sayıda kullanıcı bulunduğundan ve yalnız birinci kullanıcı oturum açabileceğinden arama ölçütlerinizi sıkılaştırmayı deneyin.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Çok sayıda kullanıcı bulunduğundan ve yalnızca birinci kullanıcı oturum açabileceğinden arama ölçütlerinizi sıkılaştırmayı deneyin.", "An unspecified error occurred. Please check log and settings." : "Bilinmeyen bir sorun çıktı. Lütfen günlüğü ve ayarları denetleyin.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Arama süzgeci, açılmış ve kapatılmış parantez sayılarının eşit olmaması gibi bir söz dizimi sorunu nedeniyle geçersiz. Lütfen gözden geçirin.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD için bir bağlantı sorunu çıktı. Lütfen istemci, kapı numarası ve kimlik doğrulama bilgilerini denetleyin.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "LDAP / AD sorgularında kullanıcı adı ile değiştirilecek \"%uid\" yer belirleyicisi eksik. ", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Bir LDAP/AD bağlantı sorunu çıktı. Lütfen istemci, bağlantı noktası ve kimlik doğrulama bilgilerini denetleyin.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "LDAP/AD sorgularında kullanıcı adı ile değiştirilecek \"%uid\" yer belirleyicisi eksik. ", "Please provide a login name to test against" : "Lütfen deneme için kullanılacak bir kullanıcı adı yazın", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP / AD sunucusu memberOf parametresini desteklemediğinden grup kutusu devre dışı.", - "Password change rejected. Hint: " : "Parola değişimi reddedildi. İpucu:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "LDAP/AD sunucusu memberOf parametresini desteklemediğinden grup kutusu kullanımdan kaldırıldı.", + "Password change rejected. Hint: %s" : "Parola değişimi reddedildi. İpucu: %s", + "Mandatory field \"%s\" left empty" : "\"%s\" zorunlu alanı boş olamaz", + "A password is given, but not an LDAP agent" : "Bir parola belirtilmiş ancak bir LDAP aracısı değil", + "No password is given for the user agent" : "Kullanıcı uygulaması için bir parola belirtilmemiş", + "No LDAP base DN was given" : "LDAP base DN değeri belirtilmemiş", + "User base DN is not a subnode of global base DN" : "Kullanıcı base DN değeri genel base DN düğümünün bir alt düğümü değil ", + "Group base DN is not a subnode of global base DN" : "Grup base DN değeri genel base DN düğümünün bir alt düğümü değil ", + "Login filter does not contain %s placeholder." : "Oturum açma süzgecinde %s yer belirticisi bulunmuyor", "Please login with the new password" : "Lütfen yeni parolanız ile oturum açın", "LDAP User backend" : "LDAP kullanıcı arka yüzü", - "Your password will expire tomorrow." : "Parolanızın süresi yarın dolacak.", - "Your password will expire today." : "Parolanızın süresi bugün dolacak.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Parolanızın süresi %n gün içinde dolacak.","Parolanızın süresi %n gün içinde dolacak."], - "LDAP / AD integration" : "LDAP / AD bütünleştirmesi", - "_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"], - "_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"], + "Your password will expire tomorrow." : "Parolanızın geçerlilik süresi yarın dolacak.", + "Your password will expire today." : "Parolanızın geçerlilik süresi bugün dolacak.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Parolanızın süresi %n gün içinde dolacak.","Parolanızın geçerlilik süresi %n gün içinde dolacak."], + "LDAP/AD integration" : "LDAP/AD bütünleştirmesi", + "LDAP Connection" : "LDAP bağlantısı", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Bu LDAP yapılandırması için bağlantı kurulamadı: %s","%n LDAP yapılandırması için bağlantı kurulamadı: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Bu LDAP yapılandırması için arama tamamlanamadı: %s","%n LDAP yapılandırması için arama tamamlanamadı: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Etkin olmayan bir LDAP yapılandırması var: %s","Etkin olmayan %n LDAP yapılandırması var: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Yapılandırılmış LDAP bağlantısında (%s) bağlantı ve arama çalışıyor","Yapılandırılmış %n LDAP bağlantısında (%s) bağlantı ve arama çalışıyor"], + "Invalid LDAP UUIDs" : "LDAP UUID değerleri geçersiz", + "None found" : "Herhangi bir şey bulunamadı", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAP hesapları ya da grupları için geçersiz UUID değerleri bulundu. Lütfen LDAP yapılandırmasının Uzman bölümündeki \"UUID algılaması değiştirilsin\" seçeneğini gözden geçirin ve bunları güncellemek için \"occ ldap:update-uuid\" komutunu kullanın.", + "_%n group found_::_%n groups found_" : ["%n grup bulundu","%n grup bulundu"], + "> 1000 groups found" : "> 1000 grup bulundu", + "> 1000 users found" : "> 1000 kullanıcı bulundu", + "_%n user found_::_%n users found_" : ["%n kullanıcı bulundu","%n kullanıcı bulundu"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Görüntülenecek kullanıcı adı özniteliği algılanamadı. Lütfen gelişmiş LDAP ayarları bölümünden siz belirtin.", "Could not find the desired feature" : "İstenilen özellik bulunamadı", - "Invalid Host" : "Sunucu Geçersiz", + "Invalid Host" : "Sunucu geçersiz", "LDAP user and group backend" : "LDAP kullanıcı ve grup arka yüzü", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Bu uygulama BT yöneticilerinin Nextcloud sunucusu ile bir LDAP temelli kullanıcı dizini arasında bağlantı kurmasını sağlar.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Bu uygulama, yöneticilerin kimlik doğrulamak, kullanıcı ve grup oluşturmak ve kullanıcı öznitelikleri atamak için Nextcloud sunucusu ile LDAP temelli bir kullanıcı dizini arasında bağlantı kurmasını sağlar. Yöneticiler LDAP arayüzünden bu uygulamayı birden fazla LDAP dizini ya da Aktif Dizine bağlanacak şekilde yapılandırabilir. Kullanıcı kotası, e-posta, avatar görselleri, grup üyelikleri gibi kullanıcı öznitelikleri uygun sorgu ve süzgeçler kullanılarak dizin üzerinden Nextcloud üzerine çekilebilir.\n\nKullanıcılar Nextcloud oturumunu açmak için LDAP ya da AD kimlik doğrulama bilgilerini kullanır ve LDAP ya da AD sunucusunun vereceği onay ve izinlere göre erişim iznine sahip olur. Nextcloud üzerinde LDAP ya da AD parolaları depolanmaz. Bunun yerine bir kullanıcının kimliğini doğrulamak için kimlik doğrulama bilgileri kullanılır ve Nextcloud Kullanıcı Kodu için bir oturum kullanır. Ayrıntılı bilgi almak için LDAP Kullanıcı ve Grup Arka Yüzü belgelerine bakabilirsiniz.", - "Test Configuration" : "Yapılandırmayı Sına", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Bu uygulama, yöneticilerin kimlik doğrulamak, kullanıcı ve grup oluşturmak ve kullanıcı öznitelikleri atamak için Nextcloud sunucusu ile LDAP temelli bir kullanıcı dizini arasında bağlantı kurmasını sağlar. Yöneticiler LDAP arayüzünden bu uygulamayı birden fazla LDAP dizini ya da Aktif Dizine bağlanacak şekilde yapılandırabilir. Kullanıcı kotası, e-posta, avatar görselleri, grup üyelikleri gibi kullanıcı öznitelikleri uygun sorgu ve süzgeçler kullanılarak dizin üzerinden Nextcloud üzerine çekilebilir.\n\nKullanıcılar Nextcloud oturumunu açmak için LDAP ya da AD kimlik doğrulama bilgilerini kullanır ve LDAP ya da AD sunucusunun vereceği onay ve izinlere göre erişim iznine sahip olur. Nextcloud üzerinde LDAP ya da AD parolaları depolanmaz. Bunun yerine bir kullanıcının kimliğini doğrulamak için kimlik doğrulama bilgileri kullanılır ve Nextcloud kullanıcı kimliği için bir oturum kullanır. Ayrıntılı bilgi almak için LDAP Kullanıcı ve Grup Arka Yüzü belgelerine bakabilirsiniz.", + "Test Configuration" : "Yapılandırmayı sına", "Help" : "Yardım", "Groups meeting these criteria are available in %s:" : "%s içinde bu ölçüte uygun gruplar var:", - "Only these object classes:" : "Yalnız şu nesne sınıflarına:", - "Only from these groups:" : "Yalnız şu gruplardan:", + "Only these object classes:" : "Yalnızca şu nesne sınıflarına:", + "Only from these groups:" : "Yalnızca şu gruplardan:", "Search groups" : "Grup arama", "Available groups" : "Kullanılabilecek gruplar", "Selected groups" : "Seçilmiş gruplar", - "Edit LDAP Query" : "LDAP Sorgusunu Düzenle", - "LDAP Filter:" : "LDAP Süzgeci:", + "Edit LDAP Query" : "LDAP sorgusunu düzenle", + "LDAP Filter:" : "LDAP süzgeci:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Süzgeçte %s kopyasına erişebilecek LDAP grupları belirtilir.", "Verify settings and count the groups" : "Ayarları doğrula ve grupları say", "When logging in, %s will find the user based on the following attributes:" : "Oturum açılırken, %s, aşağıdaki özniteliklere bağlı kullanıcıyı bulur:", - "LDAP / AD Username:" : "LDAP / AD Kullanıcı Adı:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP / AD kullanıcı adı ile oturum açılmasını sağlar. Kullanıcı adı \"uid\" ya da \"sAMAccountName\" olabilir ve algılanır.", - "LDAP / AD Email Address:" : "LDAP / AD E-posta Adresi:", + "LDAP/AD Username:" : "LDAP/AD kullanıcı adı:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/AD kullanıcı adı ile oturum açılmasını sağlar. Kullanıcı adı \"uid\" ya da \"sAMAccountName\" olabilir ve algılanır.", + "LDAP/AD Email Address:" : "LDAP/AD e-posta adresi:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "E-posta adresi ile oturum açılmasını sağlar. \"mail\" ve \"mailPrimaryAddress\" kullanılabilir.", - "Other Attributes:" : "Diğer Öznitelikler:", + "Other Attributes:" : "Diğer öznitelikler:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Oturum açma girişiminde uygulanacak süzgeci tanımlar. Oturum açma işleminde \"%%uid\" kullanıcı adı ile değiştirilir. Örnek: \"uid=%%uid\"", "Test Loginname" : "Kullanıcı adını sına", + "Attempts to receive a DN for the given loginname and the current login filter" : "Belirtilen oturum açma adı ve geçerli oturum açma süzgeci için bir etki alanı adı almayı dener", "Verify settings" : "Ayarları doğrula", - "%s. Server:" : "%s. Sunucu:", + "%s. Server:" : "%s. sunucu:", "Add a new configuration" : "Yeni bir yapılandırma ekle", "Copy current configuration into new directory binding" : "Geçerli yapılandırmayı yeni dizin bağlamasına kopyala", "Delete the current configuration" : "Geçerli yapılandırmayı sil", "Host" : "Sunucu", "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "SSL gerekmiyorsa iletişim kuralı belirtilmeyebilir. Gerekiyorsa ldaps:// ile başlayın", - "Port" : "Kapı Numarası", - "Detect Port" : "Kapı Numarasını Algıla", + "Port" : "Bağlantı noktası", + "Detect Port" : "Bağlantı noktasını algıla", "User DN" : "Kullanıcı 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." : "Yapılacak bağlama için iİstemci kullanıcısının DN değeri. Örnek: uid=agent,dc=ornek,dc=com. Anonim erişim için DN ve Parolayı boş bırakın.", "Password" : "Parola", - "For anonymous access, leave DN and Password empty." : "Anonim erişim için DN ve Parolayı boş bırakın.", - "Save Credentials" : "Kimlik Doğrulama Bilgilerini Kaydet", + "For anonymous access, leave DN and Password empty." : "Anonim erişim için DN ve parolayı boş bırakın.", + "Save Credentials" : "Kimlik doğrulama bilgilerini kaydet", "One Base DN per line" : "Her satıra bir Base DN yazın", "You can specify Base DN for users and groups in the Advanced tab" : "Gelişmiş sekmesinde, kullanıcı ve gruplar için Base DN belirtilebilir", - "Detect Base DN" : "Base DN Algıla", - "Test Base DN" : "Base DN Sına", + "Detect Base DN" : "Base DN algıla", + "Test Base DN" : "Base DN sına", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Otomatik LDAP isteklerinden kaçınılsın. Büyük kurulumlar için daha iyidir ancak LDAP bilgisi gerektirir.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP süzgeçlerini el ile yazın (büyük dizinler için önerilir)", "Listing and searching for users is constrained by these criteria:" : "Kullanıcı listeleme ve arama şu ölçütü göre kısıtlanmış:", @@ -117,7 +136,7 @@ OC.L10N.register( "Continue" : "Sürdür", "Please renew your password." : "Lütfen parolanızı yenileyin.", "An internal error occurred." : "İçeride bir sorun çıktı.", - "Please try again or contact your administrator." : "Lütfen yeniden deneyin ya da yöneticinizle görüşün.", + "Please try again or contact your administrator." : "Lütfen yeniden deneyin ya da yöneticiniz ile görüşün.", "Current password" : "Geçerli parola", "New password" : "Yeni parola", "Renew password" : "Parolayı yenile", @@ -129,66 +148,92 @@ OC.L10N.register( "Groups" : "Gruplar", "Expert" : "Uzman", "Advanced" : "Gelişmiş", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Uyarı:</b> PHP LDAP modülü kurulmamış, arka uç çalışmayacak. Lütfen kurması için BT yöneticinizle görüşün.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Uyarı:</b> PHP LDAP modülü kurulmamış, arka yüz çalışmayacak. Lütfen kurması için BT yöneticiniz ile görüşün.", "Connection Settings" : "Bağlantı Ayarları", - "Configuration Active" : "Yapılandırma Etkin", + "Configuration Active" : "Yapılandırma etkin", "When unchecked, this configuration will be skipped." : "Bu seçenek işaretli değilse, bu yapılandırma atlanır.", "Backup (Replica) Host" : "Yedek (Replika) Sunucu", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "İsteğe bağlı olarak bir yedekleme sunucusu belirtin. Ana LDAP/AD sunucusunun kopyası olmalıdır.", - "Backup (Replica) Port" : "Yedek (Replika) Kapı Numarası", - "Disable Main Server" : "Ana Sunucuyu Devre Dışı Bırak", - "Only connect to the replica server." : "Yalnız yedek sunucu ile bağlantı kurulsun.", + "Backup (Replica) Port" : "Yedek (Replika) bağlantı noktası", + "Disable Main Server" : "Ana sunucuyu kullanımdan kaldır", + "Only connect to the replica server." : "Yalnızca yedek sunucu ile bağlantı kurulsun.", "Turn off SSL certificate validation." : "SSL sertifika doğrulaması kullanılmasın.", - "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." : "Önerilmez, yalnız deneme amacıyla kullanın! Bağlantı yalnız bu seçenek etkinleştirildiğinde çalışıyorsa LDAP sunucusunun SSL sertifikasını %s sunucuzun içine aktarın.", + "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." : "Önerilmez, yalnızca deneme amacıyla kullanın! Bağlantı yalnızca bu seçenek ile çalışıyorsa LDAP sunucusunun SSL sertifikasını %s sunucuzun içine aktarın.", "Cache Time-To-Live" : "Ön Bellek Time-To-Live Değeri", "in seconds. A change empties the cache." : "saniye cinsinden. Değişiklik ön belleği temizler.", "Directory Settings" : "Dizin Ayarları", "User Display Name Field" : "Görüntülenecek Kullanıcı Adı Alanı", - "The LDAP attribute to use to generate the user's display name." : "Görüntülenecek kullanıcı adını oluşturmak için kullanılacak LDAP özniteliği.", + "The LDAP attribute to use to generate the user's display name." : "Görüntülenecek kullanıcı adını üretmek için kullanılacak LDAP özniteliği.", "2nd User Display Name Field" : "2. Görüntülenecek Kullanıcı Adı Alanı", "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "İsteğe bağlı. Görüntülenecek ada parantez içinde eklenecek LDAP özniteliği. Örnek sonuç: »John Doe (john.doe@example.org)«.", "Base User Tree" : "Temel Kullanıcı Ağacı", "One User Base DN per line" : "Her Satıra Bir Kullanıcı Base DN", - "User Search Attributes" : "Kullanıcı Arama Öznitelikleri", + "User Search Attributes" : "Kullanıcı arama öznitelikleri", "Optional; one attribute per line" : "İsteğe bağlı; her satıra bir öznitelik", + "Disable users missing from LDAP" : "LDAP üzerinde bulunmayan kullanıcılar kullanımdan kaldırılsın", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Açıldığında, LDAP üzerinden içe aktarılmış ancak daha sonra kaybolmuş kullanıcılar kullanımdan kaldırılır", "Group Display Name Field" : "Görüntülenecek Grup Adı Alanı", - "The LDAP attribute to use to generate the groups's display name." : "Görüntülenecek grup adını oluşturmak için kullanılacak LDAP özniteliği.", + "The LDAP attribute to use to generate the groups's display name." : "Görüntülenecek grup adını üretmek için kullanılacak LDAP özniteliği.", "Base Group Tree" : "Temel Grup Ağacı", "One Group Base DN per line" : "Her Satıra Bir Grup Base DN", "Group Search Attributes" : "Grup Arama Öznitelikleri", "Group-Member association" : "Grup-Üye İlişkisi", "Dynamic Group Member URL" : "Devingen Grup Üye Adresi", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Bu grup nesneleri üzerindeki LDAP özniteliği, grupa hangi nesnelerin ait olduğunu bulan bir LDAP arama adresi içeriyor (Seçenek boş bırakıldığında dinamik grup üyeliği özelliği devre dışı kalır).", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Bu grup nesneleri üzerindeki LDAP özniteliğinde, gruba hangi nesnelerin ait olduğunu bulan bir LDAP arama adresi bulunuyor (seçenek boş bırakıldığında dinamik grup üyeliği özelliği kapatılır).", "Nested Groups" : "İç İçe Gruplar", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Bu seçenek etkinleştirildiğinde, gruplar içinde gruplar desteklenir (Yalnız grup üyesi özniteliği DN içeriyorsa çalışır).", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Açılırsa, gruplar içinde gruplar desteklenir (Yalnızca grup üyesi özniteliğinde DN bulunuyorsa çalışır).", "Paging chunksize" : "Sayfalandırma yığın boyutu", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Yığın boyutu, kullanıcı ya da grup listeleri gibi, çok sayıda sonuç verebilen sayfalandırılmış LDAP aramaları için kullanılır (0 olarak ayarlandığında bu durumlarda sayfalandırılmış LDAP aramaları devre dışı kalır).", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Yığın boyutu, kullanıcı ya da grup listeleri gibi, çok sayıda sonuç verebilen sayfalandırılmış LDAP aramaları için kullanılır (0 olarak ayarlandığında bu durumlarda sayfalandırılmış LDAP aramaları kapatılır).", "Enable LDAP password changes per user" : "Kullanıcılar LDAP parolalarını değiştirebilsin", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : " Bu seçenek etkinleştirildiğinde, LDAP kullanıcıları kendi parolalarını değiştirebilir ve Süper Yöneticiler ile Grup Yöneticileri kendi LDAP kullanıcılarının parolalarını değiştirebilir. Yalnız erişim denetimi ilkeleri LDAP sunucuya uygun olarak yapılandırılmış ise çalışır. Parolalar LDAP sunucuya düz metin biçiminde aktarıldığından, LDAP sunucu üzerinde aktarım şifrelemesi ve parola karması kullanılmalıdır.", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP kullanıcıları kendi parolalarını değiştirebilir ve Süper Yöneticiler ile Grup Yöneticileri kendi LDAP kullanıcılarının parolalarını değiştirebilir. Yalnızca erişim denetimi ilkeleri LDAP sunucusuna uygun olarak yapılandırılmış ise çalışır. Parolalar LDAP sunucusuna düz metin biçiminde aktarıldığından, LDAP sunucusu üzerinde aktarım şifrelemesi ve parola karması kullanılmalıdır.", "(New password is sent as plain text to LDAP)" : "(Yeni parola LDAP üzerine düz metin olarak gönderildi)", "Default password policy DN" : "Varsayılan parola ilkesi DN", - "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Parola süresinin sona erme işlemleri için kullanılacak varsayılan parola ilkesi için DN. Yalnız her kullanıcı için LDAP parola değişikliği etkinleştirilmiş ise çalışır ve yalnız OpenLDAP tarafından desteklenir. Parola süresi sona erme işlemlerini devre dışı bırakmak için boş bırakın.", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Parola geçerlilik süresinin sona erme işlemleri için kullanılacak varsayılan parola ilkesinin etki alanı adı (DN). Yalnızca her kullanıcı için LDAP parola değişikliği açıksa çalışır ve yalnızca OpenLDAP tarafından desteklenir. Parola süresi sona erme işlemlerini kapatmak için boş bırakın.", "Special Attributes" : "Özel Öznitelikler", "Quota Field" : "Kota Alanı", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Kullanıcının varsayılan kotasının kullanılması için boş bırakın ya da bir LDAP/AD özniteliği belirtin.", "Quota Default" : "Varsayılan Kota", "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Kota Alanına bir kota değeri yazılmamış olan LDAP kullanıcıları için kullanılacak varsayılan kota değerini yazın.", - "Email Field" : "E-posta Alanı", + "Email Field" : "E-posta alanı", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Kullanıcı varsayılan e-posta adresinin kullanılması için boş bırakın ya da bir LDAP/AD özniteliği belirtin.", "User Home Folder Naming Rule" : "Kullanıcı Ana Klasörünü Adlandırma Kuralı", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Kullanıcı adının kullanılması için boş bırakın (varsayılan) ya da bir LDAP/AD özniteliği belirtin.", "\"$home\" Placeholder Field" : "\"$home\" Yer Belirleyici Alanı", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Bir dış depolama yapılandırmasında $home yerine belirtilen öznitelik konulur", - "Internal Username" : "İç Kullanıcı Adı", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Varsayılan olarak, iç kullanıcı adı UUID özniteliğinden oluşturulur. Böylece kullanıcı adının eşsiz olması ve dönüştürülmesi gereken karakterler içermediğinden emin olunur. İç kullanıcı adında kısıtlaması yalnız şu karakterleri kullanılabilir: [ a-zA-Z0-9_.@- ]. Diğer karakterler ASCII karşılıklarına dönüştürülür ya da yok sayılır. Çakışmalarda ada bir sayı eklenir. İç kullanıcı adı bir kullanıcıyı içsel olarak belirlemeye yarar. Aynı zamanda kullanıcı ana klasörünün varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin *DAV servislerinin bir parçasıdır. Bu seçenek ile varsayılan davranış değiştirilebilir. Varsayılan davranışı kullanmak için boş bırakın. Değişiklikler yalnız yeni eşleştirilecek (eklenecek) LDAP kullanıcılarını etkiler.", - "Internal Username Attribute:" : "İç Kullanıcı Adı Özniteliği:", - "Override UUID detection" : "UUID algılamasını değiştir", - "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." : "Varsayılan olarak, UUID özniteliği otomatik olarak algılanır. UUID özniteliği LDAP kullanıcı ve gruplarını kesin olarak belirlemek için kullanılır. Yukarıda başka türlü belirtilmemişse, bu UUID için bir iç kullanıcı adı oluşturulur. Bu ayarı değiştirerek istenilen bir öznitelik belirtilebilir. Ancak istenilen özniteliğin eşsiz olduğundan ve hem kullanıcı hem de gruplar tarafından kullanıldığından emin olunmalıdır. Varsayılan davranış için boş bırakın. Değişiklikler yalnız yeni eşleştirilen (eklenen) LDAP kullanıcı ve gruplarını etkiler.", + "User Profile Attributes" : "Kullanıcı profili öznitelikleri", + "Phone Field" : "Telefon alanı", + "User profile Phone will be set from the specified attribute" : "Kullanıcı profilindeki telefon alanının değeri belirtilen öznitelikten alınır", + "Website Field" : "Site alanı", + "User profile Website will be set from the specified attribute" : "Kullanıcı profilindeki site alanının değeri belirtilen öznitelikten alınır", + "Address Field" : "Adres alanı", + "User profile Address will be set from the specified attribute" : "Kullanıcı profilindeki adres alanının değeri belirtilen öznitelikten alınır", + "Twitter Field" : "Twitter alanı", + "User profile Twitter will be set from the specified attribute" : "Kullanıcı profilindeki Twitter alanının değeri belirtilen öznitelikten alınır", + "Fediverse Field" : "Fediverse alanı", + "User profile Fediverse will be set from the specified attribute" : "Kullanıcı profilindeki Fediverse alanının değeri belirtilen öznitelikten alınır", + "Organisation Field" : "Kuruluş alanı", + "User profile Organisation will be set from the specified attribute" : "Kullanıcı profilindeki kuruluş alanının değeri belirtilen öznitelikten alınır", + "Role Field" : "Rol alanı", + "User profile Role will be set from the specified attribute" : "Kullanıcı profilindeki rol alanının değeri belirtilen öznitelikten alınır", + "Headline Field" : "Başlık alanı", + "User profile Headline will be set from the specified attribute" : "Kullanıcı profilindeki başlık alanının değeri belirtilen öznitelikten alınır", + "Biography Field" : "Özgeçmiş alanı", + "User profile Biography will be set from the specified attribute" : "Kullanıcı profilindeki özgeçmiş alanının değeri belirtilen öznitelikten alınır", + "Birthdate Field" : "Doğum tarihi alanı", + "User profile Date of birth will be set from the specified attribute" : "Kullanıcı profilindeki doğum tarihi alanının değeri belirtilen öznitelikten alınır", + "Pronouns Field" : "Hitap alanı", + "User profile Pronouns will be set from the specified attribute" : "Kullanıcı profilindeki hitap alanının değeri belirtilen öznitelikten alınır", + "Internal Username" : "İç kullanıcı adı", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Varsayılan olarak, iç kullanıcı adı UUID özniteliğinden oluşturulur. Böylece kullanıcı adının eşsiz olması ve dönüştürülmesi gereken karakterler içermediğinden emin olunur. İç kullanıcı adında kısıtlaması yalnızca şu karakterleri kullanılabilir: [ a-zA-Z0-9_.@-]. Diğer karakterler ASCII karşılıklarına dönüştürülür ya da yok sayılır. Çakışmalarda ada bir sayı eklenir. İç kullanıcı adı bir kullanıcıyı içsel olarak belirlemeye yarar. Aynı zamanda kullanıcı ana klasörünün varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin DAV hizmetlerinin bir parçasıdır. Bu seçenek ile varsayılan davranış değiştirilebilir. Değişiklikler yalnızca yeni eşleştirilecek (eklenecek) LDAP kullanıcılarını etkiler. Varsayılan davranışın kullanılması için boş bırakın.", + "Internal Username Attribute:" : "İç kullanıcı adı özniteliği:", + "Override UUID detection" : "UUID algılaması değiştirilsin", + "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." : "Varsayılan olarak, UUID özniteliği otomatik olarak algılanır. UUID özniteliği LDAP kullanıcı ve gruplarını kesin olarak belirlemek için kullanılır. Yukarıda başka türlü belirtilmemişse, bu UUID için bir iç kullanıcı adı oluşturulur. Bu ayarı değiştirerek istenilen bir öznitelik belirtilebilir. Ancak istenilen özniteliğin eşsiz olduğundan ve hem kullanıcı hem de gruplar tarafından kullanıldığından emin olunmalıdır. Varsayılan davranış için boş bırakın. Değişiklikler yalnızca yeni eşleştirilen (eklenen) LDAP kullanıcı ve gruplarını etkiler.", "UUID Attribute for Users:" : "Kullanıcılar için UUID Özniteliği:", "UUID Attribute for Groups:" : "Gruplar için UUID Özniteliği:", "Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirme", - "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Kullanıcı adları, üst veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak belirlemek ve algılamak için, her LDAP kullanıcısına bir iç kullanıcı verilir. Bu kullanıcı adı ile LDAP kullanıcısının eşleştirilmesi gerekir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID değeri ile eşleştirilir. Bunun yanında LDAP etkileşimini azaltmak için DN ön belleğe alınır ancak bu işlem kimlik belirleme için kullanılmaz. DN üzerinde yapılan değişiklikler aktarılır. İç kullanıcı her yerde kullanıldığından, bir eşleştirmeyi kaldırmak pek çok yerde kalıntılar bırakır. Eşleştirmeleri kaldırmak yalnız yapılandırmaya bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla kaldırmayın, yalnız sınama ya da deney aşamalarında kullanın.", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Kullanıcı adları, üst veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak belirlemek ve algılamak için, her LDAP kullanıcısına bir iç kullanıcı verilir. Bu kullanıcı adı ile LDAP kullanıcısının eşleştirilmesi gerekir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID değeri ile eşleştirilir. Bunun yanında LDAP etkileşimini azaltmak için DN ön belleğe alınır ancak bu işlem kimlik belirleme için kullanılmaz. DN üzerinde yapılan değişiklikler aktarılır. İç kullanıcı her yerde kullanıldığından, bir eşleştirmeyi kaldırmak pek çok yerde kalıntılar bırakır. Eşleştirmeleri kaldırmak yalnızca yapılandırmaya bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla kaldırmayın, yalnızca sınama ya da deney aşamalarında kullanın.", "Clear Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirmesini Kaldır", - "Clear Groupname-LDAP Group Mapping" : "Grup Adı-LDAP Grubu Eşleştirmesini Kaldır" + "Clear Groupname-LDAP Group Mapping" : "Grup Adı-LDAP Grubu Eşleştirmesini Kaldır", + "Invalid configuration. Please have a look at the logs for further details." : "Yapılandırma geçersiz. Lütfen ayrıntılı bilgi almak için günlük dosyasına bakın." }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index 909e5c91a15..f5c2c7306dd 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -4,11 +4,12 @@ "Invalid configuration: Anonymous binding is not allowed." : "Yapılandırma geçersiz: Adsız bağlantı kurulmasına izin verilmiyor.", "Valid configuration, connection established!" : "Yapılandırma geçerli, bağlantı kuruldu.", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Yapılandırma geçerli ancak bağlantı kurulamadı. Lütfen sunucu ayarları ve kimlik doğrulama bilgilerini denetleyin.", - "Invalid configuration. Please have a look at the logs for further details." : "Yapılandırma geçersiz. Lütfen ayrıntılı bilgi almak için günlük dosyasına bakın.", + "Invalid configuration: %s" : "Yapılandırma geçersiz: %s", "No action specified" : "Hehrangi bir işlem belirtilmemiş", "No configuration specified" : "Henüz bir yapılandırma belirtilmemiş", "No data specified" : "Henüz bir veri belirtilmemiş", - " Could not set configuration %s" : "%s yapılandırması ayarlanamadı", + "Invalid data specified" : "Belirtilen veriler geçersiz", + "Could not set configuration %1$s to %2$s" : "%1$s yapılandırması %2$s için ayarlanamadı", "Action does not exist" : "İşlem bulunamadı", "Renewing …" : "Yenileniyor …", "Very weak password" : "Parola çok zayıf", @@ -24,86 +25,104 @@ "Select groups" : "Grupları seçin", "Select object classes" : "Nesne sınıflarını seçin", "Please check the credentials, they seem to be wrong." : "Lütfen kimlik doğrulama bilgilerini denetleyin, yanlış görünüyor.", - "Please specify the port, it could not be auto-detected." : "Lütfen kapı numarasını belirtin. Otomatik olarak algılanamadı.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN otomatik olarak algılanamadı. Lütfen kimlik doğrulama bilgilerini, sunucu ve kapı numarasını gözden geçirin.", - "Could not detect Base DN, please enter it manually." : "Base DN algılanamadı. Lütfen el ile yazın.", + "Please specify the port, it could not be auto-detected." : "Lütfen bağlantı noktasını belirtin. Otomatik olarak algılanamadı.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN otomatik olarak algılanamadı. Lütfen kimlik doğrulama bilgilerini, sunucu ve bağlantı noktasını gözden geçirin.", + "Could not detect Base DN, please enter it manually." : "Base DN algılanamadı. Lütfen el ile yazın.", "{nthServer}. Server" : "{nthServer}. Sunucu", "No object found in the given Base DN. Please revise." : "Belirtilen Base DN içerisinde herhangi bir nesne bulunamadı. Lütfen gözden geçirin.", - "More than 1,000 directory entries available." : "Kullanılabilecek 1000'den fazla dizin kaydı var.", + "More than 1,000 directory entries available." : "Kullanılabilecek dizin sayısı 1000 üzerinde.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Belirtilen Base DN üzerinde {objectsFound} kayıt var","Belirtilen Base DN üzerinde {objectsFound} kayıt var"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Bir sorun çıktı. Lütfen Base DN ile birlikte bağlantı ayarlarını ve kimlik doğrulama bilgilerini denetleyin.", "Do you really want to delete the current Server Configuration?" : "Geçerli sunucu yapılandırmasını silmek istediğinize emin misiniz?", - "Confirm Deletion" : "Silmeyi Onaylıyorum", + "Confirm Deletion" : "Silmeyi onaylıyorum", "Mappings cleared successfully!" : "Eşleştirmeler temizlendi!", - "Error while clearing the mappings." : "Eşleşmeler temizlenirken sorun çıktı.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonim atamaya izin verilmiyor. Lütfen bir Kullanıcı DN ve Parola belirtin.", + "Error while clearing the mappings." : "Eşleştirmeler temizlenirken sorun çıktı.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonim atamaya izin verilmiyor. Lütfen bir Kullanıcı DN ve parola belirtin.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP işleminde sorun çıktı. Anonim bağlamaya izin verilmiyor.", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Kaydedilemedi. Veritabanının çalışıyor olduğundan emin olun. Devam etmeden yeniden yükleyin.", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Kipi değiştirmek otomatik LDAP sorgularını etkinleştirir. LDAP sisteminizin boyutlarına göre bu işlem uzun sürebilir. Kipi yine de değiştirmek istiyor musunuz?", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Kaydedilemedi. Veri tabanının çalışıyor olduğundan emin olun. İlerlemeden önce yeniden yükleyin.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Kipi değiştirmek otomatik LDAP sorgularını açar. LDAP sisteminizin boyutlarına göre bu işlem uzun sürebilir. Kipi yine de değiştirmek istiyor musunuz?", "Mode switch" : "Kip değişimi", "Select attributes" : "Öznitelikleri seçin", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Kullanıcı bulunamadı. Lütfen oturum açma özniteliklerini ve kullanıcı adını denetleyin. Etkin süzgeç (komut satırı doğrulamasında kullanmak için kopyalayıp yapıştırın): <br/>", "User found and settings verified." : "Kullanıcı bulundu ve ayarlar doğrulandı.", - "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Çok sayıda kullanıcı bulunduğundan ve yalnız birinci kullanıcı oturum açabileceğinden arama ölçütlerinizi sıkılaştırmayı deneyin.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Çok sayıda kullanıcı bulunduğundan ve yalnızca birinci kullanıcı oturum açabileceğinden arama ölçütlerinizi sıkılaştırmayı deneyin.", "An unspecified error occurred. Please check log and settings." : "Bilinmeyen bir sorun çıktı. Lütfen günlüğü ve ayarları denetleyin.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Arama süzgeci, açılmış ve kapatılmış parantez sayılarının eşit olmaması gibi bir söz dizimi sorunu nedeniyle geçersiz. Lütfen gözden geçirin.", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD için bir bağlantı sorunu çıktı. Lütfen istemci, kapı numarası ve kimlik doğrulama bilgilerini denetleyin.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "LDAP / AD sorgularında kullanıcı adı ile değiştirilecek \"%uid\" yer belirleyicisi eksik. ", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Bir LDAP/AD bağlantı sorunu çıktı. Lütfen istemci, bağlantı noktası ve kimlik doğrulama bilgilerini denetleyin.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "LDAP/AD sorgularında kullanıcı adı ile değiştirilecek \"%uid\" yer belirleyicisi eksik. ", "Please provide a login name to test against" : "Lütfen deneme için kullanılacak bir kullanıcı adı yazın", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP / AD sunucusu memberOf parametresini desteklemediğinden grup kutusu devre dışı.", - "Password change rejected. Hint: " : "Parola değişimi reddedildi. İpucu:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "LDAP/AD sunucusu memberOf parametresini desteklemediğinden grup kutusu kullanımdan kaldırıldı.", + "Password change rejected. Hint: %s" : "Parola değişimi reddedildi. İpucu: %s", + "Mandatory field \"%s\" left empty" : "\"%s\" zorunlu alanı boş olamaz", + "A password is given, but not an LDAP agent" : "Bir parola belirtilmiş ancak bir LDAP aracısı değil", + "No password is given for the user agent" : "Kullanıcı uygulaması için bir parola belirtilmemiş", + "No LDAP base DN was given" : "LDAP base DN değeri belirtilmemiş", + "User base DN is not a subnode of global base DN" : "Kullanıcı base DN değeri genel base DN düğümünün bir alt düğümü değil ", + "Group base DN is not a subnode of global base DN" : "Grup base DN değeri genel base DN düğümünün bir alt düğümü değil ", + "Login filter does not contain %s placeholder." : "Oturum açma süzgecinde %s yer belirticisi bulunmuyor", "Please login with the new password" : "Lütfen yeni parolanız ile oturum açın", "LDAP User backend" : "LDAP kullanıcı arka yüzü", - "Your password will expire tomorrow." : "Parolanızın süresi yarın dolacak.", - "Your password will expire today." : "Parolanızın süresi bugün dolacak.", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Parolanızın süresi %n gün içinde dolacak.","Parolanızın süresi %n gün içinde dolacak."], - "LDAP / AD integration" : "LDAP / AD bütünleştirmesi", - "_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"], - "_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"], + "Your password will expire tomorrow." : "Parolanızın geçerlilik süresi yarın dolacak.", + "Your password will expire today." : "Parolanızın geçerlilik süresi bugün dolacak.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Parolanızın süresi %n gün içinde dolacak.","Parolanızın geçerlilik süresi %n gün içinde dolacak."], + "LDAP/AD integration" : "LDAP/AD bütünleştirmesi", + "LDAP Connection" : "LDAP bağlantısı", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Bu LDAP yapılandırması için bağlantı kurulamadı: %s","%n LDAP yapılandırması için bağlantı kurulamadı: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Bu LDAP yapılandırması için arama tamamlanamadı: %s","%n LDAP yapılandırması için arama tamamlanamadı: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Etkin olmayan bir LDAP yapılandırması var: %s","Etkin olmayan %n LDAP yapılandırması var: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Yapılandırılmış LDAP bağlantısında (%s) bağlantı ve arama çalışıyor","Yapılandırılmış %n LDAP bağlantısında (%s) bağlantı ve arama çalışıyor"], + "Invalid LDAP UUIDs" : "LDAP UUID değerleri geçersiz", + "None found" : "Herhangi bir şey bulunamadı", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAP hesapları ya da grupları için geçersiz UUID değerleri bulundu. Lütfen LDAP yapılandırmasının Uzman bölümündeki \"UUID algılaması değiştirilsin\" seçeneğini gözden geçirin ve bunları güncellemek için \"occ ldap:update-uuid\" komutunu kullanın.", + "_%n group found_::_%n groups found_" : ["%n grup bulundu","%n grup bulundu"], + "> 1000 groups found" : "> 1000 grup bulundu", + "> 1000 users found" : "> 1000 kullanıcı bulundu", + "_%n user found_::_%n users found_" : ["%n kullanıcı bulundu","%n kullanıcı bulundu"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Görüntülenecek kullanıcı adı özniteliği algılanamadı. Lütfen gelişmiş LDAP ayarları bölümünden siz belirtin.", "Could not find the desired feature" : "İstenilen özellik bulunamadı", - "Invalid Host" : "Sunucu Geçersiz", + "Invalid Host" : "Sunucu geçersiz", "LDAP user and group backend" : "LDAP kullanıcı ve grup arka yüzü", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Bu uygulama BT yöneticilerinin Nextcloud sunucusu ile bir LDAP temelli kullanıcı dizini arasında bağlantı kurmasını sağlar.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Bu uygulama, yöneticilerin kimlik doğrulamak, kullanıcı ve grup oluşturmak ve kullanıcı öznitelikleri atamak için Nextcloud sunucusu ile LDAP temelli bir kullanıcı dizini arasında bağlantı kurmasını sağlar. Yöneticiler LDAP arayüzünden bu uygulamayı birden fazla LDAP dizini ya da Aktif Dizine bağlanacak şekilde yapılandırabilir. Kullanıcı kotası, e-posta, avatar görselleri, grup üyelikleri gibi kullanıcı öznitelikleri uygun sorgu ve süzgeçler kullanılarak dizin üzerinden Nextcloud üzerine çekilebilir.\n\nKullanıcılar Nextcloud oturumunu açmak için LDAP ya da AD kimlik doğrulama bilgilerini kullanır ve LDAP ya da AD sunucusunun vereceği onay ve izinlere göre erişim iznine sahip olur. Nextcloud üzerinde LDAP ya da AD parolaları depolanmaz. Bunun yerine bir kullanıcının kimliğini doğrulamak için kimlik doğrulama bilgileri kullanılır ve Nextcloud Kullanıcı Kodu için bir oturum kullanır. Ayrıntılı bilgi almak için LDAP Kullanıcı ve Grup Arka Yüzü belgelerine bakabilirsiniz.", - "Test Configuration" : "Yapılandırmayı Sına", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Bu uygulama, yöneticilerin kimlik doğrulamak, kullanıcı ve grup oluşturmak ve kullanıcı öznitelikleri atamak için Nextcloud sunucusu ile LDAP temelli bir kullanıcı dizini arasında bağlantı kurmasını sağlar. Yöneticiler LDAP arayüzünden bu uygulamayı birden fazla LDAP dizini ya da Aktif Dizine bağlanacak şekilde yapılandırabilir. Kullanıcı kotası, e-posta, avatar görselleri, grup üyelikleri gibi kullanıcı öznitelikleri uygun sorgu ve süzgeçler kullanılarak dizin üzerinden Nextcloud üzerine çekilebilir.\n\nKullanıcılar Nextcloud oturumunu açmak için LDAP ya da AD kimlik doğrulama bilgilerini kullanır ve LDAP ya da AD sunucusunun vereceği onay ve izinlere göre erişim iznine sahip olur. Nextcloud üzerinde LDAP ya da AD parolaları depolanmaz. Bunun yerine bir kullanıcının kimliğini doğrulamak için kimlik doğrulama bilgileri kullanılır ve Nextcloud kullanıcı kimliği için bir oturum kullanır. Ayrıntılı bilgi almak için LDAP Kullanıcı ve Grup Arka Yüzü belgelerine bakabilirsiniz.", + "Test Configuration" : "Yapılandırmayı sına", "Help" : "Yardım", "Groups meeting these criteria are available in %s:" : "%s içinde bu ölçüte uygun gruplar var:", - "Only these object classes:" : "Yalnız şu nesne sınıflarına:", - "Only from these groups:" : "Yalnız şu gruplardan:", + "Only these object classes:" : "Yalnızca şu nesne sınıflarına:", + "Only from these groups:" : "Yalnızca şu gruplardan:", "Search groups" : "Grup arama", "Available groups" : "Kullanılabilecek gruplar", "Selected groups" : "Seçilmiş gruplar", - "Edit LDAP Query" : "LDAP Sorgusunu Düzenle", - "LDAP Filter:" : "LDAP Süzgeci:", + "Edit LDAP Query" : "LDAP sorgusunu düzenle", + "LDAP Filter:" : "LDAP süzgeci:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Süzgeçte %s kopyasına erişebilecek LDAP grupları belirtilir.", "Verify settings and count the groups" : "Ayarları doğrula ve grupları say", "When logging in, %s will find the user based on the following attributes:" : "Oturum açılırken, %s, aşağıdaki özniteliklere bağlı kullanıcıyı bulur:", - "LDAP / AD Username:" : "LDAP / AD Kullanıcı Adı:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP / AD kullanıcı adı ile oturum açılmasını sağlar. Kullanıcı adı \"uid\" ya da \"sAMAccountName\" olabilir ve algılanır.", - "LDAP / AD Email Address:" : "LDAP / AD E-posta Adresi:", + "LDAP/AD Username:" : "LDAP/AD kullanıcı adı:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP/AD kullanıcı adı ile oturum açılmasını sağlar. Kullanıcı adı \"uid\" ya da \"sAMAccountName\" olabilir ve algılanır.", + "LDAP/AD Email Address:" : "LDAP/AD e-posta adresi:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "E-posta adresi ile oturum açılmasını sağlar. \"mail\" ve \"mailPrimaryAddress\" kullanılabilir.", - "Other Attributes:" : "Diğer Öznitelikler:", + "Other Attributes:" : "Diğer öznitelikler:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Oturum açma girişiminde uygulanacak süzgeci tanımlar. Oturum açma işleminde \"%%uid\" kullanıcı adı ile değiştirilir. Örnek: \"uid=%%uid\"", "Test Loginname" : "Kullanıcı adını sına", + "Attempts to receive a DN for the given loginname and the current login filter" : "Belirtilen oturum açma adı ve geçerli oturum açma süzgeci için bir etki alanı adı almayı dener", "Verify settings" : "Ayarları doğrula", - "%s. Server:" : "%s. Sunucu:", + "%s. Server:" : "%s. sunucu:", "Add a new configuration" : "Yeni bir yapılandırma ekle", "Copy current configuration into new directory binding" : "Geçerli yapılandırmayı yeni dizin bağlamasına kopyala", "Delete the current configuration" : "Geçerli yapılandırmayı sil", "Host" : "Sunucu", "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "SSL gerekmiyorsa iletişim kuralı belirtilmeyebilir. Gerekiyorsa ldaps:// ile başlayın", - "Port" : "Kapı Numarası", - "Detect Port" : "Kapı Numarasını Algıla", + "Port" : "Bağlantı noktası", + "Detect Port" : "Bağlantı noktasını algıla", "User DN" : "Kullanıcı 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." : "Yapılacak bağlama için iİstemci kullanıcısının DN değeri. Örnek: uid=agent,dc=ornek,dc=com. Anonim erişim için DN ve Parolayı boş bırakın.", "Password" : "Parola", - "For anonymous access, leave DN and Password empty." : "Anonim erişim için DN ve Parolayı boş bırakın.", - "Save Credentials" : "Kimlik Doğrulama Bilgilerini Kaydet", + "For anonymous access, leave DN and Password empty." : "Anonim erişim için DN ve parolayı boş bırakın.", + "Save Credentials" : "Kimlik doğrulama bilgilerini kaydet", "One Base DN per line" : "Her satıra bir Base DN yazın", "You can specify Base DN for users and groups in the Advanced tab" : "Gelişmiş sekmesinde, kullanıcı ve gruplar için Base DN belirtilebilir", - "Detect Base DN" : "Base DN Algıla", - "Test Base DN" : "Base DN Sına", + "Detect Base DN" : "Base DN algıla", + "Test Base DN" : "Base DN sına", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Otomatik LDAP isteklerinden kaçınılsın. Büyük kurulumlar için daha iyidir ancak LDAP bilgisi gerektirir.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP süzgeçlerini el ile yazın (büyük dizinler için önerilir)", "Listing and searching for users is constrained by these criteria:" : "Kullanıcı listeleme ve arama şu ölçütü göre kısıtlanmış:", @@ -115,7 +134,7 @@ "Continue" : "Sürdür", "Please renew your password." : "Lütfen parolanızı yenileyin.", "An internal error occurred." : "İçeride bir sorun çıktı.", - "Please try again or contact your administrator." : "Lütfen yeniden deneyin ya da yöneticinizle görüşün.", + "Please try again or contact your administrator." : "Lütfen yeniden deneyin ya da yöneticiniz ile görüşün.", "Current password" : "Geçerli parola", "New password" : "Yeni parola", "Renew password" : "Parolayı yenile", @@ -127,66 +146,92 @@ "Groups" : "Gruplar", "Expert" : "Uzman", "Advanced" : "Gelişmiş", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Uyarı:</b> PHP LDAP modülü kurulmamış, arka uç çalışmayacak. Lütfen kurması için BT yöneticinizle görüşün.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Uyarı:</b> PHP LDAP modülü kurulmamış, arka yüz çalışmayacak. Lütfen kurması için BT yöneticiniz ile görüşün.", "Connection Settings" : "Bağlantı Ayarları", - "Configuration Active" : "Yapılandırma Etkin", + "Configuration Active" : "Yapılandırma etkin", "When unchecked, this configuration will be skipped." : "Bu seçenek işaretli değilse, bu yapılandırma atlanır.", "Backup (Replica) Host" : "Yedek (Replika) Sunucu", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "İsteğe bağlı olarak bir yedekleme sunucusu belirtin. Ana LDAP/AD sunucusunun kopyası olmalıdır.", - "Backup (Replica) Port" : "Yedek (Replika) Kapı Numarası", - "Disable Main Server" : "Ana Sunucuyu Devre Dışı Bırak", - "Only connect to the replica server." : "Yalnız yedek sunucu ile bağlantı kurulsun.", + "Backup (Replica) Port" : "Yedek (Replika) bağlantı noktası", + "Disable Main Server" : "Ana sunucuyu kullanımdan kaldır", + "Only connect to the replica server." : "Yalnızca yedek sunucu ile bağlantı kurulsun.", "Turn off SSL certificate validation." : "SSL sertifika doğrulaması kullanılmasın.", - "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." : "Önerilmez, yalnız deneme amacıyla kullanın! Bağlantı yalnız bu seçenek etkinleştirildiğinde çalışıyorsa LDAP sunucusunun SSL sertifikasını %s sunucuzun içine aktarın.", + "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." : "Önerilmez, yalnızca deneme amacıyla kullanın! Bağlantı yalnızca bu seçenek ile çalışıyorsa LDAP sunucusunun SSL sertifikasını %s sunucuzun içine aktarın.", "Cache Time-To-Live" : "Ön Bellek Time-To-Live Değeri", "in seconds. A change empties the cache." : "saniye cinsinden. Değişiklik ön belleği temizler.", "Directory Settings" : "Dizin Ayarları", "User Display Name Field" : "Görüntülenecek Kullanıcı Adı Alanı", - "The LDAP attribute to use to generate the user's display name." : "Görüntülenecek kullanıcı adını oluşturmak için kullanılacak LDAP özniteliği.", + "The LDAP attribute to use to generate the user's display name." : "Görüntülenecek kullanıcı adını üretmek için kullanılacak LDAP özniteliği.", "2nd User Display Name Field" : "2. Görüntülenecek Kullanıcı Adı Alanı", "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "İsteğe bağlı. Görüntülenecek ada parantez içinde eklenecek LDAP özniteliği. Örnek sonuç: »John Doe (john.doe@example.org)«.", "Base User Tree" : "Temel Kullanıcı Ağacı", "One User Base DN per line" : "Her Satıra Bir Kullanıcı Base DN", - "User Search Attributes" : "Kullanıcı Arama Öznitelikleri", + "User Search Attributes" : "Kullanıcı arama öznitelikleri", "Optional; one attribute per line" : "İsteğe bağlı; her satıra bir öznitelik", + "Disable users missing from LDAP" : "LDAP üzerinde bulunmayan kullanıcılar kullanımdan kaldırılsın", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Açıldığında, LDAP üzerinden içe aktarılmış ancak daha sonra kaybolmuş kullanıcılar kullanımdan kaldırılır", "Group Display Name Field" : "Görüntülenecek Grup Adı Alanı", - "The LDAP attribute to use to generate the groups's display name." : "Görüntülenecek grup adını oluşturmak için kullanılacak LDAP özniteliği.", + "The LDAP attribute to use to generate the groups's display name." : "Görüntülenecek grup adını üretmek için kullanılacak LDAP özniteliği.", "Base Group Tree" : "Temel Grup Ağacı", "One Group Base DN per line" : "Her Satıra Bir Grup Base DN", "Group Search Attributes" : "Grup Arama Öznitelikleri", "Group-Member association" : "Grup-Üye İlişkisi", "Dynamic Group Member URL" : "Devingen Grup Üye Adresi", - "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Bu grup nesneleri üzerindeki LDAP özniteliği, grupa hangi nesnelerin ait olduğunu bulan bir LDAP arama adresi içeriyor (Seçenek boş bırakıldığında dinamik grup üyeliği özelliği devre dışı kalır).", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Bu grup nesneleri üzerindeki LDAP özniteliğinde, gruba hangi nesnelerin ait olduğunu bulan bir LDAP arama adresi bulunuyor (seçenek boş bırakıldığında dinamik grup üyeliği özelliği kapatılır).", "Nested Groups" : "İç İçe Gruplar", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Bu seçenek etkinleştirildiğinde, gruplar içinde gruplar desteklenir (Yalnız grup üyesi özniteliği DN içeriyorsa çalışır).", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Açılırsa, gruplar içinde gruplar desteklenir (Yalnızca grup üyesi özniteliğinde DN bulunuyorsa çalışır).", "Paging chunksize" : "Sayfalandırma yığın boyutu", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Yığın boyutu, kullanıcı ya da grup listeleri gibi, çok sayıda sonuç verebilen sayfalandırılmış LDAP aramaları için kullanılır (0 olarak ayarlandığında bu durumlarda sayfalandırılmış LDAP aramaları devre dışı kalır).", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Yığın boyutu, kullanıcı ya da grup listeleri gibi, çok sayıda sonuç verebilen sayfalandırılmış LDAP aramaları için kullanılır (0 olarak ayarlandığında bu durumlarda sayfalandırılmış LDAP aramaları kapatılır).", "Enable LDAP password changes per user" : "Kullanıcılar LDAP parolalarını değiştirebilsin", - "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : " Bu seçenek etkinleştirildiğinde, LDAP kullanıcıları kendi parolalarını değiştirebilir ve Süper Yöneticiler ile Grup Yöneticileri kendi LDAP kullanıcılarının parolalarını değiştirebilir. Yalnız erişim denetimi ilkeleri LDAP sunucuya uygun olarak yapılandırılmış ise çalışır. Parolalar LDAP sunucuya düz metin biçiminde aktarıldığından, LDAP sunucu üzerinde aktarım şifrelemesi ve parola karması kullanılmalıdır.", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP kullanıcıları kendi parolalarını değiştirebilir ve Süper Yöneticiler ile Grup Yöneticileri kendi LDAP kullanıcılarının parolalarını değiştirebilir. Yalnızca erişim denetimi ilkeleri LDAP sunucusuna uygun olarak yapılandırılmış ise çalışır. Parolalar LDAP sunucusuna düz metin biçiminde aktarıldığından, LDAP sunucusu üzerinde aktarım şifrelemesi ve parola karması kullanılmalıdır.", "(New password is sent as plain text to LDAP)" : "(Yeni parola LDAP üzerine düz metin olarak gönderildi)", "Default password policy DN" : "Varsayılan parola ilkesi DN", - "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Parola süresinin sona erme işlemleri için kullanılacak varsayılan parola ilkesi için DN. Yalnız her kullanıcı için LDAP parola değişikliği etkinleştirilmiş ise çalışır ve yalnız OpenLDAP tarafından desteklenir. Parola süresi sona erme işlemlerini devre dışı bırakmak için boş bırakın.", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Parola geçerlilik süresinin sona erme işlemleri için kullanılacak varsayılan parola ilkesinin etki alanı adı (DN). Yalnızca her kullanıcı için LDAP parola değişikliği açıksa çalışır ve yalnızca OpenLDAP tarafından desteklenir. Parola süresi sona erme işlemlerini kapatmak için boş bırakın.", "Special Attributes" : "Özel Öznitelikler", "Quota Field" : "Kota Alanı", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Kullanıcının varsayılan kotasının kullanılması için boş bırakın ya da bir LDAP/AD özniteliği belirtin.", "Quota Default" : "Varsayılan Kota", "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Kota Alanına bir kota değeri yazılmamış olan LDAP kullanıcıları için kullanılacak varsayılan kota değerini yazın.", - "Email Field" : "E-posta Alanı", + "Email Field" : "E-posta alanı", "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Kullanıcı varsayılan e-posta adresinin kullanılması için boş bırakın ya da bir LDAP/AD özniteliği belirtin.", "User Home Folder Naming Rule" : "Kullanıcı Ana Klasörünü Adlandırma Kuralı", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Kullanıcı adının kullanılması için boş bırakın (varsayılan) ya da bir LDAP/AD özniteliği belirtin.", "\"$home\" Placeholder Field" : "\"$home\" Yer Belirleyici Alanı", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Bir dış depolama yapılandırmasında $home yerine belirtilen öznitelik konulur", - "Internal Username" : "İç Kullanıcı Adı", - "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Varsayılan olarak, iç kullanıcı adı UUID özniteliğinden oluşturulur. Böylece kullanıcı adının eşsiz olması ve dönüştürülmesi gereken karakterler içermediğinden emin olunur. İç kullanıcı adında kısıtlaması yalnız şu karakterleri kullanılabilir: [ a-zA-Z0-9_.@- ]. Diğer karakterler ASCII karşılıklarına dönüştürülür ya da yok sayılır. Çakışmalarda ada bir sayı eklenir. İç kullanıcı adı bir kullanıcıyı içsel olarak belirlemeye yarar. Aynı zamanda kullanıcı ana klasörünün varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin *DAV servislerinin bir parçasıdır. Bu seçenek ile varsayılan davranış değiştirilebilir. Varsayılan davranışı kullanmak için boş bırakın. Değişiklikler yalnız yeni eşleştirilecek (eklenecek) LDAP kullanıcılarını etkiler.", - "Internal Username Attribute:" : "İç Kullanıcı Adı Özniteliği:", - "Override UUID detection" : "UUID algılamasını değiştir", - "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." : "Varsayılan olarak, UUID özniteliği otomatik olarak algılanır. UUID özniteliği LDAP kullanıcı ve gruplarını kesin olarak belirlemek için kullanılır. Yukarıda başka türlü belirtilmemişse, bu UUID için bir iç kullanıcı adı oluşturulur. Bu ayarı değiştirerek istenilen bir öznitelik belirtilebilir. Ancak istenilen özniteliğin eşsiz olduğundan ve hem kullanıcı hem de gruplar tarafından kullanıldığından emin olunmalıdır. Varsayılan davranış için boş bırakın. Değişiklikler yalnız yeni eşleştirilen (eklenen) LDAP kullanıcı ve gruplarını etkiler.", + "User Profile Attributes" : "Kullanıcı profili öznitelikleri", + "Phone Field" : "Telefon alanı", + "User profile Phone will be set from the specified attribute" : "Kullanıcı profilindeki telefon alanının değeri belirtilen öznitelikten alınır", + "Website Field" : "Site alanı", + "User profile Website will be set from the specified attribute" : "Kullanıcı profilindeki site alanının değeri belirtilen öznitelikten alınır", + "Address Field" : "Adres alanı", + "User profile Address will be set from the specified attribute" : "Kullanıcı profilindeki adres alanının değeri belirtilen öznitelikten alınır", + "Twitter Field" : "Twitter alanı", + "User profile Twitter will be set from the specified attribute" : "Kullanıcı profilindeki Twitter alanının değeri belirtilen öznitelikten alınır", + "Fediverse Field" : "Fediverse alanı", + "User profile Fediverse will be set from the specified attribute" : "Kullanıcı profilindeki Fediverse alanının değeri belirtilen öznitelikten alınır", + "Organisation Field" : "Kuruluş alanı", + "User profile Organisation will be set from the specified attribute" : "Kullanıcı profilindeki kuruluş alanının değeri belirtilen öznitelikten alınır", + "Role Field" : "Rol alanı", + "User profile Role will be set from the specified attribute" : "Kullanıcı profilindeki rol alanının değeri belirtilen öznitelikten alınır", + "Headline Field" : "Başlık alanı", + "User profile Headline will be set from the specified attribute" : "Kullanıcı profilindeki başlık alanının değeri belirtilen öznitelikten alınır", + "Biography Field" : "Özgeçmiş alanı", + "User profile Biography will be set from the specified attribute" : "Kullanıcı profilindeki özgeçmiş alanının değeri belirtilen öznitelikten alınır", + "Birthdate Field" : "Doğum tarihi alanı", + "User profile Date of birth will be set from the specified attribute" : "Kullanıcı profilindeki doğum tarihi alanının değeri belirtilen öznitelikten alınır", + "Pronouns Field" : "Hitap alanı", + "User profile Pronouns will be set from the specified attribute" : "Kullanıcı profilindeki hitap alanının değeri belirtilen öznitelikten alınır", + "Internal Username" : "İç kullanıcı adı", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Varsayılan olarak, iç kullanıcı adı UUID özniteliğinden oluşturulur. Böylece kullanıcı adının eşsiz olması ve dönüştürülmesi gereken karakterler içermediğinden emin olunur. İç kullanıcı adında kısıtlaması yalnızca şu karakterleri kullanılabilir: [ a-zA-Z0-9_.@-]. Diğer karakterler ASCII karşılıklarına dönüştürülür ya da yok sayılır. Çakışmalarda ada bir sayı eklenir. İç kullanıcı adı bir kullanıcıyı içsel olarak belirlemeye yarar. Aynı zamanda kullanıcı ana klasörünün varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin DAV hizmetlerinin bir parçasıdır. Bu seçenek ile varsayılan davranış değiştirilebilir. Değişiklikler yalnızca yeni eşleştirilecek (eklenecek) LDAP kullanıcılarını etkiler. Varsayılan davranışın kullanılması için boş bırakın.", + "Internal Username Attribute:" : "İç kullanıcı adı özniteliği:", + "Override UUID detection" : "UUID algılaması değiştirilsin", + "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." : "Varsayılan olarak, UUID özniteliği otomatik olarak algılanır. UUID özniteliği LDAP kullanıcı ve gruplarını kesin olarak belirlemek için kullanılır. Yukarıda başka türlü belirtilmemişse, bu UUID için bir iç kullanıcı adı oluşturulur. Bu ayarı değiştirerek istenilen bir öznitelik belirtilebilir. Ancak istenilen özniteliğin eşsiz olduğundan ve hem kullanıcı hem de gruplar tarafından kullanıldığından emin olunmalıdır. Varsayılan davranış için boş bırakın. Değişiklikler yalnızca yeni eşleştirilen (eklenen) LDAP kullanıcı ve gruplarını etkiler.", "UUID Attribute for Users:" : "Kullanıcılar için UUID Özniteliği:", "UUID Attribute for Groups:" : "Gruplar için UUID Özniteliği:", "Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirme", - "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Kullanıcı adları, üst veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak belirlemek ve algılamak için, her LDAP kullanıcısına bir iç kullanıcı verilir. Bu kullanıcı adı ile LDAP kullanıcısının eşleştirilmesi gerekir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID değeri ile eşleştirilir. Bunun yanında LDAP etkileşimini azaltmak için DN ön belleğe alınır ancak bu işlem kimlik belirleme için kullanılmaz. DN üzerinde yapılan değişiklikler aktarılır. İç kullanıcı her yerde kullanıldığından, bir eşleştirmeyi kaldırmak pek çok yerde kalıntılar bırakır. Eşleştirmeleri kaldırmak yalnız yapılandırmaya bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla kaldırmayın, yalnız sınama ya da deney aşamalarında kullanın.", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Kullanıcı adları, üst veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak belirlemek ve algılamak için, her LDAP kullanıcısına bir iç kullanıcı verilir. Bu kullanıcı adı ile LDAP kullanıcısının eşleştirilmesi gerekir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID değeri ile eşleştirilir. Bunun yanında LDAP etkileşimini azaltmak için DN ön belleğe alınır ancak bu işlem kimlik belirleme için kullanılmaz. DN üzerinde yapılan değişiklikler aktarılır. İç kullanıcı her yerde kullanıldığından, bir eşleştirmeyi kaldırmak pek çok yerde kalıntılar bırakır. Eşleştirmeleri kaldırmak yalnızca yapılandırmaya bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla kaldırmayın, yalnızca sınama ya da deney aşamalarında kullanın.", "Clear Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirmesini Kaldır", - "Clear Groupname-LDAP Group Mapping" : "Grup Adı-LDAP Grubu Eşleştirmesini Kaldır" + "Clear Groupname-LDAP Group Mapping" : "Grup Adı-LDAP Grubu Eşleştirmesini Kaldır", + "Invalid configuration. Please have a look at the logs for further details." : "Yapılandırma geçersiz. Lütfen ayrıntılı bilgi almak için günlük dosyasına bakın." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/tzm.js b/apps/user_ldap/l10n/tzm.js deleted file mode 100644 index 1d621c04a77..00000000000 --- a/apps/user_ldap/l10n/tzm.js +++ /dev/null @@ -1,7 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -}, -"nplurals=2; plural=(n == 0 || n == 1 || (n > 10 && n < 100) ? 0 : 1;"); diff --git a/apps/user_ldap/l10n/tzm.json b/apps/user_ldap/l10n/tzm.json deleted file mode 100644 index 2c3a3581b99..00000000000 --- a/apps/user_ldap/l10n/tzm.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "translations": { - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""] -},"pluralForm" :"nplurals=2; plural=(n == 0 || n == 1 || (n > 10 && n < 100) ? 0 : 1;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ug.js b/apps/user_ldap/l10n/ug.js index c1020b1c32b..8026cf7e3f0 100644 --- a/apps/user_ldap/l10n/ug.js +++ b/apps/user_ldap/l10n/ug.js @@ -1,14 +1,221 @@ OC.L10N.register( "user_ldap", { - "Users" : "ئىشلەتكۈچىلەر", - "Groups" : "گۇرۇپپا", + "Failed to clear the mappings." : "خەرىتىنى تازىلاش مەغلۇب بولدى.", + "Failed to delete the server configuration" : "مۇلازىمېتىر سەپلىمىسىنى ئۆچۈرەلمىدى", + "Invalid configuration: Anonymous binding is not allowed." : "ئىناۋەتسىز سەپلىمىسى: نامسىز باغلاشقا بولمايدۇ.", + "Valid configuration, connection established!" : "ئىناۋەتلىك سەپلىمە ، ئۇلىنىش قۇرۇلدى!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "ئىناۋەتلىك سەپلىمىسى ، ئەمما باغلاش مەغلۇپ بولدى. مۇلازىمېتىر تەڭشىكى ۋە كىنىشكىسىنى تەكشۈرۈپ بېقىڭ.", + "No action specified" : "ھېچقانداق ھەرىكەت بەلگىلەنمىدى", + "No configuration specified" : "سەپلىمىسى ئېنىق ئەمەس", + "No data specified" : "ھېچقانداق سانلىق مەلۇمات كۆرسىتىلمىدى", + "Invalid data specified" : "ئىناۋەتسىز سانلىق مەلۇمات", + "Action does not exist" : "ھەرىكەت مەۋجۇت ئەمەس", + "Renewing …" : "يېڭىلاش…", + "Very weak password" : "پارول بەك ئاجىز", + "Weak password" : "پارول ئاجىز", + "So-so password" : "شۇڭا مەخپىي نومۇر", + "Good password" : "ياخشى پارول", + "Strong password" : "كۈچلۈك پارول", + "The Base DN appears to be wrong" : "Base DN خاتادەك قىلىدۇ", + "Testing configuration…" : "سىناق سەپلىمىسى…", + "Configuration incorrect" : "سەپلىمىسى خاتا", + "Configuration incomplete" : "سەپلىمىسى تولۇق ئەمەس", + "Configuration OK" : "سەپلىمىسى بولىدۇ", + "Select groups" : "گۇرۇپپىلارنى تاللاڭ", + "Select object classes" : "ئوبيېكت دەرسلىرىنى تاللاڭ", + "Please check the credentials, they seem to be wrong." : "كىنىشكىنى تەكشۈرۈپ بېقىڭ ، ئۇلار خاتادەك قىلىدۇ.", + "Please specify the port, it could not be auto-detected." : "پورتنى بەلگىلىۈڭ ، ئۇنى ئاپتوماتىك بايقىغىلى بولمايدۇ.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN نى ئاپتوماتىك بايقىغىلى بولمايدۇ ، كىنىشكا ، باش ئاپپارات ۋە پورتنى تۈزىتىڭ.", + "Could not detect Base DN, please enter it manually." : "Base DN نى بايقىيالمىدى ، قولدا كىرگۈزۈڭ.", + "{nthServer}. Server" : "th nthServer}. مۇلازىمېتىر", + "No object found in the given Base DN. Please revise." : "بېرىلگەن Base DN دا ھېچقانداق نەرسە تېپىلمىدى. قايتا قاراپ بېقىڭ.", + "More than 1,000 directory entries available." : "1000 دىن ئارتۇق مۇندەرىجە تۈرى بار.", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "خاتالىق كۆرۈلدى. Base DN ، شۇنداقلا ئۇلىنىش تەڭشەكلىرى ۋە كىنىشكىسىنى تەكشۈرۈپ بېقىڭ.", + "Do you really want to delete the current Server Configuration?" : "نۆۋەتتىكى مۇلازىمېتىر سەپلىمىسىنى ئۆچۈرمەكچىمۇ؟", + "Confirm Deletion" : "ئۆچۈرۈشنى جەزملەشتۈرۈڭ", + "Mappings cleared successfully!" : "خەرىتە مۇۋەپپەقىيەتلىك تازىلاندى!", + "Error while clearing the mappings." : "خەرىتىنى تازىلاش جەريانىدا خاتالىق.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "نامسىز باغلاشقا بولمايدۇ. ئىشلەتكۈچى DN ۋە پارول بىلەن تەمىنلەڭ.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP مەشغۇلات خاتالىقى. نامسىز باغلىنىشقا رۇخسەت قىلىنمايدۇ.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "تېجەش مەغلۇب بولدى. سانداننىڭ مەشغۇلات قىلىۋاتقانلىقىنى جەزملەشتۈرۈڭ. داۋاملاشتۇرۇشتىن بۇرۇن قايتا يۈكلەڭ.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "ھالەتنى ئالماشتۇرغاندا ئاپتوماتىك LDAP سوئاللىرىنى قوزغىتىدۇ. LDAP چوڭلۇقىڭىزغا ئاساسەن ئۇلار بىر ئاز ۋاقىت كېتىشى مۇمكىن. سىز يەنىلا ھالەتنى ئالماشتۇرامسىز؟", + "Mode switch" : "ھالەت ئالماشتۇرۇش", + "Select attributes" : "خاسلىقنى تاللاڭ", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "ئىشلەتكۈچى تېپىلمىدى. كىرىش خاسلىقىڭىز ۋە ئىشلەتكۈچى ئىسمىڭىزنى تەكشۈرۈپ بېقىڭ. ئۈنۈملۈك سۈزگۈچ (بۇيرۇق قۇرىنى دەلىللەش ئۈچۈن كۆچۈرۈپ چاپلاش): <br/>", + "User found and settings verified." : "ئىشلەتكۈچى تېپىلدى ۋە تەڭشەكلىرى دەلىللەندى.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "ئىزدەشنى تارايتىشنى ئويلاڭ ، چۈنكى ئۇ نۇرغۇن ئىشلەتكۈچىلەرنى ئۆز ئىچىگە ئالىدۇ ، پەقەت بىرىنچىسىلا كىرەلەيدۇ.", + "An unspecified error occurred. Please check log and settings." : "ئېنىقلانمىغان خاتالىق كۆرۈلدى. خاتىرە ۋە تەڭشەكلەرنى تەكشۈرۈپ بېقىڭ.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ئىزدەش سۈزگۈچ ئىناۋەتسىز ، بەلكىم ئېچىلغان ۋە يېپىق تىرناقنىڭ تەكشى بولماسلىقى قاتارلىق گرامماتىكىلىق مەسىلىلەر سەۋەبىدىن بولۇشى مۇمكىن. قايتا قاراپ بېقىڭ.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP / AD غا ئۇلىنىش خاتالىقى كۆرۈلدى. ساھىبجامال ، پورت ۋە كىنىشكىنى تەكشۈرۈپ بېقىڭ.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"% Uid\" ئورۇن ئىگىسى يوقاپ كەتتى. ئۇ LDAP / AD نى سورىغاندا كىرىش ئىسمى بىلەن ئالماشتۇرۇلىدۇ.", + "Please provide a login name to test against" : "سىناش ئۈچۈن كىرىش ئىسمى بىلەن تەمىنلەڭ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "گۇرۇپپا قۇتىسى چەكلەنگەن ، چۈنكى LDAP / AD مۇلازىمېتىرى memberOf نى قوللىمايدۇ.", + "Please login with the new password" : "يېڭى پارول بىلەن كىرىڭ", + "LDAP User backend" : "LDAP ئىشلەتكۈچى ئارقا سۇپىسى", + "Your password will expire tomorrow." : "پارولىڭىز ئەتە توشىدۇ.", + "Your password will expire today." : "پارولىڭىز بۈگۈن توشىدۇ.", + "LDAP/AD integration" : "LDAP / AD بىرلەشتۈرۈش", + "LDAP Connection" : "LDAP ئۇلىنىشى", + "Invalid LDAP UUIDs" : "ئىناۋەتسىز LDAP UUIDs", + "None found" : "تېپىلمىدى", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAP ھېساباتى ياكى گۇرۇپپىلارنىڭ ئىناۋەتسىز UUID تېپىلدى. LDAP سەپلىمىسىنىڭ مۇتەخەسسىسلەر بۆلىكىدىكى «UUID بايقاشنى قاپلاش» تەڭشەكلىرىڭىزنى تەكشۈرۈپ ، «occ ldap: update-uuid» نى ئىشلىتىپ ئۇلارنى يېڭىلاڭ.", + "> 1000 groups found" : "> 1000 گۇرۇپپا تېپىلدى", + "> 1000 users found" : "> 1000 ئىشلەتكۈچى تېپىلدى", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "ئىشلەتكۈچى كۆرسىتىش ئىسمى خاسلىقىنى بايقىيالمىدى. ئىلغار LDAP تەڭشىكىدە ئۆزىڭىز بەلگىلىۈڭ.", + "Could not find the desired feature" : "لازىملىق ئىقتىدارنى تاپالمىدى", + "Invalid Host" : "ئىناۋەتسىز", + "LDAP user and group backend" : "LDAP ئىشلەتكۈچى ۋە گۇرۇپپا ئارقا سەھنىسى", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "بۇ پروگرامما باشقۇرغۇچىنىڭ Nextcloud نى LDAP ئاساسىدىكى ئىشلەتكۈچى مۇندەرىجىسىگە ئۇلىيالايدۇ.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "بۇ پروگرامما باشقۇرغۇچىنىڭ Nextcloud نى LDAP ئاساسىدىكى ئىشلەتكۈچى مۇندەرىجىسىگە ئۇلاپ ، ئىشلەتكۈچى ، گۇرۇپپا ۋە ئىشلەتكۈچى خاسلىقى بىلەن تەمىنلەيدۇ. باشقۇرغۇچى بۇ پروگراممىنى LDAP كۆرۈنمە يۈزى ئارقىلىق بىر ياكى بىر قانچە LDAP مۇندەرىجىسىگە ياكى ئاكتىپ مۇندەرىجىگە ئۇلىيالايدۇ. ئىشلەتكۈچى نورمىسى ، ئېلېكترونلۇق خەت ، باش سۈرەت ، گۇرۇپپا ئەزالىرى ۋە باشقىلار قاتارلىق خاسلىقلارنى مۇناسىپ سوئال ۋە سۈزگۈچلەر بىلەن مۇندەرىجىدىن Nextcloud غا تارتقىلى بولىدۇ.\n\nئىشلەتكۈچى LDAP ياكى AD كىنىشكىسى بىلەن Nextcloud غا كىرىدۇ ، ھەمدە LDAP ياكى AD مۇلازىمېتىرى بىر تەرەپ قىلغان دەلىللەش تەلىپىگە ئاساسەن ئىجازەتكە ئېرىشىدۇ. Nextcloud LDAP ياكى AD مەخپىي نومۇرىنى ساقلىمايدۇ ، بەلكى بۇ كىنىشكىلار ئىشلەتكۈچىنى دەلىللەش ئۈچۈن ئىشلىتىلىدۇ ، ئاندىن Nextcloud ئىشلەتكۈچى كىملىكى ئۈچۈن بىر يىغىن ئىشلىتىدۇ. LDAP ئىشلەتكۈچى ۋە گۇرۇپپا ئارقا بەت ھۆججىتىدە تېخىمۇ كۆپ ئۇچۇرلار بار.", + "Test Configuration" : "سىناق سەپلىمىسى", "Help" : "ياردەم", + "Groups meeting these criteria are available in %s:" : "بۇ ئۆلچەمگە توشىدىغان گۇرۇپپىلار% s دا بار:", + "Only these object classes:" : "پەقەت بۇ ئوبيېكت دەرسلىرى:", + "Only from these groups:" : "پەقەت بۇ گۇرۇپپىلاردىن:", + "Search groups" : "ئىزدەش گۇرۇپپىلىرى", + "Available groups" : "ئىشلەتكىلى بولىدىغان گۇرۇپپىلار", + "Selected groups" : "تاللانغان گۇرۇپپىلار", + "Edit LDAP Query" : "LDAP سوئالنى تەھرىرلەڭ", + "LDAP Filter:" : "LDAP سۈزگۈچ:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "سۈزگۈچ قايسى LDAP گۇرۇپپىسىنىڭ% s مىسالىغا ئېرىشەلەيدىغانلىقىنى بەلگىلەيدۇ.", + "Verify settings and count the groups" : "تەڭشەكلەرنى تەكشۈرۈپ گۇرۇپپىلارنى ساناپ بېقىڭ", + "When logging in, %s will find the user based on the following attributes:" : "تىزىمغا كىرگەندە ،% s تۆۋەندىكى خاسلىقلارغا ئاساسەن ئىشلەتكۈچىنى تاپىدۇ:", + "LDAP/AD Username:" : "LDAP / AD ئىشلەتكۈچى ئىسمى:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP / AD ئىشلەتكۈچى نامىغا كىرىشكە يول قويىدۇ ، بۇ «uid» ياكى «sAMAccountName» بولۇپ ، بايقايدۇ.", + "LDAP/AD Email Address:" : "LDAP / AD ئېلېكترونلۇق خەت ئادرېسى:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "ئېلېكترونلۇق خەت خاسلىقىغا قارشى كىرىشكە يول قويىدۇ. \"mail\" ۋە \"mailPrimaryAddress\" رۇخسەت قىلىنغان.", + "Other Attributes:" : "باشقا خاسلىقى:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "كىرىشكە ئۇرۇنغاندا سۈزگۈچنى بەلگىلەيدۇ. \"%% uid\" كىرىش ھەرىكىتىدىكى ئىشلەتكۈچى نامىنىڭ ئورنىنى ئالىدۇ. مىسال: \"uid = %% uid\"", + "Test Loginname" : "سىناق خاتىرىسى", + "Attempts to receive a DN for the given loginname and the current login filter" : "بېرىلگەن كىرىش ئىسمى ۋە نۆۋەتتىكى كىرىش سۈزگۈچ ئۈچۈن DN تاپشۇرۇۋېلىشقا ئۇرۇنۇش", + "Verify settings" : "تەڭشەكلەرنى دەلىللەڭ", + "%s. Server:" : "% s. مۇلازىمېتىر:", + "Add a new configuration" : "يېڭى سەپلىمە قوشۇڭ", + "Copy current configuration into new directory binding" : "نۆۋەتتىكى سەپلىمىنى يېڭى مۇندەرىجە باغلاشقا كۆچۈرۈڭ", + "Delete the current configuration" : "نۆۋەتتىكى سەپلىمىنى ئۆچۈرۈڭ", "Host" : "باش ئاپپارات", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "ئەگەر SSL تەلەپ قىلمىسىڭىز ، كېلىشىمنى ئەمەلدىن قالدۇرالايسىز. ئەگەر شۇنداق بولسا ، ldaps دىن باشلاڭ: //", "Port" : "ئېغىز", + "Detect 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 ۋە پارولنى بوش قويۇڭ.", "Password" : "ئىم", + "For anonymous access, leave DN and Password empty." : "نامسىز زىيارەت قىلىش ئۈچۈن DN ۋە پارولنى بوش قويۇڭ.", + "Save Credentials" : "كىنىشكىنى ساقلاش", + "One Base DN per line" : "ھەر بىر قۇر DN", + "You can specify Base DN for users and groups in the Advanced tab" : "ئالىي بەتكۈچتىكى ئىشلەتكۈچى ۋە گۇرۇپپىلار ئۈچۈن Base DN نى بەلگىلىيەلەيسىز", + "Detect Base DN" : "Base DN نى ئېنىقلاڭ", + "Test Base DN" : "سىناق ئاساسى DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "ئاپتوماتىك LDAP تەلىپىدىن ساقلىنىدۇ. چوڭراق تەڭشەش ئۈچۈن ياخشى ، ئەمما بىر قىسىم LDAP بىلىملىرىنى تەلەپ قىلىدۇ.", + "Manually enter LDAP filters (recommended for large directories)" : "LDAP سۈزگۈچنى قولدا كىرگۈزۈڭ (چوڭ مۇندەرىجە تەۋسىيە قىلىنىدۇ)", + "Listing and searching for users is constrained by these criteria:" : "ئابونتلارنى تىزىش ۋە ئىزدەش بۇ ئۆلچەملەر تەرىپىدىن چەكلەنگەن:", + "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." : "ئىشلەتكۈچىلەر ئۈچۈن ئەڭ كۆپ ئۇچرايدىغان ئوبيېكت سىنىپلىرى تەشكىلىي شەخس ، ئادەم ، ئىشلەتكۈچى ۋە inetOrgPerson. قايسى ئوبيېكت سىنىپىنى تاللاشنى بىلمىسىڭىز مۇندەرىجە باشقۇرغۇچىڭىز بىلەن مەسلىھەتلىشىڭ.", + "The filter specifies which LDAP users shall have access to the %s instance." : "سۈزگۈچ قايسى LDAP ئىشلەتكۈچىلەرنىڭ% s مىسالىغا ئېرىشەلەيدىغانلىقىنى بەلگىلەيدۇ.", + "Verify settings and count users" : "تەڭشەكلەرنى تەكشۈرۈپ ، ئىشلەتكۈچىنى ساناپ بېقىڭ", + "Saving" : "تېجەش", + "Back" : "قايتىش", + "Continue" : "داۋاملاشتۇر", + "Please renew your password." : "پارولىڭىزنى يېڭىلاڭ.", + "An internal error occurred." : "ئىچكى خاتالىق كۆرۈلدى.", + "Please try again or contact your administrator." : "قايتا سىناڭ ياكى باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.", + "Current password" : "نۆۋەتتىكى ئىم", + "New password" : "يېڭى ئىم", + "Renew password" : "پارولنى يېڭىلاڭ", + "Wrong password." : "پارول خاتا.", + "Cancel" : "ۋاز كەچ", + "Server" : "مۇلازىمېتىر", + "Users" : "ئىشلەتكۈچىلەر", + "Login Attributes" : "كىرىش خاسلىقى", + "Groups" : "گۇرۇپپا", + "Expert" : "مۇتەخەسسىس", "Advanced" : "ئالىي", + "<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> PHP LDAP مودۇلى ئورنىتىلمىدى ، ئارقا تەرىپى ئىشلىمەيدۇ. ئۇنى قاچىلاشنى سىستېما باشقۇرغۇچىڭىزدىن سوراڭ.", "Connection Settings" : "باغلىنىش تەڭشىكى", - "Configuration Active" : "سەپلىمە ئاكتىپ" + "Configuration Active" : "سەپلىمە ئاكتىپ", + "When unchecked, this configuration will be skipped." : "تەكشۈرۈلمىسە ، بۇ سەپلىمە ئاتلاپ كېتىدۇ.", + "Backup (Replica) Host" : "زاپاسلاش (Replica) رىياسەتچىسى", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "ئىختىيارى زاپاسلاش مۇلازىمىتىرى بېرىڭ. ئۇ چوقۇم ئاساسلىق LDAP / AD مۇلازىمېتىرنىڭ كۆپەيتىلگەن نۇسخىسى بولۇشى كېرەك.", + "Backup (Replica) Port" : "زاپاسلاش (Replica) ئېغىزى", + "Disable Main Server" : "ئاساسلىق مۇلازىمېتىرنى چەكلەڭ", + "Only connect to the replica server." : "پەقەت كۆپەيتىلگەن مۇلازىمېتىرغا ئۇلاڭ.", + "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 مۇلازىمېتىرىڭىزغا LDAP مۇلازىمېتىرنىڭ SSL گۇۋاھنامىسىنى ئەكىرىڭ.", + "Cache Time-To-Live" : "Cache Time-To-Live", + "in seconds. A change empties the cache." : "سېكۇنتتا. ئۆزگەرتىش غەملەكنى بوشاتتى.", + "Directory Settings" : "مۇندەرىجە تەڭشىكى", + "User Display Name Field" : "ئىشلەتكۈچى كۆرسىتىش ئىسمى", + "The LDAP attribute to use to generate the user's display name." : "LDAP خاسلىقى ئىشلەتكۈچىنىڭ كۆرسىتىش نامىنى ھاسىل قىلىشقا ئىشلىتىلىدۇ.", + "2nd User Display Name Field" : "2-ئىشلەتكۈچى كۆرسىتىش ئىسمى مەيدانى", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "ئىختىيارىي. تىرناق ئىچىدىكى كۆرسىتىش نامىغا قوشۇلىدىغان LDAP خاسلىقى. مەسىلەن: »جون دو (john.doe@example.org)«.", + "Base User Tree" : "ئاساسى ئىشلەتكۈچى دەرىخى", + "One User Base DN per line" : "ھەر بىر قۇردا بىر ئىشلەتكۈچى ئاساسى DN", + "User Search Attributes" : "ئىشلەتكۈچى ئىزدەش خاسلىقى", + "Optional; one attribute per line" : "ئىختىيارىي ھەر بىر قۇرغا بىر خاسلىق", + "Disable users missing from LDAP" : "LDAP دىن يوقاپ كەتكەن ئىشلەتكۈچىلەرنى چەكلەڭ", + "When switched on, users imported from LDAP which are then missing will be disabled" : "قوزغىتىلغاندا LDAP دىن ئىمپورت قىلىنغان ئىشلەتكۈچىلەر ئىناۋەتسىز بولىدۇ", + "Group Display Name Field" : "گۇرۇپپا كۆرسىتىش ئىسمى مەيدانى", + "The LDAP attribute to use to generate the groups's display name." : "LDAP خاسلىقى گۇرۇپپىلارنىڭ كۆرسىتىش نامىنى ھاسىل قىلىشقا ئىشلىتىلىدۇ.", + "Base Group Tree" : "ئاساسى گۇرۇپپا دەرىخى", + "One Group Base DN per line" : "ھەر بىر قۇر بىر گۇرۇپپا ئاساسى DN", + "Group Search Attributes" : "گۇرۇپپا ئىزدەش خاسلىقى", + "Group-Member association" : "گۇرۇپپا-ئەزالار جەمئىيىتى", + "Dynamic Group Member URL" : "ھەرىكەتچان گۇرۇپپا ئەزالىرىنىڭ ئادرېسى", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "گۇرۇپپا ئوبيېكتلىرىدىكى LDAP خاسلىقى LDAP ئىزدەش URL نى ئۆز ئىچىگە ئالغان بولۇپ ، قايسى ئوبيېكتلارنىڭ گۇرۇپپىغا تەۋە ئىكەنلىكىنى بەلگىلەيدۇ. (قۇرۇق تەڭشەك ھەرىكەتچان گۇرۇپپا ئەزالىق ئىقتىدارىنى چەكلەيدۇ.)", + "Nested Groups" : "توپلانغان گۇرۇپپىلار", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "ئاچقاندا گۇرۇپپىلارنى ئۆز ئىچىگە ئالغان گۇرۇپپىلارنى قوللايدۇ. (پەقەت گۇرۇپپا ئەزالىرىنىڭ خاسلىقى DNs بولغاندىلا ئىشلەيدۇ.)", + "Paging chunksize" : "Paging chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize تور بەت LDAP ئىزدەش ئۈچۈن ئىشلىتىلىدۇ ، بۇ ئىشلەتكۈچى ياكى گۇرۇپپا تىزىملاش قاتارلىق چوڭ نەتىجىلەرنى قايتۇرىدۇ. (ئۇنى 0 قىلىپ تەڭشەش بۇ خىل ئەھۋال ئاستىدا LDAP ئىزدەشنى چەكلەيدۇ.)", + "Enable LDAP password changes per user" : "ھەر بىر ئىشلەتكۈچىگە LDAP پارول ئۆزگەرتىشنى قوزغىتىڭ", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP ئىشلەتكۈچىلىرىنىڭ مەخپىي نومۇرىنى ئۆزگەرتىشىگە يول قويۇڭ ۋە دەرىجىدىن تاشقىرى باشقۇرغۇچى ۋە گۇرۇپپا باشقۇرغۇچىلارنىڭ LDAP ئابونتلىرىنىڭ پارولىنى ئۆزگەرتىشىگە يول قويۇڭ. زىيارەتنى كونترول قىلىش سىياسىتى LDAP مۇلازىمېتىرىغا ئاساسەن تەڭشەلگەندىلا ئىشلەيدۇ. مەخپىي نومۇر LDAP مۇلازىمېتىرىغا ئوچۇق تېكىستتە ئەۋەتىلگەنلىكتىن ، چوقۇم مەخپىيلەشتۈرۈشنى ئىشلىتىپ ، LDAP مۇلازىمېتىرىدا مەخپىي نومۇرنى تەڭشەش كېرەك.", + "(New password is sent as plain text to LDAP)" : "(يېڭى پارول LDAP غا ئاددىي تېكىست سۈپىتىدە ئەۋەتىلدى)", + "Default password policy DN" : "كۆڭۈلدىكى پارول سىياسىتى DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "پارولنىڭ مۇددىتى توشقاندا بىر تەرەپ قىلىنىدىغان كۆڭۈلدىكى پارول سىياسىتىنىڭ DN. ھەر بىر ئىشلەتكۈچىگە LDAP پارولى ئۆزگەرتىلگەندىلا ئىشلەيدۇ ، پەقەت OpenLDAP قوللايدۇ. پارولنىڭ ۋاقتى توشۇشنى بىر تەرەپ قىلىش ئۈچۈن بوش قويۇڭ.", + "Special Attributes" : "ئالاھىدە خاسلىق", + "Quota Field" : "Quota Field", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "ئىشلەتكۈچىنىڭ سۈكۈتتىكى نورمىسى ئۈچۈن بوش قويۇڭ. بولمىسا ، LDAP / AD خاسلىقىنى بەلگىلەڭ.", + "Quota Default" : "Quota Default", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "نورما ئۆلچىمىدە نورما بېكىتىلمىگەن LDAP ئىشلەتكۈچىلىرىنىڭ سۈكۈتتىكى نورمىسىنى قاپلىۋېتىڭ.", + "Email Field" : "ئېلېكترونلۇق خەت مەيدانى", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "ئىشلەتكۈچىنىڭ ئېلېكترونلۇق خەتلىرىنى LDAP خاسلىقىدىن تەڭشەڭ. سۈكۈتتىكى ھەرىكەت ئۈچۈن ئۇنى بوش قويۇڭ.", + "User Home Folder Naming Rule" : "ئىشلەتكۈچى ئائىلە ھۆججەت قىسقۇچىغا ئىسىم قويۇش قائىدىسى", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "ئىشلەتكۈچى نامىغا قۇرۇق قويۇڭ (سۈكۈتتىكى). بولمىسا ، LDAP / AD خاسلىقىنى بەلگىلەڭ.", + "\"$home\" Placeholder Field" : "\"$ home\" ئورۇن ئىگىسى", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "سىرتقى ساقلاش سەپلىمىسىدىكى $ home كۆرسىتىلگەن خاسلىقنىڭ قىممىتى بىلەن ئالماشتۇرۇلىدۇ", + "User Profile Attributes" : "ئىشلەتكۈچى ئارخىپى خاسلىقى", + "Phone Field" : "تېلېفون مەيدانى", + "User profile Phone will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تېلېفون بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Website Field" : "تور بېكەت مەيدانى", + "User profile Website will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تور بېكىتى بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Address Field" : "ئادرېس مەيدانى", + "User profile Address will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى ئادرېسى بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Twitter Field" : "Twitter Field", + "User profile Twitter will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى Twitter كۆرسىتىلگەن خاسلىقتىن تەڭشىلىدۇ", + "Fediverse Field" : "Fediverse Field", + "User profile Fediverse will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى Fediverse كۆرسىتىلگەن خاسلىقتىن تەڭشىلىدۇ", + "Organisation Field" : "تەشكىلات مەيدانى", + "User profile Organisation will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تەشكىلاتى بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Role Field" : "رول مەيدانى", + "User profile Role will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى رولى بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Headline Field" : "ماۋزۇ مەيدانى", + "User profile Headline will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى ماۋزۇ بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Biography Field" : "تەرجىمىھالى", + "User profile Biography will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تەرجىمىھالى كۆرسىتىلگەن خاسلىقتىن تەڭشىلىدۇ", + "Birthdate Field" : "تۇغۇلغان كۈنى", + "User profile Date of birth will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تۇغۇلغان ۋاقتى بەلگىلەنگەن خاسلىقتىن بېكىتىلىدۇ", + "Pronouns Field" : "ئالمىشىش مەيدانى", + "User profile Pronouns will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى ئالماشلار بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "سۈكۈتتىكى ھالەتتە ئىشلەتكۈچى ئىسمى UUID خاسلىقىدىن قۇرۇلىدۇ. ئىشلەتكۈچى نامىنىڭ ئۆزگىچە ئىكەنلىكى ۋە ھەرپلەرنى ئۆزگەرتىشنىڭ ھاجىتى يوقلىقىغا كاپالەتلىك قىلىدۇ. ئىچكى ئىشلەتكۈچى نامىدا پەقەت بۇ ھەرپلەرلا رۇخسەت قىلىنغان چەكلىمە بار: [a-zA-Z0-9 _. @ -]. باشقا ھەرپلەر ئۇلارنىڭ ASCII خەت ئالاقىسى بىلەن ئالماشتۇرۇلىدۇ ياكى ئاددىيلا چىقىرىۋېتىلىدۇ. سوقۇلغاندا بىر سان قوشۇلىدۇ / كۆپەيتىلىدۇ. ئىچكى ئىشلەتكۈچى ئىسمى ئىچكى ئىشلەتكۈچىنى پەرقلەندۈرۈش ئۈچۈن ئىشلىتىلىدۇ. ئۇ يەنە ئىشلەتكۈچىنىڭ ئائىلە قىسقۇچىنىڭ سۈكۈتتىكى ئىسمى. ئۇ يىراقتىكى URL لارنىڭ بىر قىسمى ، مەسىلەن بارلىق DAV مۇلازىمىتى ئۈچۈن. بۇ تەڭشەك ئارقىلىق سۈكۈتتىكى ھەرىكەتنى بېسىپ ئۆتكىلى بولىدۇ. ئۆزگەرتىش پەقەت يېڭى سىزىلغان (قوشۇلغان) 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." : "سۈكۈت بويىچە ، UUID خاسلىقى ئاپتوماتىك بايقىلىدۇ. 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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "ئىشلەتكۈچى ئىسمى مېتا سانلىق مەلۇماتنى ساقلاش ۋە تەقسىملەشتە ئىشلىتىلىدۇ. ئىشلەتكۈچىلەرنى ئېنىق تونۇش ۋە تونۇش ئۈچۈن ، ھەر بىر LDAP ئىشلەتكۈچىنىڭ ئىچكى ئىشلەتكۈچى ئىسمى بولىدۇ. بۇ ئىشلەتكۈچى نامىدىن LDAP ئىشلەتكۈچىگە خەرىتە سىزىشنى تەلەپ قىلىدۇ. قۇرۇلغان ئىشلەتكۈچى ئىسمى LDAP ئىشلەتكۈچىنىڭ UUID غا سىزىلغان. بۇنىڭدىن باشقا ، DN غەملەك بىلەن LDAP ئۆز-ئارا تەسىرنى ئازايتىدۇ ، ئەمما ئۇ پەرقلەندۈرۈشكە ئىشلىتىلمەيدۇ. ئەگەر DN ئۆزگەرسە ، ئۆزگىرىشلەر تېپىلىدۇ. ئىچكى ئىشلەتكۈچى ئىسمى ھەممە يەردە ئىشلىتىلىدۇ. خەرىتىنى تازىلاش ھەممە يەردە ئېشىپ قالىدۇ. خەرىتىنى تازىلاش سەپلىمىگە سەزگۈر ئەمەس ، ئۇ بارلىق LDAP سەپلىمىسىگە تەسىر كۆرسىتىدۇ! خەرىتىنى ئىشلەپچىقىرىش مۇھىتىدا ھەرگىز تازىلىماڭ ، پەقەت سىناق ياكى تەجرىبە باسقۇچىدىلا.", + "Clear Username-LDAP User Mapping" : "ئىشلەتكۈچى ئىسمى- LDAP ئىشلەتكۈچى خەرىتىسىنى تازىلاڭ", + "Clear Groupname-LDAP Group Mapping" : "گۇرۇپپا ئىسمى- LDAP گۇرۇپپا خەرىتىسىنى تازىلاش", + "Invalid configuration. Please have a look at the logs for further details." : "سەپلىمە ئىناۋەتسىز. تېخىمۇ كۆپ تەپسىلاتلار ئۈچۈن خاتىرىلەرنى كۆرۈپ بېقىڭ." }, -"nplurals=1; plural=0;"); +"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ug.json b/apps/user_ldap/l10n/ug.json index adecc82972d..1a0ac4aa77e 100644 --- a/apps/user_ldap/l10n/ug.json +++ b/apps/user_ldap/l10n/ug.json @@ -1,12 +1,219 @@ { "translations": { - "Users" : "ئىشلەتكۈچىلەر", - "Groups" : "گۇرۇپپا", + "Failed to clear the mappings." : "خەرىتىنى تازىلاش مەغلۇب بولدى.", + "Failed to delete the server configuration" : "مۇلازىمېتىر سەپلىمىسىنى ئۆچۈرەلمىدى", + "Invalid configuration: Anonymous binding is not allowed." : "ئىناۋەتسىز سەپلىمىسى: نامسىز باغلاشقا بولمايدۇ.", + "Valid configuration, connection established!" : "ئىناۋەتلىك سەپلىمە ، ئۇلىنىش قۇرۇلدى!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "ئىناۋەتلىك سەپلىمىسى ، ئەمما باغلاش مەغلۇپ بولدى. مۇلازىمېتىر تەڭشىكى ۋە كىنىشكىسىنى تەكشۈرۈپ بېقىڭ.", + "No action specified" : "ھېچقانداق ھەرىكەت بەلگىلەنمىدى", + "No configuration specified" : "سەپلىمىسى ئېنىق ئەمەس", + "No data specified" : "ھېچقانداق سانلىق مەلۇمات كۆرسىتىلمىدى", + "Invalid data specified" : "ئىناۋەتسىز سانلىق مەلۇمات", + "Action does not exist" : "ھەرىكەت مەۋجۇت ئەمەس", + "Renewing …" : "يېڭىلاش…", + "Very weak password" : "پارول بەك ئاجىز", + "Weak password" : "پارول ئاجىز", + "So-so password" : "شۇڭا مەخپىي نومۇر", + "Good password" : "ياخشى پارول", + "Strong password" : "كۈچلۈك پارول", + "The Base DN appears to be wrong" : "Base DN خاتادەك قىلىدۇ", + "Testing configuration…" : "سىناق سەپلىمىسى…", + "Configuration incorrect" : "سەپلىمىسى خاتا", + "Configuration incomplete" : "سەپلىمىسى تولۇق ئەمەس", + "Configuration OK" : "سەپلىمىسى بولىدۇ", + "Select groups" : "گۇرۇپپىلارنى تاللاڭ", + "Select object classes" : "ئوبيېكت دەرسلىرىنى تاللاڭ", + "Please check the credentials, they seem to be wrong." : "كىنىشكىنى تەكشۈرۈپ بېقىڭ ، ئۇلار خاتادەك قىلىدۇ.", + "Please specify the port, it could not be auto-detected." : "پورتنى بەلگىلىۈڭ ، ئۇنى ئاپتوماتىك بايقىغىلى بولمايدۇ.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN نى ئاپتوماتىك بايقىغىلى بولمايدۇ ، كىنىشكا ، باش ئاپپارات ۋە پورتنى تۈزىتىڭ.", + "Could not detect Base DN, please enter it manually." : "Base DN نى بايقىيالمىدى ، قولدا كىرگۈزۈڭ.", + "{nthServer}. Server" : "th nthServer}. مۇلازىمېتىر", + "No object found in the given Base DN. Please revise." : "بېرىلگەن Base DN دا ھېچقانداق نەرسە تېپىلمىدى. قايتا قاراپ بېقىڭ.", + "More than 1,000 directory entries available." : "1000 دىن ئارتۇق مۇندەرىجە تۈرى بار.", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "خاتالىق كۆرۈلدى. Base DN ، شۇنداقلا ئۇلىنىش تەڭشەكلىرى ۋە كىنىشكىسىنى تەكشۈرۈپ بېقىڭ.", + "Do you really want to delete the current Server Configuration?" : "نۆۋەتتىكى مۇلازىمېتىر سەپلىمىسىنى ئۆچۈرمەكچىمۇ؟", + "Confirm Deletion" : "ئۆچۈرۈشنى جەزملەشتۈرۈڭ", + "Mappings cleared successfully!" : "خەرىتە مۇۋەپپەقىيەتلىك تازىلاندى!", + "Error while clearing the mappings." : "خەرىتىنى تازىلاش جەريانىدا خاتالىق.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "نامسىز باغلاشقا بولمايدۇ. ئىشلەتكۈچى DN ۋە پارول بىلەن تەمىنلەڭ.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP مەشغۇلات خاتالىقى. نامسىز باغلىنىشقا رۇخسەت قىلىنمايدۇ.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "تېجەش مەغلۇب بولدى. سانداننىڭ مەشغۇلات قىلىۋاتقانلىقىنى جەزملەشتۈرۈڭ. داۋاملاشتۇرۇشتىن بۇرۇن قايتا يۈكلەڭ.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "ھالەتنى ئالماشتۇرغاندا ئاپتوماتىك LDAP سوئاللىرىنى قوزغىتىدۇ. LDAP چوڭلۇقىڭىزغا ئاساسەن ئۇلار بىر ئاز ۋاقىت كېتىشى مۇمكىن. سىز يەنىلا ھالەتنى ئالماشتۇرامسىز؟", + "Mode switch" : "ھالەت ئالماشتۇرۇش", + "Select attributes" : "خاسلىقنى تاللاڭ", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "ئىشلەتكۈچى تېپىلمىدى. كىرىش خاسلىقىڭىز ۋە ئىشلەتكۈچى ئىسمىڭىزنى تەكشۈرۈپ بېقىڭ. ئۈنۈملۈك سۈزگۈچ (بۇيرۇق قۇرىنى دەلىللەش ئۈچۈن كۆچۈرۈپ چاپلاش): <br/>", + "User found and settings verified." : "ئىشلەتكۈچى تېپىلدى ۋە تەڭشەكلىرى دەلىللەندى.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "ئىزدەشنى تارايتىشنى ئويلاڭ ، چۈنكى ئۇ نۇرغۇن ئىشلەتكۈچىلەرنى ئۆز ئىچىگە ئالىدۇ ، پەقەت بىرىنچىسىلا كىرەلەيدۇ.", + "An unspecified error occurred. Please check log and settings." : "ئېنىقلانمىغان خاتالىق كۆرۈلدى. خاتىرە ۋە تەڭشەكلەرنى تەكشۈرۈپ بېقىڭ.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ئىزدەش سۈزگۈچ ئىناۋەتسىز ، بەلكىم ئېچىلغان ۋە يېپىق تىرناقنىڭ تەكشى بولماسلىقى قاتارلىق گرامماتىكىلىق مەسىلىلەر سەۋەبىدىن بولۇشى مۇمكىن. قايتا قاراپ بېقىڭ.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP / AD غا ئۇلىنىش خاتالىقى كۆرۈلدى. ساھىبجامال ، پورت ۋە كىنىشكىنى تەكشۈرۈپ بېقىڭ.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"% Uid\" ئورۇن ئىگىسى يوقاپ كەتتى. ئۇ LDAP / AD نى سورىغاندا كىرىش ئىسمى بىلەن ئالماشتۇرۇلىدۇ.", + "Please provide a login name to test against" : "سىناش ئۈچۈن كىرىش ئىسمى بىلەن تەمىنلەڭ", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "گۇرۇپپا قۇتىسى چەكلەنگەن ، چۈنكى LDAP / AD مۇلازىمېتىرى memberOf نى قوللىمايدۇ.", + "Please login with the new password" : "يېڭى پارول بىلەن كىرىڭ", + "LDAP User backend" : "LDAP ئىشلەتكۈچى ئارقا سۇپىسى", + "Your password will expire tomorrow." : "پارولىڭىز ئەتە توشىدۇ.", + "Your password will expire today." : "پارولىڭىز بۈگۈن توشىدۇ.", + "LDAP/AD integration" : "LDAP / AD بىرلەشتۈرۈش", + "LDAP Connection" : "LDAP ئۇلىنىشى", + "Invalid LDAP UUIDs" : "ئىناۋەتسىز LDAP UUIDs", + "None found" : "تېپىلمىدى", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAP ھېساباتى ياكى گۇرۇپپىلارنىڭ ئىناۋەتسىز UUID تېپىلدى. LDAP سەپلىمىسىنىڭ مۇتەخەسسىسلەر بۆلىكىدىكى «UUID بايقاشنى قاپلاش» تەڭشەكلىرىڭىزنى تەكشۈرۈپ ، «occ ldap: update-uuid» نى ئىشلىتىپ ئۇلارنى يېڭىلاڭ.", + "> 1000 groups found" : "> 1000 گۇرۇپپا تېپىلدى", + "> 1000 users found" : "> 1000 ئىشلەتكۈچى تېپىلدى", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "ئىشلەتكۈچى كۆرسىتىش ئىسمى خاسلىقىنى بايقىيالمىدى. ئىلغار LDAP تەڭشىكىدە ئۆزىڭىز بەلگىلىۈڭ.", + "Could not find the desired feature" : "لازىملىق ئىقتىدارنى تاپالمىدى", + "Invalid Host" : "ئىناۋەتسىز", + "LDAP user and group backend" : "LDAP ئىشلەتكۈچى ۋە گۇرۇپپا ئارقا سەھنىسى", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "بۇ پروگرامما باشقۇرغۇچىنىڭ Nextcloud نى LDAP ئاساسىدىكى ئىشلەتكۈچى مۇندەرىجىسىگە ئۇلىيالايدۇ.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "بۇ پروگرامما باشقۇرغۇچىنىڭ Nextcloud نى LDAP ئاساسىدىكى ئىشلەتكۈچى مۇندەرىجىسىگە ئۇلاپ ، ئىشلەتكۈچى ، گۇرۇپپا ۋە ئىشلەتكۈچى خاسلىقى بىلەن تەمىنلەيدۇ. باشقۇرغۇچى بۇ پروگراممىنى LDAP كۆرۈنمە يۈزى ئارقىلىق بىر ياكى بىر قانچە LDAP مۇندەرىجىسىگە ياكى ئاكتىپ مۇندەرىجىگە ئۇلىيالايدۇ. ئىشلەتكۈچى نورمىسى ، ئېلېكترونلۇق خەت ، باش سۈرەت ، گۇرۇپپا ئەزالىرى ۋە باشقىلار قاتارلىق خاسلىقلارنى مۇناسىپ سوئال ۋە سۈزگۈچلەر بىلەن مۇندەرىجىدىن Nextcloud غا تارتقىلى بولىدۇ.\n\nئىشلەتكۈچى LDAP ياكى AD كىنىشكىسى بىلەن Nextcloud غا كىرىدۇ ، ھەمدە LDAP ياكى AD مۇلازىمېتىرى بىر تەرەپ قىلغان دەلىللەش تەلىپىگە ئاساسەن ئىجازەتكە ئېرىشىدۇ. Nextcloud LDAP ياكى AD مەخپىي نومۇرىنى ساقلىمايدۇ ، بەلكى بۇ كىنىشكىلار ئىشلەتكۈچىنى دەلىللەش ئۈچۈن ئىشلىتىلىدۇ ، ئاندىن Nextcloud ئىشلەتكۈچى كىملىكى ئۈچۈن بىر يىغىن ئىشلىتىدۇ. LDAP ئىشلەتكۈچى ۋە گۇرۇپپا ئارقا بەت ھۆججىتىدە تېخىمۇ كۆپ ئۇچۇرلار بار.", + "Test Configuration" : "سىناق سەپلىمىسى", "Help" : "ياردەم", + "Groups meeting these criteria are available in %s:" : "بۇ ئۆلچەمگە توشىدىغان گۇرۇپپىلار% s دا بار:", + "Only these object classes:" : "پەقەت بۇ ئوبيېكت دەرسلىرى:", + "Only from these groups:" : "پەقەت بۇ گۇرۇپپىلاردىن:", + "Search groups" : "ئىزدەش گۇرۇپپىلىرى", + "Available groups" : "ئىشلەتكىلى بولىدىغان گۇرۇپپىلار", + "Selected groups" : "تاللانغان گۇرۇپپىلار", + "Edit LDAP Query" : "LDAP سوئالنى تەھرىرلەڭ", + "LDAP Filter:" : "LDAP سۈزگۈچ:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "سۈزگۈچ قايسى LDAP گۇرۇپپىسىنىڭ% s مىسالىغا ئېرىشەلەيدىغانلىقىنى بەلگىلەيدۇ.", + "Verify settings and count the groups" : "تەڭشەكلەرنى تەكشۈرۈپ گۇرۇپپىلارنى ساناپ بېقىڭ", + "When logging in, %s will find the user based on the following attributes:" : "تىزىمغا كىرگەندە ،% s تۆۋەندىكى خاسلىقلارغا ئاساسەن ئىشلەتكۈچىنى تاپىدۇ:", + "LDAP/AD Username:" : "LDAP / AD ئىشلەتكۈچى ئىسمى:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "LDAP / AD ئىشلەتكۈچى نامىغا كىرىشكە يول قويىدۇ ، بۇ «uid» ياكى «sAMAccountName» بولۇپ ، بايقايدۇ.", + "LDAP/AD Email Address:" : "LDAP / AD ئېلېكترونلۇق خەت ئادرېسى:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "ئېلېكترونلۇق خەت خاسلىقىغا قارشى كىرىشكە يول قويىدۇ. \"mail\" ۋە \"mailPrimaryAddress\" رۇخسەت قىلىنغان.", + "Other Attributes:" : "باشقا خاسلىقى:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "كىرىشكە ئۇرۇنغاندا سۈزگۈچنى بەلگىلەيدۇ. \"%% uid\" كىرىش ھەرىكىتىدىكى ئىشلەتكۈچى نامىنىڭ ئورنىنى ئالىدۇ. مىسال: \"uid = %% uid\"", + "Test Loginname" : "سىناق خاتىرىسى", + "Attempts to receive a DN for the given loginname and the current login filter" : "بېرىلگەن كىرىش ئىسمى ۋە نۆۋەتتىكى كىرىش سۈزگۈچ ئۈچۈن DN تاپشۇرۇۋېلىشقا ئۇرۇنۇش", + "Verify settings" : "تەڭشەكلەرنى دەلىللەڭ", + "%s. Server:" : "% s. مۇلازىمېتىر:", + "Add a new configuration" : "يېڭى سەپلىمە قوشۇڭ", + "Copy current configuration into new directory binding" : "نۆۋەتتىكى سەپلىمىنى يېڭى مۇندەرىجە باغلاشقا كۆچۈرۈڭ", + "Delete the current configuration" : "نۆۋەتتىكى سەپلىمىنى ئۆچۈرۈڭ", "Host" : "باش ئاپپارات", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "ئەگەر SSL تەلەپ قىلمىسىڭىز ، كېلىشىمنى ئەمەلدىن قالدۇرالايسىز. ئەگەر شۇنداق بولسا ، ldaps دىن باشلاڭ: //", "Port" : "ئېغىز", + "Detect 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 ۋە پارولنى بوش قويۇڭ.", "Password" : "ئىم", + "For anonymous access, leave DN and Password empty." : "نامسىز زىيارەت قىلىش ئۈچۈن DN ۋە پارولنى بوش قويۇڭ.", + "Save Credentials" : "كىنىشكىنى ساقلاش", + "One Base DN per line" : "ھەر بىر قۇر DN", + "You can specify Base DN for users and groups in the Advanced tab" : "ئالىي بەتكۈچتىكى ئىشلەتكۈچى ۋە گۇرۇپپىلار ئۈچۈن Base DN نى بەلگىلىيەلەيسىز", + "Detect Base DN" : "Base DN نى ئېنىقلاڭ", + "Test Base DN" : "سىناق ئاساسى DN", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "ئاپتوماتىك LDAP تەلىپىدىن ساقلىنىدۇ. چوڭراق تەڭشەش ئۈچۈن ياخشى ، ئەمما بىر قىسىم LDAP بىلىملىرىنى تەلەپ قىلىدۇ.", + "Manually enter LDAP filters (recommended for large directories)" : "LDAP سۈزگۈچنى قولدا كىرگۈزۈڭ (چوڭ مۇندەرىجە تەۋسىيە قىلىنىدۇ)", + "Listing and searching for users is constrained by these criteria:" : "ئابونتلارنى تىزىش ۋە ئىزدەش بۇ ئۆلچەملەر تەرىپىدىن چەكلەنگەن:", + "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." : "ئىشلەتكۈچىلەر ئۈچۈن ئەڭ كۆپ ئۇچرايدىغان ئوبيېكت سىنىپلىرى تەشكىلىي شەخس ، ئادەم ، ئىشلەتكۈچى ۋە inetOrgPerson. قايسى ئوبيېكت سىنىپىنى تاللاشنى بىلمىسىڭىز مۇندەرىجە باشقۇرغۇچىڭىز بىلەن مەسلىھەتلىشىڭ.", + "The filter specifies which LDAP users shall have access to the %s instance." : "سۈزگۈچ قايسى LDAP ئىشلەتكۈچىلەرنىڭ% s مىسالىغا ئېرىشەلەيدىغانلىقىنى بەلگىلەيدۇ.", + "Verify settings and count users" : "تەڭشەكلەرنى تەكشۈرۈپ ، ئىشلەتكۈچىنى ساناپ بېقىڭ", + "Saving" : "تېجەش", + "Back" : "قايتىش", + "Continue" : "داۋاملاشتۇر", + "Please renew your password." : "پارولىڭىزنى يېڭىلاڭ.", + "An internal error occurred." : "ئىچكى خاتالىق كۆرۈلدى.", + "Please try again or contact your administrator." : "قايتا سىناڭ ياكى باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.", + "Current password" : "نۆۋەتتىكى ئىم", + "New password" : "يېڭى ئىم", + "Renew password" : "پارولنى يېڭىلاڭ", + "Wrong password." : "پارول خاتا.", + "Cancel" : "ۋاز كەچ", + "Server" : "مۇلازىمېتىر", + "Users" : "ئىشلەتكۈچىلەر", + "Login Attributes" : "كىرىش خاسلىقى", + "Groups" : "گۇرۇپپا", + "Expert" : "مۇتەخەسسىس", "Advanced" : "ئالىي", + "<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> PHP LDAP مودۇلى ئورنىتىلمىدى ، ئارقا تەرىپى ئىشلىمەيدۇ. ئۇنى قاچىلاشنى سىستېما باشقۇرغۇچىڭىزدىن سوراڭ.", "Connection Settings" : "باغلىنىش تەڭشىكى", - "Configuration Active" : "سەپلىمە ئاكتىپ" -},"pluralForm" :"nplurals=1; plural=0;" + "Configuration Active" : "سەپلىمە ئاكتىپ", + "When unchecked, this configuration will be skipped." : "تەكشۈرۈلمىسە ، بۇ سەپلىمە ئاتلاپ كېتىدۇ.", + "Backup (Replica) Host" : "زاپاسلاش (Replica) رىياسەتچىسى", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "ئىختىيارى زاپاسلاش مۇلازىمىتىرى بېرىڭ. ئۇ چوقۇم ئاساسلىق LDAP / AD مۇلازىمېتىرنىڭ كۆپەيتىلگەن نۇسخىسى بولۇشى كېرەك.", + "Backup (Replica) Port" : "زاپاسلاش (Replica) ئېغىزى", + "Disable Main Server" : "ئاساسلىق مۇلازىمېتىرنى چەكلەڭ", + "Only connect to the replica server." : "پەقەت كۆپەيتىلگەن مۇلازىمېتىرغا ئۇلاڭ.", + "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 مۇلازىمېتىرىڭىزغا LDAP مۇلازىمېتىرنىڭ SSL گۇۋاھنامىسىنى ئەكىرىڭ.", + "Cache Time-To-Live" : "Cache Time-To-Live", + "in seconds. A change empties the cache." : "سېكۇنتتا. ئۆزگەرتىش غەملەكنى بوشاتتى.", + "Directory Settings" : "مۇندەرىجە تەڭشىكى", + "User Display Name Field" : "ئىشلەتكۈچى كۆرسىتىش ئىسمى", + "The LDAP attribute to use to generate the user's display name." : "LDAP خاسلىقى ئىشلەتكۈچىنىڭ كۆرسىتىش نامىنى ھاسىل قىلىشقا ئىشلىتىلىدۇ.", + "2nd User Display Name Field" : "2-ئىشلەتكۈچى كۆرسىتىش ئىسمى مەيدانى", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "ئىختىيارىي. تىرناق ئىچىدىكى كۆرسىتىش نامىغا قوشۇلىدىغان LDAP خاسلىقى. مەسىلەن: »جون دو (john.doe@example.org)«.", + "Base User Tree" : "ئاساسى ئىشلەتكۈچى دەرىخى", + "One User Base DN per line" : "ھەر بىر قۇردا بىر ئىشلەتكۈچى ئاساسى DN", + "User Search Attributes" : "ئىشلەتكۈچى ئىزدەش خاسلىقى", + "Optional; one attribute per line" : "ئىختىيارىي ھەر بىر قۇرغا بىر خاسلىق", + "Disable users missing from LDAP" : "LDAP دىن يوقاپ كەتكەن ئىشلەتكۈچىلەرنى چەكلەڭ", + "When switched on, users imported from LDAP which are then missing will be disabled" : "قوزغىتىلغاندا LDAP دىن ئىمپورت قىلىنغان ئىشلەتكۈچىلەر ئىناۋەتسىز بولىدۇ", + "Group Display Name Field" : "گۇرۇپپا كۆرسىتىش ئىسمى مەيدانى", + "The LDAP attribute to use to generate the groups's display name." : "LDAP خاسلىقى گۇرۇپپىلارنىڭ كۆرسىتىش نامىنى ھاسىل قىلىشقا ئىشلىتىلىدۇ.", + "Base Group Tree" : "ئاساسى گۇرۇپپا دەرىخى", + "One Group Base DN per line" : "ھەر بىر قۇر بىر گۇرۇپپا ئاساسى DN", + "Group Search Attributes" : "گۇرۇپپا ئىزدەش خاسلىقى", + "Group-Member association" : "گۇرۇپپا-ئەزالار جەمئىيىتى", + "Dynamic Group Member URL" : "ھەرىكەتچان گۇرۇپپا ئەزالىرىنىڭ ئادرېسى", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "گۇرۇپپا ئوبيېكتلىرىدىكى LDAP خاسلىقى LDAP ئىزدەش URL نى ئۆز ئىچىگە ئالغان بولۇپ ، قايسى ئوبيېكتلارنىڭ گۇرۇپپىغا تەۋە ئىكەنلىكىنى بەلگىلەيدۇ. (قۇرۇق تەڭشەك ھەرىكەتچان گۇرۇپپا ئەزالىق ئىقتىدارىنى چەكلەيدۇ.)", + "Nested Groups" : "توپلانغان گۇرۇپپىلار", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "ئاچقاندا گۇرۇپپىلارنى ئۆز ئىچىگە ئالغان گۇرۇپپىلارنى قوللايدۇ. (پەقەت گۇرۇپپا ئەزالىرىنىڭ خاسلىقى DNs بولغاندىلا ئىشلەيدۇ.)", + "Paging chunksize" : "Paging chunksize", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize تور بەت LDAP ئىزدەش ئۈچۈن ئىشلىتىلىدۇ ، بۇ ئىشلەتكۈچى ياكى گۇرۇپپا تىزىملاش قاتارلىق چوڭ نەتىجىلەرنى قايتۇرىدۇ. (ئۇنى 0 قىلىپ تەڭشەش بۇ خىل ئەھۋال ئاستىدا LDAP ئىزدەشنى چەكلەيدۇ.)", + "Enable LDAP password changes per user" : "ھەر بىر ئىشلەتكۈچىگە LDAP پارول ئۆزگەرتىشنى قوزغىتىڭ", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "LDAP ئىشلەتكۈچىلىرىنىڭ مەخپىي نومۇرىنى ئۆزگەرتىشىگە يول قويۇڭ ۋە دەرىجىدىن تاشقىرى باشقۇرغۇچى ۋە گۇرۇپپا باشقۇرغۇچىلارنىڭ LDAP ئابونتلىرىنىڭ پارولىنى ئۆزگەرتىشىگە يول قويۇڭ. زىيارەتنى كونترول قىلىش سىياسىتى LDAP مۇلازىمېتىرىغا ئاساسەن تەڭشەلگەندىلا ئىشلەيدۇ. مەخپىي نومۇر LDAP مۇلازىمېتىرىغا ئوچۇق تېكىستتە ئەۋەتىلگەنلىكتىن ، چوقۇم مەخپىيلەشتۈرۈشنى ئىشلىتىپ ، LDAP مۇلازىمېتىرىدا مەخپىي نومۇرنى تەڭشەش كېرەك.", + "(New password is sent as plain text to LDAP)" : "(يېڭى پارول LDAP غا ئاددىي تېكىست سۈپىتىدە ئەۋەتىلدى)", + "Default password policy DN" : "كۆڭۈلدىكى پارول سىياسىتى DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "پارولنىڭ مۇددىتى توشقاندا بىر تەرەپ قىلىنىدىغان كۆڭۈلدىكى پارول سىياسىتىنىڭ DN. ھەر بىر ئىشلەتكۈچىگە LDAP پارولى ئۆزگەرتىلگەندىلا ئىشلەيدۇ ، پەقەت OpenLDAP قوللايدۇ. پارولنىڭ ۋاقتى توشۇشنى بىر تەرەپ قىلىش ئۈچۈن بوش قويۇڭ.", + "Special Attributes" : "ئالاھىدە خاسلىق", + "Quota Field" : "Quota Field", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "ئىشلەتكۈچىنىڭ سۈكۈتتىكى نورمىسى ئۈچۈن بوش قويۇڭ. بولمىسا ، LDAP / AD خاسلىقىنى بەلگىلەڭ.", + "Quota Default" : "Quota Default", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "نورما ئۆلچىمىدە نورما بېكىتىلمىگەن LDAP ئىشلەتكۈچىلىرىنىڭ سۈكۈتتىكى نورمىسىنى قاپلىۋېتىڭ.", + "Email Field" : "ئېلېكترونلۇق خەت مەيدانى", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "ئىشلەتكۈچىنىڭ ئېلېكترونلۇق خەتلىرىنى LDAP خاسلىقىدىن تەڭشەڭ. سۈكۈتتىكى ھەرىكەت ئۈچۈن ئۇنى بوش قويۇڭ.", + "User Home Folder Naming Rule" : "ئىشلەتكۈچى ئائىلە ھۆججەت قىسقۇچىغا ئىسىم قويۇش قائىدىسى", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "ئىشلەتكۈچى نامىغا قۇرۇق قويۇڭ (سۈكۈتتىكى). بولمىسا ، LDAP / AD خاسلىقىنى بەلگىلەڭ.", + "\"$home\" Placeholder Field" : "\"$ home\" ئورۇن ئىگىسى", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "سىرتقى ساقلاش سەپلىمىسىدىكى $ home كۆرسىتىلگەن خاسلىقنىڭ قىممىتى بىلەن ئالماشتۇرۇلىدۇ", + "User Profile Attributes" : "ئىشلەتكۈچى ئارخىپى خاسلىقى", + "Phone Field" : "تېلېفون مەيدانى", + "User profile Phone will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تېلېفون بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Website Field" : "تور بېكەت مەيدانى", + "User profile Website will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تور بېكىتى بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Address Field" : "ئادرېس مەيدانى", + "User profile Address will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى ئادرېسى بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Twitter Field" : "Twitter Field", + "User profile Twitter will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى Twitter كۆرسىتىلگەن خاسلىقتىن تەڭشىلىدۇ", + "Fediverse Field" : "Fediverse Field", + "User profile Fediverse will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى Fediverse كۆرسىتىلگەن خاسلىقتىن تەڭشىلىدۇ", + "Organisation Field" : "تەشكىلات مەيدانى", + "User profile Organisation will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تەشكىلاتى بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Role Field" : "رول مەيدانى", + "User profile Role will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى رولى بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Headline Field" : "ماۋزۇ مەيدانى", + "User profile Headline will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى ماۋزۇ بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "Biography Field" : "تەرجىمىھالى", + "User profile Biography will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تەرجىمىھالى كۆرسىتىلگەن خاسلىقتىن تەڭشىلىدۇ", + "Birthdate Field" : "تۇغۇلغان كۈنى", + "User profile Date of birth will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى تۇغۇلغان ۋاقتى بەلگىلەنگەن خاسلىقتىن بېكىتىلىدۇ", + "Pronouns Field" : "ئالمىشىش مەيدانى", + "User profile Pronouns will be set from the specified attribute" : "ئىشلەتكۈچى ئارخىپى ئالماشلار بەلگىلەنگەن خاسلىقتىن تەڭشىلىدۇ", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "سۈكۈتتىكى ھالەتتە ئىشلەتكۈچى ئىسمى UUID خاسلىقىدىن قۇرۇلىدۇ. ئىشلەتكۈچى نامىنىڭ ئۆزگىچە ئىكەنلىكى ۋە ھەرپلەرنى ئۆزگەرتىشنىڭ ھاجىتى يوقلىقىغا كاپالەتلىك قىلىدۇ. ئىچكى ئىشلەتكۈچى نامىدا پەقەت بۇ ھەرپلەرلا رۇخسەت قىلىنغان چەكلىمە بار: [a-zA-Z0-9 _. @ -]. باشقا ھەرپلەر ئۇلارنىڭ ASCII خەت ئالاقىسى بىلەن ئالماشتۇرۇلىدۇ ياكى ئاددىيلا چىقىرىۋېتىلىدۇ. سوقۇلغاندا بىر سان قوشۇلىدۇ / كۆپەيتىلىدۇ. ئىچكى ئىشلەتكۈچى ئىسمى ئىچكى ئىشلەتكۈچىنى پەرقلەندۈرۈش ئۈچۈن ئىشلىتىلىدۇ. ئۇ يەنە ئىشلەتكۈچىنىڭ ئائىلە قىسقۇچىنىڭ سۈكۈتتىكى ئىسمى. ئۇ يىراقتىكى URL لارنىڭ بىر قىسمى ، مەسىلەن بارلىق DAV مۇلازىمىتى ئۈچۈن. بۇ تەڭشەك ئارقىلىق سۈكۈتتىكى ھەرىكەتنى بېسىپ ئۆتكىلى بولىدۇ. ئۆزگەرتىش پەقەت يېڭى سىزىلغان (قوشۇلغان) 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." : "سۈكۈت بويىچە ، UUID خاسلىقى ئاپتوماتىك بايقىلىدۇ. 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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "ئىشلەتكۈچى ئىسمى مېتا سانلىق مەلۇماتنى ساقلاش ۋە تەقسىملەشتە ئىشلىتىلىدۇ. ئىشلەتكۈچىلەرنى ئېنىق تونۇش ۋە تونۇش ئۈچۈن ، ھەر بىر LDAP ئىشلەتكۈچىنىڭ ئىچكى ئىشلەتكۈچى ئىسمى بولىدۇ. بۇ ئىشلەتكۈچى نامىدىن LDAP ئىشلەتكۈچىگە خەرىتە سىزىشنى تەلەپ قىلىدۇ. قۇرۇلغان ئىشلەتكۈچى ئىسمى LDAP ئىشلەتكۈچىنىڭ UUID غا سىزىلغان. بۇنىڭدىن باشقا ، DN غەملەك بىلەن LDAP ئۆز-ئارا تەسىرنى ئازايتىدۇ ، ئەمما ئۇ پەرقلەندۈرۈشكە ئىشلىتىلمەيدۇ. ئەگەر DN ئۆزگەرسە ، ئۆزگىرىشلەر تېپىلىدۇ. ئىچكى ئىشلەتكۈچى ئىسمى ھەممە يەردە ئىشلىتىلىدۇ. خەرىتىنى تازىلاش ھەممە يەردە ئېشىپ قالىدۇ. خەرىتىنى تازىلاش سەپلىمىگە سەزگۈر ئەمەس ، ئۇ بارلىق LDAP سەپلىمىسىگە تەسىر كۆرسىتىدۇ! خەرىتىنى ئىشلەپچىقىرىش مۇھىتىدا ھەرگىز تازىلىماڭ ، پەقەت سىناق ياكى تەجرىبە باسقۇچىدىلا.", + "Clear Username-LDAP User Mapping" : "ئىشلەتكۈچى ئىسمى- LDAP ئىشلەتكۈچى خەرىتىسىنى تازىلاڭ", + "Clear Groupname-LDAP Group Mapping" : "گۇرۇپپا ئىسمى- LDAP گۇرۇپپا خەرىتىسىنى تازىلاش", + "Invalid configuration. Please have a look at the logs for further details." : "سەپلىمە ئىناۋەتسىز. تېخىمۇ كۆپ تەپسىلاتلار ئۈچۈن خاتىرىلەرنى كۆرۈپ بېقىڭ." +},"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/uk.js b/apps/user_ldap/l10n/uk.js index f377e8bdf80..21992698f59 100644 --- a/apps/user_ldap/l10n/uk.js +++ b/apps/user_ldap/l10n/uk.js @@ -1,16 +1,17 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "Не вдалося очистити відображення.", + "Failed to clear the mappings." : "Не вдалося очистити мапування.", "Failed to delete the server configuration" : "Не вдалося вилучити конфігурацію сервера", "Invalid configuration: Anonymous binding is not allowed." : "Неправильна конфігурація. Анонімне приєднання не дозволено.", "Valid configuration, connection established!" : "Правильна конфігурація, з'єднання встановлено!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Правильна конфігурація, але приєднання не вдалося. Будь ласка, перевірте налаштування сервера та дані авторизації.", - "Invalid configuration. Please have a look at the logs for further details." : "Неправильна конфігурація. Перевірте журнал для докладної інформації.", + "Invalid configuration: %s" : "Неправильна конфігурація: %s", "No action specified" : "Ніяких дій не вказано", "No configuration specified" : "Немає конфігурації", "No data specified" : "Немає даних", - " Could not set configuration %s" : "Не вдалося встановити конфігурацію %s", + "Invalid data specified" : "Вказано неправильні дані", + "Could not set configuration %1$s to %2$s" : "Не вдалося встановити конфігурацію %1$s на %2$s", "Action does not exist" : "Дія не існує", "Renewing …" : "Оновлення...", "Very weak password" : "Дуже слабкий пароль", @@ -27,40 +28,92 @@ OC.L10N.register( "Select object classes" : "Виберіть класи об'єктів", "Please check the credentials, they seem to be wrong." : "Перевірте дані авторизації, можливо, що вони неправильні.", "Please specify the port, it could not be auto-detected." : "Будь ласка, вкажіть порт, він не може бути визначений автоматично.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Неможливо автоматично визначити базове DN, перегляньте облікові дані, хост і порт.", + "Could not detect Base DN, please enter it manually." : "Не вдалося визначити базовий DN, введіть його вручну.", "{nthServer}. Server" : "{nthServer}. Сервер", + "No object found in the given Base DN. Please revise." : "Не знайдено жодного об’єкта в даному базовому DN. Будь ласка, перегляньте.", + "More than 1,000 directory entries available." : "Доступно понад 1000 записів каталогу.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Запис {objectsFound} доступний у межах наданого базового DN","{objectsFound} записи доступні в межах наданого базового DN","{objectsFound} записи доступні в межах наданого базового DN","{objectsFound} записи доступні в межах наданого базового DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Сталась помилка. Будь ласка, перевірте базове DN, а також налаштування підключення та облікові дані.", "Do you really want to delete the current Server Configuration?" : "Дійсно вилучити поточну конфігурацію сервера ?", "Confirm Deletion" : "Підтвердіть вилучення", - "Mappings cleared successfully!" : "Відображення успішно очищенні!", + "Mappings cleared successfully!" : "Мапування успішно очищено!", "Error while clearing the mappings." : "Помилка при очищенні відображень.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Анонімне прив'язування не допускається. Укажіть DN користувача та пароль.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Помилка операцій LDAP. Анонімне прив’язування може бути заборонено.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Не вдалося зберегти. Переконайтеся, що база даних працює. Перезавантажте, перш ніж продовжити.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Перемикання режиму активує автоматичні запити LDAP. Залежно від розміру LDAP, це може зайняти деякий час. Ви все ще хочете змінити режим?", + "Mode switch" : "Перемикач режимів", "Select attributes" : "Виберіть атрибути", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Користувача не знайдено. Перевірте свої атрибути входу та ім’я користувача. Ефективний фільтр (для копіювання та вставлення для перевірки командного рядка): <br/>", "User found and settings verified." : "Користувача знайдено і налаштування перевірені.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Розгляньте можливість звузити пошук, оскільки він охоплює багато користувачів, лише перший з яких зможе ввійти.", + "An unspecified error occurred. Please check log and settings." : "Сталася невизначена помилка. Перевірте журнал і налаштування.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Фільтр пошуку недійсний, ймовірно, через синтаксичні проблеми, наприклад нерівну кількість відкритих і закритих дужок. Будь ласка, перегляньте.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Сталася помилка підключення до LDAP/AD. Перевірте хост, порт і облікові дані.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заповнювач \"%uid\" відсутній. Його буде замінено ім’ям для входу під час запиту LDAP/AD.", + "Please provide a login name to test against" : "Будь ласка, введіть ім’я для входу для перевірки", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Поле групи було вимкнено, оскільки сервер LDAP/AD не підтримує memberOf.", + "Password change rejected. Hint: %s" : "Зміну пароля відхилено. Підказка: %s", + "Mandatory field \"%s\" left empty" : "Обов'язкове поле \"%s\" залишено порожнім", + "A password is given, but not an LDAP agent" : "Надається пароль, але не агент LDAP", + "No password is given for the user agent" : "Для користувача-агента пароль не задається", + "No LDAP base DN was given" : "Базовий DN LDAP не вказано", + "User base DN is not a subnode of global base DN" : "Базовий DN користувача не є підвузлом глобального базового DN", + "Group base DN is not a subnode of global base DN" : "Груповий базовий DN не є підвузлом глобального базового DN", + "Login filter does not contain %s placeholder." : "Фільтр логінів не містить заповнювача %s.", + "Please login with the new password" : "Будь ласка, увійдіть з новим паролем", "LDAP User backend" : "Інтерфейс керування користувачами LDAP", "Your password will expire tomorrow." : "Дія вашого пароля завершується завтра.", "Your password will expire today." : "Дія вашого пароля завершується сьогодні.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Дія вашого пароля завершується через %n день.","Дія вашого пароля завершується через %n дні.","Дія вашого пароля завершується через %n днів.","Дія вашого пароля завершується через %n днів."], - "_%s group found_::_%s groups found_" : [" %s група знайдена "," %s груп знайдено ","%s груп знайдено ","%s груп знайдено "], - "_%s user found_::_%s users found_" : ["%s користувача знайдено","%s користувачів знайдено","%s користувачів знайдено","%s користувачів знайдено"], + "LDAP/AD integration" : "Інтеграція LDAP/AD", + "LDAP Connection" : "Підключення LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Зв'язування не вдалося для цієї конфігурації LDAP: %s","Зв'язування не вдалося для %n конфігурацій LDAP: %s","Зв'язування не вдалося для %n конфігурацій LDAP: %s","Зв'язування не вдалося для %n конфігурацій LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Не вдалося виконати пошук для цієї конфігурації LDAP: %s","Не вдалося виконати пошук для %n конфігурацій LDAP: %s","Не вдалося виконати пошук для %n конфігурацій LDAP: %s","Не вдалося виконати пошук для %n конфігурацій LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Існує неактивна конфігурація LDAP: %s","Існує %n неактивних конфігурацій LDAP: %s","Існує %n неактивних конфігурацій LDAP: %s","Існує %n неактивних конфігурацій LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Прив'язка та пошук працює на налаштованому LDAP-з'єднанні (%s)","Прив'язка та пошук працює на всіх %n налаштованих LDAP-з'єднаннях (%s)","Прив'язка та пошук працює на всіх %n налаштованих LDAP-з'єднаннях (%s)","Прив'язка та пошук працює на всіх %n налаштованих LDAP-з'єднаннях (%s)"], + "Invalid LDAP UUIDs" : "Недійсні LDAP UUID", + "None found" : "Нічого не знайдено", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Знайдено недійсні ідентифікатори UUID користувачів або груп LDAP. Перевірте налаштування \"Пропускати визначення UUID\" у розділі \"Для експертів\" налаштувань LDAP або виконайте команду \"occ ldap:update-uuid\" для їхнього оновлення.", + "_%n group found_::_%n groups found_" : ["знайдена група %n","знайдено груп %n","знайдено груп %n","знайдено груп %n "], + "> 1000 groups found" : "> 1000 груп знайдено", + "> 1000 users found" : "> 1000 користувачів знайдено", + "_%n user found_::_%n users found_" : ["знайдено користувач %n","знайдено користувачів %n","знайдено користувачів %n","знайдено користувачів %n"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не вдалося виявити атрибут відображуваного імені користувача. Будь ласка, вкажіть це самостійно в розширених налаштуваннях LDAP.", "Could not find the desired feature" : "Не вдалося знайти потрібну функцію", "Invalid Host" : "Невірний Host", "LDAP user and group backend" : "Інтерфейс керування користувачами та групами LDAP", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Цей застосунок дозволяє адміністраторам підключати Nextcloud до каталогу користувачів LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Цей застосунок дозволяє адміністраторам підключати Nextcloud до каталогу користувачів на основі LDAP для авторизації та ініціалізації користувачів, груп і атрибутів користувачів. Адміністратори можуть налаштувати цей застосунок для підключення до одного або кількох каталогів LDAP або Active Directory через інтерфейс LDAP. Такі атрибути, як квота користувача, електронна пошта, зображення аватара, членство в групах тощо, можна отримати в Nextcloud із каталогу з відповідними запитами та фільтрами. \n\nКористувач входить у Nextcloud за допомогою своїх облікових даних LDAP або AD і отримує доступ на основі запиту авторизації, який обробляється сервером LDAP або AD. Nextcloud не зберігає паролі LDAP або AD, натомість ці облікові дані використовуються для авторизації користувача, а потім Nextcloud використовує сеанс для ідентифікатора користувача. Більше інформації доступно в документації користувача та групи LDAP Backend.", "Test Configuration" : "Тестове налаштування", "Help" : "Допомога", "Groups meeting these criteria are available in %s:" : "Групи, що відповідають цим критеріям доступні в %s:", + "Only these object classes:" : "Тільки ці класи об'єктів:", "Only from these groups:" : "Лише з цих груп:", "Search groups" : "Пошук груп", "Available groups" : "Доступні групи", "Selected groups" : "Обрані групи", + "Edit LDAP Query" : "Редагувати запит LDAP", "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 сервера.", "Verify settings and count the groups" : "Перевірити налаштування та порахувати групи", - "LDAP / AD Username:" : "ім'я користувача LDAP/AD:", - "LDAP / AD Email Address:" : "LDAP / AD Email адреса:", + "When logging in, %s will find the user based on the following attributes:" : "Під час входу в систему %s знайде користувача за такими атрибутами:", + "LDAP/AD Username:" : "Ім'я користувача LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Дозволяє ввійти за допомогою імені користувача LDAP/AD, яке є \"uid\" або \"sAMAccountName\" і буде виявлено.", + "LDAP/AD Email Address:" : "Адреса електронної пошти LDAP/AD:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Дозволяє входити за допомогою атрибута електронної пошти. дозволено \"mail\" і \"mailPrimaryAddress\".", "Other Attributes:" : "Інші Атрибути:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Визначає фільтр, який застосовуватиметься під час спроби входу. \"%%uid\" замінює ім'я користувача в дії входу. Приклад: \"uid=%%uid\"", "Test Loginname" : "Тестове ім'я при вході", + "Attempts to receive a DN for the given loginname and the current login filter" : "Спроби отримати DN для заданого логіну та поточного фільтру для входу", "Verify settings" : "Перевірити налаштування", "%s. Server:" : "%s. Сервер:", "Add a new configuration" : "Додати нову конфігурацію", + "Copy current configuration into new directory binding" : "Скопіюйте поточну конфігурацію в новий каталог", + "Delete the current configuration" : "Вилучити поточну конфігурацію", "Host" : "Хост", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Ви можете не вказувати протокол, якщо вам не потрібен SSL. Якщо так, починайте з ldaps://", "Port" : "Порт", "Detect Port" : "Визначити Порт", "User DN" : "DN Користувача", @@ -74,7 +127,9 @@ OC.L10N.register( "Test Base DN" : "Тест основного DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Уникати автоматичні запити LDAP. Краще для великих установок, але вимагає деякого LDAP знання.", "Manually enter LDAP filters (recommended for large directories)" : "Вручну введіть фільтри LDAP (рекомендується для великих каталогів)", - "The filter specifies which LDAP users shall have access to the %s instance." : "Фільтр визначає, які користувачі LDAP повинні мати доступ до примірника %s.", + "Listing and searching for users is constrained by these criteria:" : "Перелік і пошук користувачів обмежені такими критеріями:", + "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." : "Найпоширенішими класами об’єктів для користувачів є organizationalPerson, person, user і inetOrgPerson. Якщо ви не впевнені, який клас об’єктів вибрати, зверніться до свого адміністратора каталогу.", + "The filter specifies which LDAP users shall have access to the %s instance." : "Фільтр визначає, які користувачі LDAP повинні мати доступ до сервера %s.", "Verify settings and count users" : "Перевірити налаштування та порахувати користувачів", "Saving" : "Збереження", "Back" : "Назад", @@ -89,19 +144,19 @@ OC.L10N.register( "Cancel" : "Скасувати", "Server" : "Сервер", "Users" : "Користувачі", - "Login Attributes" : "Атрибуту входу", + "Login Attributes" : "Атрибути входу", "Groups" : "Групи", "Expert" : "Експерт", "Advanced" : "Додатково", "<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> Потрібний модуль PHP LDAP не встановлено, базова програма працювати не буде. Будь ласка, зверніться до системного адміністратора, щоб встановити його.", "Connection Settings" : "Налаштування З'єднання", - "Configuration Active" : "Налаштування Активне", + "Configuration Active" : "Налаштування активне", "When unchecked, this configuration will be skipped." : "Якщо \"галочка\" знята, ця конфігурація буде пропущена.", "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." : "Підключити тільки до сервера реплік.", + "Only connect to the replica server." : "З'єднатися тільки із сервером реплік.", "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." : "Не рекомендується, використовувати його тільки для тестування!\nЯкщо з'єднання працює лише з цією опцією, імпортуйте SSL сертифікат LDAP сервера у ваший %s сервер.", "Cache Time-To-Live" : "Час актуальності Кеша", @@ -109,33 +164,76 @@ OC.L10N.register( "Directory Settings" : "Налаштування каталогу", "User Display Name Field" : "Поле, яке відображає Ім'я Користувача", "The LDAP attribute to use to generate the user's display name." : "Атрибут LDAP, який використовується для генерації імен користувачів.", + "2nd User Display Name Field" : "2-е поле відображуваного імені користувача", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Додатково. Атрибут LDAP, який потрібно додати до відображуваного імені в дужках. Результати, напр. \"Джон Доу (john.doe@example.org)\".", "Base User Tree" : "Основне Дерево Користувачів", "One User Base DN per line" : "Один Користувач Base DN на рядок", - "User Search Attributes" : "Пошукові Атрибути Користувача", + "User Search Attributes" : "Пошукові атрибутів користувача", "Optional; one attribute per line" : "Додатково; один атрибут на рядок", + "Disable users missing from LDAP" : "Вимкнути користувачів, відсутніх у LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Якщо увімкнено, імпортовані з LDAP користувачі, які виявляться відсутніми, будуть вимкнені", "Group Display Name Field" : "Поле, яке відображає Ім'я Групи", "The LDAP attribute to use to generate the groups's display name." : "Атрибут LDAP, який використовується для генерації імен груп.", "Base Group Tree" : "Основне Дерево Груп", "One Group Base DN per line" : "Одна Група Base DN на рядок", - "Group Search Attributes" : "Пошукові Атрибути Групи", - "Group-Member association" : "Асоціація Група-Член", + "Group Search Attributes" : "Пошукові атрибути групи", + "Group-Member association" : "Асоціація \"група-учасник\"", + "Dynamic Group Member URL" : "URL-адреса учасника динамічної групи", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Атрибут LDAP, який об’єктів групи містить URL-адресу пошуку LDAP, яка визначає, які об’єкти належать до групи. (Пусте налаштування вимикає функцію динамічного членства в групі.)", "Nested Groups" : "Вкладені Групи", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "При включенні, групи, які містять групи підтримуються. (Працює тільки якщо атрибут члена групи містить DNS.)", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "При включенні, групи, які містять групи підтримуються. (Працює тільки якщо атрибут учасника групи містить DN.)", "Paging chunksize" : "Розмір підкачки", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Підкачка використовується для сторінкових пошуків LDAP, які можуть повертати громіздкі результати кількісті користувачів або груп. (Установка його 0 відключає вивантаженя пошуку LDAP в таких ситуаціях.)", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Підкачка використовується для сторінкових пошуків LDAP, які можуть повертати громіздкі результати кількісті користувачів або груп. (Установка його 0 відключає пошук LDAP в таких ситуаціях.)", + "Enable LDAP password changes per user" : "Дозволити зміну паролів LDAP для кожного користувача", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Дозволити користувачам LDAP змінювати свій пароль і дозволити супер (прихованим) адміністраторам і адміністраторам груп змінювати пароль своїх користувачів LDAP. Працює тільки тоді, коли політики контролю доступу налаштовані відповідним чином на LDAP сервері. Оскільки паролі відправляються на LDAP-сервер у відкритому вигляді, необхідно використовувати транспортне шифрування і налаштувати хешування паролів на LDAP-сервері. ", + "(New password is sent as plain text to LDAP)" : "(Новий пароль надсилається як звичайний текст до LDAP)", + "Default password policy DN" : "DN політики паролів за замовчуванням", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN типової політики паролів, що використовуватиметься для обробки терміну дії пароля. Працює лише тоді, коли ввімкнено зміну пароля LDAP для кожного користувача та підтримується лише OpenLDAP. Залиште пустим, щоб вимкнути обробку терміну дії пароля.", "Special Attributes" : "Спеціальні Атрибути", "Quota Field" : "Поле Квоти", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Залиште порожнім, щоби визначити типову квоту користувача. В іншому випадку зазначте атрибут LDAP/AD.", "Quota Default" : "Квота за замовчанням", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Перевизначити квоту за замовчуванням для користувачів LDAP, які не мають квоти, встановленої в полі квоти.", "Email Field" : "Поле E-mail", - "User Home Folder Naming Rule" : "Правило іменування домашньої теки користувача", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Установіть електронну пошту користувача з його атрибута LDAP. Залиште поле порожнім для застосування типового значення.", + "User Home Folder Naming Rule" : "Правило іменування домашнього каталогу користувача", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Залиште порожнім для імені користувача (за замовчуванням). В іншому випадку вкажіть атрибут LDAP/AD.", + "\"$home\" Placeholder Field" : "Поле заповнювача \"$home\".", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home в конфігурації зовнішнього сховища буде замінено на значення вказаного атрибута", + "User Profile Attributes" : "Атрибути профілю користувача", + "Phone Field" : "Поле Телефон", + "User profile Phone will be set from the specified attribute" : "Телефон в профілі користувача буде встановлено на основі вказаного атрибута", + "Website Field" : "Поле Вебсайт", + "User profile Website will be set from the specified attribute" : "Вебсайт в профілі користувача буде встановлено на основі вказаного атрибута", + "Address Field" : "Поле Адреса", + "User profile Address will be set from the specified attribute" : "Адреса в профілі користувача буде встановлена на основі вказаного атрибута", + "Twitter Field" : "Поле Twitter", + "User profile Twitter will be set from the specified attribute" : "Twitter в профілі користувача буде встановлено на основі вказаного атрибута", + "Fediverse Field" : "Поле Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Fediverse в профілі користувача буде встановлено на основі вказаного атрибута", + "Organisation Field" : "Поле Організація", + "User profile Organisation will be set from the specified attribute" : "Організація в профілі користувача буде встановлена на основі вказаного атрибута", + "Role Field" : "Поле Роль", + "User profile Role will be set from the specified attribute" : "Роль в профілі користувача буде встановлено на основі вказаного атрибута", + "Headline Field" : "Поле Заголовок", + "User profile Headline will be set from the specified attribute" : "Заголовок в профілі користувача буде встановлено на основі вказаного атрибута", + "Biography Field" : "Поле Біографія", + "User profile Biography will be set from the specified attribute" : "Біографія в профілі користувача буде встановлена на основі вказаного атрибута", + "Birthdate Field" : "Поле Дата народження", + "User profile Date of birth will be set from the specified attribute" : "Профіль користувача Дата народження буде встановлена з вказаного атрибуту", + "Pronouns Field" : "Поле займенників", + "User profile Pronouns will be set from the specified attribute" : "Профіль користувача Займенники будуть встановлені з вказаного атрибуту", "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "За замовчуванням внутрішнє ім’я користувача буде створено з атрибута UUID. Це гарантує, що ім’я користувача є унікальним і символи не потрібно конвертувати. Внутрішнє ім’я користувача має обмеження щодо дозволених лише таких символів: [a-zA-Z0-9_.@-]. Інші символи замінюються відповідністю ASCII або просто пропускаються. При зіткненнях число буде додано/збільшено. Внутрішнє ім’я користувача використовується для внутрішньої ідентифікації користувача. Це також назва за замовчуванням для домашнього каталогу користувача. Це також частина віддалених URL-адрес, наприклад, для всіх служб DAV. За допомогою цього параметра поведінку за замовчуванням можна змінити. Зміни діятимуть лише для нещодавно зіставлених (доданих) користувачів 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 Атрибут для груп:", "Username-LDAP User Mapping" : "Картографія Імен користувачів-LDAP ", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Імена користувачів використовуються для зберігання та призначення метаданих. Для точної ідентифікації та розпізнавання користувачів кожен користувач LDAP матиме внутрішнє ім’я користувача. Для цього потрібне зіставлення імені користувача з користувачем LDAP. Створене ім’я користувача зіставляється з UUID користувача LDAP. Крім того, DN також кешується, щоб зменшити взаємодію LDAP, але він не використовується для ідентифікації. Якщо DN змінюється, зміни будуть знайдені. Внутрішнє ім'я користувача використовується всюди. Очищення зіставлення залишить залишки всюди. Очищення зіставлення не залежить від конфігурації, воно впливає на всі конфігурації LDAP! Ніколи не очищайте зіставлення у продуктовому середовищі, лише на стадії тестування чи експерименту.", "Clear Username-LDAP User Mapping" : "Очистити картографію Імен користувачів-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Очистити картографію Імен груп-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Очистити картографію Імен груп-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Неправильна конфігурація. Перевірте журнал для докладної інформації." }, "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/apps/user_ldap/l10n/uk.json b/apps/user_ldap/l10n/uk.json index a49c68a49e8..b1837d05eca 100644 --- a/apps/user_ldap/l10n/uk.json +++ b/apps/user_ldap/l10n/uk.json @@ -1,14 +1,15 @@ { "translations": { - "Failed to clear the mappings." : "Не вдалося очистити відображення.", + "Failed to clear the mappings." : "Не вдалося очистити мапування.", "Failed to delete the server configuration" : "Не вдалося вилучити конфігурацію сервера", "Invalid configuration: Anonymous binding is not allowed." : "Неправильна конфігурація. Анонімне приєднання не дозволено.", "Valid configuration, connection established!" : "Правильна конфігурація, з'єднання встановлено!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "Правильна конфігурація, але приєднання не вдалося. Будь ласка, перевірте налаштування сервера та дані авторизації.", - "Invalid configuration. Please have a look at the logs for further details." : "Неправильна конфігурація. Перевірте журнал для докладної інформації.", + "Invalid configuration: %s" : "Неправильна конфігурація: %s", "No action specified" : "Ніяких дій не вказано", "No configuration specified" : "Немає конфігурації", "No data specified" : "Немає даних", - " Could not set configuration %s" : "Не вдалося встановити конфігурацію %s", + "Invalid data specified" : "Вказано неправильні дані", + "Could not set configuration %1$s to %2$s" : "Не вдалося встановити конфігурацію %1$s на %2$s", "Action does not exist" : "Дія не існує", "Renewing …" : "Оновлення...", "Very weak password" : "Дуже слабкий пароль", @@ -25,40 +26,92 @@ "Select object classes" : "Виберіть класи об'єктів", "Please check the credentials, they seem to be wrong." : "Перевірте дані авторизації, можливо, що вони неправильні.", "Please specify the port, it could not be auto-detected." : "Будь ласка, вкажіть порт, він не може бути визначений автоматично.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Неможливо автоматично визначити базове DN, перегляньте облікові дані, хост і порт.", + "Could not detect Base DN, please enter it manually." : "Не вдалося визначити базовий DN, введіть його вручну.", "{nthServer}. Server" : "{nthServer}. Сервер", + "No object found in the given Base DN. Please revise." : "Не знайдено жодного об’єкта в даному базовому DN. Будь ласка, перегляньте.", + "More than 1,000 directory entries available." : "Доступно понад 1000 записів каталогу.", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["Запис {objectsFound} доступний у межах наданого базового DN","{objectsFound} записи доступні в межах наданого базового DN","{objectsFound} записи доступні в межах наданого базового DN","{objectsFound} записи доступні в межах наданого базового DN"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Сталась помилка. Будь ласка, перевірте базове DN, а також налаштування підключення та облікові дані.", "Do you really want to delete the current Server Configuration?" : "Дійсно вилучити поточну конфігурацію сервера ?", "Confirm Deletion" : "Підтвердіть вилучення", - "Mappings cleared successfully!" : "Відображення успішно очищенні!", + "Mappings cleared successfully!" : "Мапування успішно очищено!", "Error while clearing the mappings." : "Помилка при очищенні відображень.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Анонімне прив'язування не допускається. Укажіть DN користувача та пароль.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Помилка операцій LDAP. Анонімне прив’язування може бути заборонено.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Не вдалося зберегти. Переконайтеся, що база даних працює. Перезавантажте, перш ніж продовжити.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Перемикання режиму активує автоматичні запити LDAP. Залежно від розміру LDAP, це може зайняти деякий час. Ви все ще хочете змінити режим?", + "Mode switch" : "Перемикач режимів", "Select attributes" : "Виберіть атрибути", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Користувача не знайдено. Перевірте свої атрибути входу та ім’я користувача. Ефективний фільтр (для копіювання та вставлення для перевірки командного рядка): <br/>", "User found and settings verified." : "Користувача знайдено і налаштування перевірені.", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Розгляньте можливість звузити пошук, оскільки він охоплює багато користувачів, лише перший з яких зможе ввійти.", + "An unspecified error occurred. Please check log and settings." : "Сталася невизначена помилка. Перевірте журнал і налаштування.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Фільтр пошуку недійсний, ймовірно, через синтаксичні проблеми, наприклад нерівну кількість відкритих і закритих дужок. Будь ласка, перегляньте.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Сталася помилка підключення до LDAP/AD. Перевірте хост, порт і облікові дані.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заповнювач \"%uid\" відсутній. Його буде замінено ім’ям для входу під час запиту LDAP/AD.", + "Please provide a login name to test against" : "Будь ласка, введіть ім’я для входу для перевірки", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Поле групи було вимкнено, оскільки сервер LDAP/AD не підтримує memberOf.", + "Password change rejected. Hint: %s" : "Зміну пароля відхилено. Підказка: %s", + "Mandatory field \"%s\" left empty" : "Обов'язкове поле \"%s\" залишено порожнім", + "A password is given, but not an LDAP agent" : "Надається пароль, але не агент LDAP", + "No password is given for the user agent" : "Для користувача-агента пароль не задається", + "No LDAP base DN was given" : "Базовий DN LDAP не вказано", + "User base DN is not a subnode of global base DN" : "Базовий DN користувача не є підвузлом глобального базового DN", + "Group base DN is not a subnode of global base DN" : "Груповий базовий DN не є підвузлом глобального базового DN", + "Login filter does not contain %s placeholder." : "Фільтр логінів не містить заповнювача %s.", + "Please login with the new password" : "Будь ласка, увійдіть з новим паролем", "LDAP User backend" : "Інтерфейс керування користувачами LDAP", "Your password will expire tomorrow." : "Дія вашого пароля завершується завтра.", "Your password will expire today." : "Дія вашого пароля завершується сьогодні.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Дія вашого пароля завершується через %n день.","Дія вашого пароля завершується через %n дні.","Дія вашого пароля завершується через %n днів.","Дія вашого пароля завершується через %n днів."], - "_%s group found_::_%s groups found_" : [" %s група знайдена "," %s груп знайдено ","%s груп знайдено ","%s груп знайдено "], - "_%s user found_::_%s users found_" : ["%s користувача знайдено","%s користувачів знайдено","%s користувачів знайдено","%s користувачів знайдено"], + "LDAP/AD integration" : "Інтеграція LDAP/AD", + "LDAP Connection" : "Підключення LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Зв'язування не вдалося для цієї конфігурації LDAP: %s","Зв'язування не вдалося для %n конфігурацій LDAP: %s","Зв'язування не вдалося для %n конфігурацій LDAP: %s","Зв'язування не вдалося для %n конфігурацій LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Не вдалося виконати пошук для цієї конфігурації LDAP: %s","Не вдалося виконати пошук для %n конфігурацій LDAP: %s","Не вдалося виконати пошук для %n конфігурацій LDAP: %s","Не вдалося виконати пошук для %n конфігурацій LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Існує неактивна конфігурація LDAP: %s","Існує %n неактивних конфігурацій LDAP: %s","Існує %n неактивних конфігурацій LDAP: %s","Існує %n неактивних конфігурацій LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["Прив'язка та пошук працює на налаштованому LDAP-з'єднанні (%s)","Прив'язка та пошук працює на всіх %n налаштованих LDAP-з'єднаннях (%s)","Прив'язка та пошук працює на всіх %n налаштованих LDAP-з'єднаннях (%s)","Прив'язка та пошук працює на всіх %n налаштованих LDAP-з'єднаннях (%s)"], + "Invalid LDAP UUIDs" : "Недійсні LDAP UUID", + "None found" : "Нічого не знайдено", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Знайдено недійсні ідентифікатори UUID користувачів або груп LDAP. Перевірте налаштування \"Пропускати визначення UUID\" у розділі \"Для експертів\" налаштувань LDAP або виконайте команду \"occ ldap:update-uuid\" для їхнього оновлення.", + "_%n group found_::_%n groups found_" : ["знайдена група %n","знайдено груп %n","знайдено груп %n","знайдено груп %n "], + "> 1000 groups found" : "> 1000 груп знайдено", + "> 1000 users found" : "> 1000 користувачів знайдено", + "_%n user found_::_%n users found_" : ["знайдено користувач %n","знайдено користувачів %n","знайдено користувачів %n","знайдено користувачів %n"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не вдалося виявити атрибут відображуваного імені користувача. Будь ласка, вкажіть це самостійно в розширених налаштуваннях LDAP.", "Could not find the desired feature" : "Не вдалося знайти потрібну функцію", "Invalid Host" : "Невірний Host", "LDAP user and group backend" : "Інтерфейс керування користувачами та групами LDAP", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Цей застосунок дозволяє адміністраторам підключати Nextcloud до каталогу користувачів LDAP.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Цей застосунок дозволяє адміністраторам підключати Nextcloud до каталогу користувачів на основі LDAP для авторизації та ініціалізації користувачів, груп і атрибутів користувачів. Адміністратори можуть налаштувати цей застосунок для підключення до одного або кількох каталогів LDAP або Active Directory через інтерфейс LDAP. Такі атрибути, як квота користувача, електронна пошта, зображення аватара, членство в групах тощо, можна отримати в Nextcloud із каталогу з відповідними запитами та фільтрами. \n\nКористувач входить у Nextcloud за допомогою своїх облікових даних LDAP або AD і отримує доступ на основі запиту авторизації, який обробляється сервером LDAP або AD. Nextcloud не зберігає паролі LDAP або AD, натомість ці облікові дані використовуються для авторизації користувача, а потім Nextcloud використовує сеанс для ідентифікатора користувача. Більше інформації доступно в документації користувача та групи LDAP Backend.", "Test Configuration" : "Тестове налаштування", "Help" : "Допомога", "Groups meeting these criteria are available in %s:" : "Групи, що відповідають цим критеріям доступні в %s:", + "Only these object classes:" : "Тільки ці класи об'єктів:", "Only from these groups:" : "Лише з цих груп:", "Search groups" : "Пошук груп", "Available groups" : "Доступні групи", "Selected groups" : "Обрані групи", + "Edit LDAP Query" : "Редагувати запит LDAP", "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 сервера.", "Verify settings and count the groups" : "Перевірити налаштування та порахувати групи", - "LDAP / AD Username:" : "ім'я користувача LDAP/AD:", - "LDAP / AD Email Address:" : "LDAP / AD Email адреса:", + "When logging in, %s will find the user based on the following attributes:" : "Під час входу в систему %s знайде користувача за такими атрибутами:", + "LDAP/AD Username:" : "Ім'я користувача LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Дозволяє ввійти за допомогою імені користувача LDAP/AD, яке є \"uid\" або \"sAMAccountName\" і буде виявлено.", + "LDAP/AD Email Address:" : "Адреса електронної пошти LDAP/AD:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Дозволяє входити за допомогою атрибута електронної пошти. дозволено \"mail\" і \"mailPrimaryAddress\".", "Other Attributes:" : "Інші Атрибути:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Визначає фільтр, який застосовуватиметься під час спроби входу. \"%%uid\" замінює ім'я користувача в дії входу. Приклад: \"uid=%%uid\"", "Test Loginname" : "Тестове ім'я при вході", + "Attempts to receive a DN for the given loginname and the current login filter" : "Спроби отримати DN для заданого логіну та поточного фільтру для входу", "Verify settings" : "Перевірити налаштування", "%s. Server:" : "%s. Сервер:", "Add a new configuration" : "Додати нову конфігурацію", + "Copy current configuration into new directory binding" : "Скопіюйте поточну конфігурацію в новий каталог", + "Delete the current configuration" : "Вилучити поточну конфігурацію", "Host" : "Хост", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Ви можете не вказувати протокол, якщо вам не потрібен SSL. Якщо так, починайте з ldaps://", "Port" : "Порт", "Detect Port" : "Визначити Порт", "User DN" : "DN Користувача", @@ -72,7 +125,9 @@ "Test Base DN" : "Тест основного DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Уникати автоматичні запити LDAP. Краще для великих установок, але вимагає деякого LDAP знання.", "Manually enter LDAP filters (recommended for large directories)" : "Вручну введіть фільтри LDAP (рекомендується для великих каталогів)", - "The filter specifies which LDAP users shall have access to the %s instance." : "Фільтр визначає, які користувачі LDAP повинні мати доступ до примірника %s.", + "Listing and searching for users is constrained by these criteria:" : "Перелік і пошук користувачів обмежені такими критеріями:", + "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." : "Найпоширенішими класами об’єктів для користувачів є organizationalPerson, person, user і inetOrgPerson. Якщо ви не впевнені, який клас об’єктів вибрати, зверніться до свого адміністратора каталогу.", + "The filter specifies which LDAP users shall have access to the %s instance." : "Фільтр визначає, які користувачі LDAP повинні мати доступ до сервера %s.", "Verify settings and count users" : "Перевірити налаштування та порахувати користувачів", "Saving" : "Збереження", "Back" : "Назад", @@ -87,19 +142,19 @@ "Cancel" : "Скасувати", "Server" : "Сервер", "Users" : "Користувачі", - "Login Attributes" : "Атрибуту входу", + "Login Attributes" : "Атрибути входу", "Groups" : "Групи", "Expert" : "Експерт", "Advanced" : "Додатково", "<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> Потрібний модуль PHP LDAP не встановлено, базова програма працювати не буде. Будь ласка, зверніться до системного адміністратора, щоб встановити його.", "Connection Settings" : "Налаштування З'єднання", - "Configuration Active" : "Налаштування Активне", + "Configuration Active" : "Налаштування активне", "When unchecked, this configuration will be skipped." : "Якщо \"галочка\" знята, ця конфігурація буде пропущена.", "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." : "Підключити тільки до сервера реплік.", + "Only connect to the replica server." : "З'єднатися тільки із сервером реплік.", "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." : "Не рекомендується, використовувати його тільки для тестування!\nЯкщо з'єднання працює лише з цією опцією, імпортуйте SSL сертифікат LDAP сервера у ваший %s сервер.", "Cache Time-To-Live" : "Час актуальності Кеша", @@ -107,33 +162,76 @@ "Directory Settings" : "Налаштування каталогу", "User Display Name Field" : "Поле, яке відображає Ім'я Користувача", "The LDAP attribute to use to generate the user's display name." : "Атрибут LDAP, який використовується для генерації імен користувачів.", + "2nd User Display Name Field" : "2-е поле відображуваного імені користувача", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Додатково. Атрибут LDAP, який потрібно додати до відображуваного імені в дужках. Результати, напр. \"Джон Доу (john.doe@example.org)\".", "Base User Tree" : "Основне Дерево Користувачів", "One User Base DN per line" : "Один Користувач Base DN на рядок", - "User Search Attributes" : "Пошукові Атрибути Користувача", + "User Search Attributes" : "Пошукові атрибутів користувача", "Optional; one attribute per line" : "Додатково; один атрибут на рядок", + "Disable users missing from LDAP" : "Вимкнути користувачів, відсутніх у LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Якщо увімкнено, імпортовані з LDAP користувачі, які виявляться відсутніми, будуть вимкнені", "Group Display Name Field" : "Поле, яке відображає Ім'я Групи", "The LDAP attribute to use to generate the groups's display name." : "Атрибут LDAP, який використовується для генерації імен груп.", "Base Group Tree" : "Основне Дерево Груп", "One Group Base DN per line" : "Одна Група Base DN на рядок", - "Group Search Attributes" : "Пошукові Атрибути Групи", - "Group-Member association" : "Асоціація Група-Член", + "Group Search Attributes" : "Пошукові атрибути групи", + "Group-Member association" : "Асоціація \"група-учасник\"", + "Dynamic Group Member URL" : "URL-адреса учасника динамічної групи", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Атрибут LDAP, який об’єктів групи містить URL-адресу пошуку LDAP, яка визначає, які об’єкти належать до групи. (Пусте налаштування вимикає функцію динамічного членства в групі.)", "Nested Groups" : "Вкладені Групи", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "При включенні, групи, які містять групи підтримуються. (Працює тільки якщо атрибут члена групи містить DNS.)", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "При включенні, групи, які містять групи підтримуються. (Працює тільки якщо атрибут учасника групи містить DN.)", "Paging chunksize" : "Розмір підкачки", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Підкачка використовується для сторінкових пошуків LDAP, які можуть повертати громіздкі результати кількісті користувачів або груп. (Установка його 0 відключає вивантаженя пошуку LDAP в таких ситуаціях.)", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Підкачка використовується для сторінкових пошуків LDAP, які можуть повертати громіздкі результати кількісті користувачів або груп. (Установка його 0 відключає пошук LDAP в таких ситуаціях.)", + "Enable LDAP password changes per user" : "Дозволити зміну паролів LDAP для кожного користувача", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Дозволити користувачам LDAP змінювати свій пароль і дозволити супер (прихованим) адміністраторам і адміністраторам груп змінювати пароль своїх користувачів LDAP. Працює тільки тоді, коли політики контролю доступу налаштовані відповідним чином на LDAP сервері. Оскільки паролі відправляються на LDAP-сервер у відкритому вигляді, необхідно використовувати транспортне шифрування і налаштувати хешування паролів на LDAP-сервері. ", + "(New password is sent as plain text to LDAP)" : "(Новий пароль надсилається як звичайний текст до LDAP)", + "Default password policy DN" : "DN політики паролів за замовчуванням", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "DN типової політики паролів, що використовуватиметься для обробки терміну дії пароля. Працює лише тоді, коли ввімкнено зміну пароля LDAP для кожного користувача та підтримується лише OpenLDAP. Залиште пустим, щоб вимкнути обробку терміну дії пароля.", "Special Attributes" : "Спеціальні Атрибути", "Quota Field" : "Поле Квоти", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Залиште порожнім, щоби визначити типову квоту користувача. В іншому випадку зазначте атрибут LDAP/AD.", "Quota Default" : "Квота за замовчанням", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Перевизначити квоту за замовчуванням для користувачів LDAP, які не мають квоти, встановленої в полі квоти.", "Email Field" : "Поле E-mail", - "User Home Folder Naming Rule" : "Правило іменування домашньої теки користувача", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Установіть електронну пошту користувача з його атрибута LDAP. Залиште поле порожнім для застосування типового значення.", + "User Home Folder Naming Rule" : "Правило іменування домашнього каталогу користувача", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Залиште порожнім для імені користувача (за замовчуванням). В іншому випадку вкажіть атрибут LDAP/AD.", + "\"$home\" Placeholder Field" : "Поле заповнювача \"$home\".", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home в конфігурації зовнішнього сховища буде замінено на значення вказаного атрибута", + "User Profile Attributes" : "Атрибути профілю користувача", + "Phone Field" : "Поле Телефон", + "User profile Phone will be set from the specified attribute" : "Телефон в профілі користувача буде встановлено на основі вказаного атрибута", + "Website Field" : "Поле Вебсайт", + "User profile Website will be set from the specified attribute" : "Вебсайт в профілі користувача буде встановлено на основі вказаного атрибута", + "Address Field" : "Поле Адреса", + "User profile Address will be set from the specified attribute" : "Адреса в профілі користувача буде встановлена на основі вказаного атрибута", + "Twitter Field" : "Поле Twitter", + "User profile Twitter will be set from the specified attribute" : "Twitter в профілі користувача буде встановлено на основі вказаного атрибута", + "Fediverse Field" : "Поле Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Fediverse в профілі користувача буде встановлено на основі вказаного атрибута", + "Organisation Field" : "Поле Організація", + "User profile Organisation will be set from the specified attribute" : "Організація в профілі користувача буде встановлена на основі вказаного атрибута", + "Role Field" : "Поле Роль", + "User profile Role will be set from the specified attribute" : "Роль в профілі користувача буде встановлено на основі вказаного атрибута", + "Headline Field" : "Поле Заголовок", + "User profile Headline will be set from the specified attribute" : "Заголовок в профілі користувача буде встановлено на основі вказаного атрибута", + "Biography Field" : "Поле Біографія", + "User profile Biography will be set from the specified attribute" : "Біографія в профілі користувача буде встановлена на основі вказаного атрибута", + "Birthdate Field" : "Поле Дата народження", + "User profile Date of birth will be set from the specified attribute" : "Профіль користувача Дата народження буде встановлена з вказаного атрибуту", + "Pronouns Field" : "Поле займенників", + "User profile Pronouns will be set from the specified attribute" : "Профіль користувача Займенники будуть встановлені з вказаного атрибуту", "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "За замовчуванням внутрішнє ім’я користувача буде створено з атрибута UUID. Це гарантує, що ім’я користувача є унікальним і символи не потрібно конвертувати. Внутрішнє ім’я користувача має обмеження щодо дозволених лише таких символів: [a-zA-Z0-9_.@-]. Інші символи замінюються відповідністю ASCII або просто пропускаються. При зіткненнях число буде додано/збільшено. Внутрішнє ім’я користувача використовується для внутрішньої ідентифікації користувача. Це також назва за замовчуванням для домашнього каталогу користувача. Це також частина віддалених URL-адрес, наприклад, для всіх служб DAV. За допомогою цього параметра поведінку за замовчуванням можна змінити. Зміни діятимуть лише для нещодавно зіставлених (доданих) користувачів 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 Атрибут для груп:", "Username-LDAP User Mapping" : "Картографія Імен користувачів-LDAP ", + "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "Імена користувачів використовуються для зберігання та призначення метаданих. Для точної ідентифікації та розпізнавання користувачів кожен користувач LDAP матиме внутрішнє ім’я користувача. Для цього потрібне зіставлення імені користувача з користувачем LDAP. Створене ім’я користувача зіставляється з UUID користувача LDAP. Крім того, DN також кешується, щоб зменшити взаємодію LDAP, але він не використовується для ідентифікації. Якщо DN змінюється, зміни будуть знайдені. Внутрішнє ім'я користувача використовується всюди. Очищення зіставлення залишить залишки всюди. Очищення зіставлення не залежить від конфігурації, воно впливає на всі конфігурації LDAP! Ніколи не очищайте зіставлення у продуктовому середовищі, лише на стадії тестування чи експерименту.", "Clear Username-LDAP User Mapping" : "Очистити картографію Імен користувачів-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Очистити картографію Імен груп-LDAP" + "Clear Groupname-LDAP Group Mapping" : "Очистити картографію Імен груп-LDAP", + "Invalid configuration. Please have a look at the logs for further details." : "Неправильна конфігурація. Перевірте журнал для докладної інформації." },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ur_PK.js b/apps/user_ldap/l10n/ur_PK.js deleted file mode 100644 index 693a42b0543..00000000000 --- a/apps/user_ldap/l10n/ur_PK.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Users" : "صارفین", - "Help" : "مدد", - "Password" : "پاسورڈ", - "Advanced" : "ایڈوانسڈ" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/ur_PK.json b/apps/user_ldap/l10n/ur_PK.json deleted file mode 100644 index 26ff4cf5671..00000000000 --- a/apps/user_ldap/l10n/ur_PK.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "Users" : "صارفین", - "Help" : "مدد", - "Password" : "پاسورڈ", - "Advanced" : "ایڈوانسڈ" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/vi.js b/apps/user_ldap/l10n/vi.js deleted file mode 100644 index e20feb8abba..00000000000 --- a/apps/user_ldap/l10n/vi.js +++ /dev/null @@ -1,45 +0,0 @@ -OC.L10N.register( - "user_ldap", - { - "Failed to clear the mappings." : "Lỗi khi xóa ánh xạ.", - "Failed to delete the server configuration" : "Lỗi khi xóa cấu hình máy chủ", - "Select groups" : "Chọn nhóm", - "Invalid Host" : "Host không hợp lệ", - "Server" : "Máy chủ", - "Users" : "Người dùng", - "Groups" : "Nhóm", - "Test Configuration" : "Kiểm tra cấu hình", - "Help" : "Giúp đỡ", - "Other Attributes:" : "Thuộc tính khác", - "1. Server" : "1. Máy chủ", - "%s. Server:" : "%s. Máy chủ:", - "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://", - "Port" : "Cổng", - "User DN" : "Người dùng 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." : "Các DN của người sử dụng đã được thực hiện, ví dụ như uid =agent , dc = example, dc = com. Để truy cập nặc danh ,DN và mật khẩu trống.", - "Password" : "Mật khẩu", - "For anonymous access, leave DN and Password empty." : "Cho phép truy cập nặc danh , DN và mật khẩu trống.", - "You can specify Base DN for users and groups in the Advanced tab" : "Bạn có thể chỉ định DN cơ bản cho người dùng và các nhóm trong tab Advanced", - "Back" : "Trở lại", - "Continue" : "Tiếp tục", - "Advanced" : "Nâng cao", - "Connection Settings" : "Connection Settings", - "Backup (Replica) Port" : "Cổng sao lưu (Replica)", - "Disable Main Server" : "Tắt máy chủ chính", - "Turn off SSL certificate validation." : "Tắt xác thực chứng nhận SSL", - "in seconds. A change empties the cache." : "trong vài giây. Một sự thay đổi bộ nhớ cache.", - "Directory Settings" : "Directory Settings", - "User Display Name Field" : "Hiển thị tên người sử dụng", - "Base User Tree" : "Cây người dùng cơ bản", - "User Search Attributes" : "User Search Attributes", - "Optional; one attribute per line" : "Optional; one attribute per line", - "Group Display Name Field" : "Hiển thị tên nhóm", - "Base Group Tree" : "Cây nhóm cơ bản", - "Group Search Attributes" : "Group Search Attributes", - "Group-Member association" : "Nhóm thành viên Cộng đồng", - "Special Attributes" : "Special Attributes", - "in bytes" : "Theo Byte", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Để trống tên người dùng (mặc định). Nếu không chỉ định thuộc tính LDAP/AD" -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/vi.json b/apps/user_ldap/l10n/vi.json deleted file mode 100644 index ffbeff90189..00000000000 --- a/apps/user_ldap/l10n/vi.json +++ /dev/null @@ -1,43 +0,0 @@ -{ "translations": { - "Failed to clear the mappings." : "Lỗi khi xóa ánh xạ.", - "Failed to delete the server configuration" : "Lỗi khi xóa cấu hình máy chủ", - "Select groups" : "Chọn nhóm", - "Invalid Host" : "Host không hợp lệ", - "Server" : "Máy chủ", - "Users" : "Người dùng", - "Groups" : "Nhóm", - "Test Configuration" : "Kiểm tra cấu hình", - "Help" : "Giúp đỡ", - "Other Attributes:" : "Thuộc tính khác", - "1. Server" : "1. Máy chủ", - "%s. Server:" : "%s. Máy chủ:", - "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://", - "Port" : "Cổng", - "User DN" : "Người dùng 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." : "Các DN của người sử dụng đã được thực hiện, ví dụ như uid =agent , dc = example, dc = com. Để truy cập nặc danh ,DN và mật khẩu trống.", - "Password" : "Mật khẩu", - "For anonymous access, leave DN and Password empty." : "Cho phép truy cập nặc danh , DN và mật khẩu trống.", - "You can specify Base DN for users and groups in the Advanced tab" : "Bạn có thể chỉ định DN cơ bản cho người dùng và các nhóm trong tab Advanced", - "Back" : "Trở lại", - "Continue" : "Tiếp tục", - "Advanced" : "Nâng cao", - "Connection Settings" : "Connection Settings", - "Backup (Replica) Port" : "Cổng sao lưu (Replica)", - "Disable Main Server" : "Tắt máy chủ chính", - "Turn off SSL certificate validation." : "Tắt xác thực chứng nhận SSL", - "in seconds. A change empties the cache." : "trong vài giây. Một sự thay đổi bộ nhớ cache.", - "Directory Settings" : "Directory Settings", - "User Display Name Field" : "Hiển thị tên người sử dụng", - "Base User Tree" : "Cây người dùng cơ bản", - "User Search Attributes" : "User Search Attributes", - "Optional; one attribute per line" : "Optional; one attribute per line", - "Group Display Name Field" : "Hiển thị tên nhóm", - "Base Group Tree" : "Cây nhóm cơ bản", - "Group Search Attributes" : "Group Search Attributes", - "Group-Member association" : "Nhóm thành viên Cộng đồng", - "Special Attributes" : "Special Attributes", - "in bytes" : "Theo Byte", - "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Để trống tên người dùng (mặc định). Nếu không chỉ định thuộc tính LDAP/AD" -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js index f8f3d530289..ca609c816a0 100644 --- a/apps/user_ldap/l10n/zh_CN.js +++ b/apps/user_ldap/l10n/zh_CN.js @@ -1,18 +1,19 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "无法清除映射。", - "Failed to delete the server configuration" : "未能删除服务器配置", + "Failed to clear the mappings." : "清除映射失败。", + "Failed to delete the server configuration" : "删除服务器配置失败", "Invalid configuration: Anonymous binding is not allowed." : "配置无效:不允许匿名绑定。", - "Valid configuration, connection established!" : "配置有效,连接成功!", + "Valid configuration, connection established!" : "配置有效,连接已建立!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "配置有效但绑定失败。请检查服务器设置和认证信息。", - "Invalid configuration. Please have a look at the logs for further details." : "配置无效。更多细节请查看日志。", + "Invalid configuration: %s" : "配置无效:%s", "No action specified" : "未指定操作", "No configuration specified" : "未指定配置文件", "No data specified" : "未指定数据", - " Could not set configuration %s" : " 无法设定配置文件 %s", + "Invalid data specified" : "指定了无效的数据", + "Could not set configuration %1$s to %2$s" : "无法将配置 %1$s 设置为 %2$s", "Action does not exist" : "操作不存在", - "Renewing …" : "正在更新…", + "Renewing …" : "正在更新……", "Very weak password" : "非常弱的密码", "Weak password" : "弱密码", "So-so password" : "一般的密码", @@ -49,19 +50,36 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "如返回结果太多可考虑进一步缩小搜索范围,仅返回的第一个用户有效。", "An unspecified error occurred. Please check log and settings." : "发生未指定的错误。请检查设置和日志。", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜索的筛选条件无效,可能是由于不完全开闭括号的句法的问题,请检查。", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/AD 连接错误,请检查主机,端口和凭证。", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "该%uid占位符缺失。它将在 LDAP/AD 登录名查询时进行替换。", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP/AD 连接错误,请检查主机,端口和凭证", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"%u id\" 占位符缺失。查询LDAP/AD时,它将被替换为登录名。", "Please provide a login name to test against" : "请提供登录名以测试", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "该组框被禁用,因为 LDAP/AD 服务器不支持 memberOf。", - "Password change rejected. Hint: " : "密码更改出错。提示:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "群组框被禁用,因为 LDAP/AD 服务器不支持 memberOf", + "Password change rejected. Hint: %s" : "密码更改被拒绝。提示:%s", + "Mandatory field \"%s\" left empty" : "必填字段“%s”留空", + "A password is given, but not an LDAP agent" : "已提供密码,但未提供 LDAP 代理", + "No password is given for the user agent" : "没有为用户代理提供密码", + "No LDAP base DN was given" : "未提供 LDAP 基本 DN", + "User base DN is not a subnode of global base DN" : "用户基本 DN 不是全局基本 DN 的子节点", + "Group base DN is not a subnode of global base DN" : "群组基本 DN 不是全局基本 DN 的子节点", + "Login filter does not contain %s placeholder." : "登录筛选器不包含 %s 占位符。", "Please login with the new password" : "请使用新密码登录", "LDAP User backend" : "LDAP 用户后端", "Your password will expire tomorrow." : "您的密码将在明天过期", "Your password will expire today." : "您的明码将在今天过期", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密码会在%n天后过期"], - "LDAP / AD integration" : "LDAP/AD 整合", - "_%s group found_::_%s groups found_" : ["发现 %s 个群组"], - "_%s user found_::_%s users found_" : ["发现 %s 个用户"], + "LDAP/AD integration" : "LDAP/AD 集成", + "LDAP Connection" : "LDAP 连接", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["%n LDAP 配置绑定失败:%s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["%n LDAP 配置搜索失败:%s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["有 %n 个非活动 LDAP 配置:%s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["绑定和搜索适用于所有 %n 配置的 LDAP 连接 (%s)"], + "Invalid LDAP UUIDs" : "LDAP UUID 无效", + "None found" : "未找到", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "发现 LDAP 账号或组的 UUID 无效。请检查 LDAP 配置的专家部分中的“覆盖 UUID 检测”设置,并使用“occ ldap:update-uuid”进行更新。", + "_%n group found_::_%n groups found_" : ["已找到%n个组"], + "> 1000 groups found" : "已找到>1000个组", + "> 1000 users found" : "已找到>1000个用户", + "_%n user found_::_%n users found_" : ["已找到%n个用户"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "无法检测到用户的显示名称属性。请在高级 LDAP 设置中指定。", "Could not find the desired feature" : "无法找到所需的功能", "Invalid Host" : "无效的主机", @@ -81,13 +99,14 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "该筛选条件指定哪些 LDAP 组有权访问%s的实例。", "Verify settings and count the groups" : "验证设置和统计分组数", "When logging in, %s will find the user based on the following attributes:" : "登录时,%s将查找基于以下属性的用户:", - "LDAP / AD Username:" : "LDAP/AD 用户名:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允许使用 LDAP / AD 用户名登录,该用户名可以是 “uid” 或 “sAMAccountName” 并将被检测到。", - "LDAP / AD Email Address:" : "LDAP/AD 邮箱地址:", + "LDAP/AD Username:" : "LDAP/AD 用户名:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允许使用 LDAP / AD 用户名登录,该用户名可以是 “uid” 或 “sAMAccountName” 并将被检测到。", + "LDAP/AD Email Address:" : "LDAP/AD 邮箱地址:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允许根据电子邮件属性登录。 允许“mail”和“mailPrimaryAddress”。", "Other Attributes:" : "其他属性:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "定义登录时采用的过滤规则。登录时用 \"%%uid\" 替换用户名。例如:\"uid=%%uid\"", "Test Loginname" : "测试登录名", + "Attempts to receive a DN for the given loginname and the current login filter" : "尝试通过给定用户名和当前登录筛选器获取DN", "Verify settings" : "验证设置", "%s. Server:" : "%s。服务器:", "Add a new configuration" : "增加一个新的配置", @@ -151,6 +170,8 @@ OC.L10N.register( "One User Base DN per line" : "每行一个用户基准判别名", "User Search Attributes" : "用户搜索属性", "Optional; one attribute per line" : "可选;每行一个属性", + "Disable users missing from LDAP" : "禁用在LDAP中无法找到的用户", + "When switched on, users imported from LDAP which are then missing will be disabled" : "开启时,从LDAP中导入但后来无法找到的用户将被禁用。", "Group Display Name Field" : "组显示名称字段", "The LDAP attribute to use to generate the groups's display name." : "用来生成组的显示名称的 LDAP 属性。", "Base Group Tree" : "基础组树", @@ -179,8 +200,31 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "用户名留空(默认)。 否则请指定 LDAP / AD 属性。", "\"$home\" Placeholder Field" : "\"$home\" 占位字段", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "位于外部存储配置的 $home 将被指定属性替换", + "User Profile Attributes" : "用户个人资料属性", + "Phone Field" : "手机号码栏", + "User profile Phone will be set from the specified attribute" : "用户个人资料中的手机号码将按照指定属性设置", + "Website Field" : "网站栏", + "User profile Website will be set from the specified attribute" : "用户个人资料中的网站将按照指定属性设置", + "Address Field" : "地址栏", + "User profile Address will be set from the specified attribute" : "用户个人资料中的地址将按照指定属性设置", + "Twitter Field" : "Twitter 栏", + "User profile Twitter will be set from the specified attribute" : "用户个人资料中的Twitter将按照指定属性设置", + "Fediverse Field" : "联邦宇宙字段", + "User profile Fediverse will be set from the specified attribute" : "用户个人资料的联邦宇宙将从指定的属性设定", + "Organisation Field" : "组织栏", + "User profile Organisation will be set from the specified attribute" : "用户个人资料中的组织将按照指定属性设置", + "Role Field" : "职称栏", + "User profile Role will be set from the specified attribute" : "用户个人资料中的职称将按照指定属性设置", + "Headline Field" : "标题栏", + "User profile Headline will be set from the specified attribute" : "用户个人资料中的标题栏将按照指定属性设置", + "Biography Field" : "自述栏", + "User profile Biography will be set from the specified attribute" : "用户个人资料中的自述将按照指定属性设置", + "Birthdate Field" : "生日栏", + "User profile Date of birth will be set from the specified attribute" : "用户个人资料的出生日期将从指定的属性中设置", + "Pronouns Field" : "代词栏", + "User profile Pronouns will be set from the specified attribute" : "用户个人资料中的代词将从指定属性设置", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "默认情况下将从 UUID 属性创建内部用户名。将确保用户名是唯一的字符,并且不需要转换。内部用户名,只允许使用这些字符:[a-zA-Z0-9 _。@ - ]。其他字符被替换为它们的 ASCII 对应或简单地被忽略。如果出现重复,将添加或增加一个数字。内部用户名用于在内部标识用户。它是用户主文件夹的默认名称。它也是远程URL的一部分,例如对于所有 *DAV 服务。使用此设置,可以覆盖默认行为。默认行为为空,则更改只会对新映射(已添加)的LDAP用户有效。", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "默认情况下,内部用户名将按照UUID属性创建。这确保用户名独一无二,且无需转换字符。内部用户名拥有限制,只允许下列字符:[a-zA-Z0-9_.@-]。其它字符将被替换成对应的ASCII码或被直接删除。如有冲突,将会添加/递增一个数字。内部用户名被用来在内部确认用户身份。其也是用户主目录文件夹的默认名称。其也是远程URL的一部分,例如所有DAV服务。在此设置下,默认行为将会被覆盖。修改仅对新映射(添加)的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 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射(或增加)的 LDAP 用户和组。", @@ -189,6 +233,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "用户名-LDAP用户映射", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "用户名用于存储和分配元数据。为了精确的区分和识别用户,每个 LDAP 用户都会有一个内部的用户名。这要求建立一个用户名到 LDAP 用户的映射。创建的用户名会被映射到 LDAP 用户的 UUID。另外为了节省 LDAP 连接开销,DN 会被缓存,但不会用于识别。如果 DN 变了,这些变化会被识别到。在 Nextcloud 各个页面会使用内部用户名。清空映射会造成系统里面有大量的残留信息。清空映射会影响所有的 LDAP 配置,而不仅仅是当前配置。不要在生产环境里面应用清空映射,请仅用于测试环境或者早期验证步骤。", "Clear Username-LDAP User Mapping" : "清除用户-LDAP用户映射", - "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射" + "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射", + "Invalid configuration. Please have a look at the logs for further details." : "配置无效。更多细节请查看日志。" }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json index 9f6ef965bbb..b4c2ba4aa26 100644 --- a/apps/user_ldap/l10n/zh_CN.json +++ b/apps/user_ldap/l10n/zh_CN.json @@ -1,16 +1,17 @@ { "translations": { - "Failed to clear the mappings." : "无法清除映射。", - "Failed to delete the server configuration" : "未能删除服务器配置", + "Failed to clear the mappings." : "清除映射失败。", + "Failed to delete the server configuration" : "删除服务器配置失败", "Invalid configuration: Anonymous binding is not allowed." : "配置无效:不允许匿名绑定。", - "Valid configuration, connection established!" : "配置有效,连接成功!", + "Valid configuration, connection established!" : "配置有效,连接已建立!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "配置有效但绑定失败。请检查服务器设置和认证信息。", - "Invalid configuration. Please have a look at the logs for further details." : "配置无效。更多细节请查看日志。", + "Invalid configuration: %s" : "配置无效:%s", "No action specified" : "未指定操作", "No configuration specified" : "未指定配置文件", "No data specified" : "未指定数据", - " Could not set configuration %s" : " 无法设定配置文件 %s", + "Invalid data specified" : "指定了无效的数据", + "Could not set configuration %1$s to %2$s" : "无法将配置 %1$s 设置为 %2$s", "Action does not exist" : "操作不存在", - "Renewing …" : "正在更新…", + "Renewing …" : "正在更新……", "Very weak password" : "非常弱的密码", "Weak password" : "弱密码", "So-so password" : "一般的密码", @@ -47,19 +48,36 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "如返回结果太多可考虑进一步缩小搜索范围,仅返回的第一个用户有效。", "An unspecified error occurred. Please check log and settings." : "发生未指定的错误。请检查设置和日志。", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜索的筛选条件无效,可能是由于不完全开闭括号的句法的问题,请检查。", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/AD 连接错误,请检查主机,端口和凭证。", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "该%uid占位符缺失。它将在 LDAP/AD 登录名查询时进行替换。", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "LDAP/AD 连接错误,请检查主机,端口和凭证", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "\"%u id\" 占位符缺失。查询LDAP/AD时,它将被替换为登录名。", "Please provide a login name to test against" : "请提供登录名以测试", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "该组框被禁用,因为 LDAP/AD 服务器不支持 memberOf。", - "Password change rejected. Hint: " : "密码更改出错。提示:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "群组框被禁用,因为 LDAP/AD 服务器不支持 memberOf", + "Password change rejected. Hint: %s" : "密码更改被拒绝。提示:%s", + "Mandatory field \"%s\" left empty" : "必填字段“%s”留空", + "A password is given, but not an LDAP agent" : "已提供密码,但未提供 LDAP 代理", + "No password is given for the user agent" : "没有为用户代理提供密码", + "No LDAP base DN was given" : "未提供 LDAP 基本 DN", + "User base DN is not a subnode of global base DN" : "用户基本 DN 不是全局基本 DN 的子节点", + "Group base DN is not a subnode of global base DN" : "群组基本 DN 不是全局基本 DN 的子节点", + "Login filter does not contain %s placeholder." : "登录筛选器不包含 %s 占位符。", "Please login with the new password" : "请使用新密码登录", "LDAP User backend" : "LDAP 用户后端", "Your password will expire tomorrow." : "您的密码将在明天过期", "Your password will expire today." : "您的明码将在今天过期", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密码会在%n天后过期"], - "LDAP / AD integration" : "LDAP/AD 整合", - "_%s group found_::_%s groups found_" : ["发现 %s 个群组"], - "_%s user found_::_%s users found_" : ["发现 %s 个用户"], + "LDAP/AD integration" : "LDAP/AD 集成", + "LDAP Connection" : "LDAP 连接", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["%n LDAP 配置绑定失败:%s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["%n LDAP 配置搜索失败:%s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["有 %n 个非活动 LDAP 配置:%s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["绑定和搜索适用于所有 %n 配置的 LDAP 连接 (%s)"], + "Invalid LDAP UUIDs" : "LDAP UUID 无效", + "None found" : "未找到", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "发现 LDAP 账号或组的 UUID 无效。请检查 LDAP 配置的专家部分中的“覆盖 UUID 检测”设置,并使用“occ ldap:update-uuid”进行更新。", + "_%n group found_::_%n groups found_" : ["已找到%n个组"], + "> 1000 groups found" : "已找到>1000个组", + "> 1000 users found" : "已找到>1000个用户", + "_%n user found_::_%n users found_" : ["已找到%n个用户"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "无法检测到用户的显示名称属性。请在高级 LDAP 设置中指定。", "Could not find the desired feature" : "无法找到所需的功能", "Invalid Host" : "无效的主机", @@ -79,13 +97,14 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "该筛选条件指定哪些 LDAP 组有权访问%s的实例。", "Verify settings and count the groups" : "验证设置和统计分组数", "When logging in, %s will find the user based on the following attributes:" : "登录时,%s将查找基于以下属性的用户:", - "LDAP / AD Username:" : "LDAP/AD 用户名:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允许使用 LDAP / AD 用户名登录,该用户名可以是 “uid” 或 “sAMAccountName” 并将被检测到。", - "LDAP / AD Email Address:" : "LDAP/AD 邮箱地址:", + "LDAP/AD Username:" : "LDAP/AD 用户名:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允许使用 LDAP / AD 用户名登录,该用户名可以是 “uid” 或 “sAMAccountName” 并将被检测到。", + "LDAP/AD Email Address:" : "LDAP/AD 邮箱地址:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允许根据电子邮件属性登录。 允许“mail”和“mailPrimaryAddress”。", "Other Attributes:" : "其他属性:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "定义登录时采用的过滤规则。登录时用 \"%%uid\" 替换用户名。例如:\"uid=%%uid\"", "Test Loginname" : "测试登录名", + "Attempts to receive a DN for the given loginname and the current login filter" : "尝试通过给定用户名和当前登录筛选器获取DN", "Verify settings" : "验证设置", "%s. Server:" : "%s。服务器:", "Add a new configuration" : "增加一个新的配置", @@ -149,6 +168,8 @@ "One User Base DN per line" : "每行一个用户基准判别名", "User Search Attributes" : "用户搜索属性", "Optional; one attribute per line" : "可选;每行一个属性", + "Disable users missing from LDAP" : "禁用在LDAP中无法找到的用户", + "When switched on, users imported from LDAP which are then missing will be disabled" : "开启时,从LDAP中导入但后来无法找到的用户将被禁用。", "Group Display Name Field" : "组显示名称字段", "The LDAP attribute to use to generate the groups's display name." : "用来生成组的显示名称的 LDAP 属性。", "Base Group Tree" : "基础组树", @@ -177,8 +198,31 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "用户名留空(默认)。 否则请指定 LDAP / AD 属性。", "\"$home\" Placeholder Field" : "\"$home\" 占位字段", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "位于外部存储配置的 $home 将被指定属性替换", + "User Profile Attributes" : "用户个人资料属性", + "Phone Field" : "手机号码栏", + "User profile Phone will be set from the specified attribute" : "用户个人资料中的手机号码将按照指定属性设置", + "Website Field" : "网站栏", + "User profile Website will be set from the specified attribute" : "用户个人资料中的网站将按照指定属性设置", + "Address Field" : "地址栏", + "User profile Address will be set from the specified attribute" : "用户个人资料中的地址将按照指定属性设置", + "Twitter Field" : "Twitter 栏", + "User profile Twitter will be set from the specified attribute" : "用户个人资料中的Twitter将按照指定属性设置", + "Fediverse Field" : "联邦宇宙字段", + "User profile Fediverse will be set from the specified attribute" : "用户个人资料的联邦宇宙将从指定的属性设定", + "Organisation Field" : "组织栏", + "User profile Organisation will be set from the specified attribute" : "用户个人资料中的组织将按照指定属性设置", + "Role Field" : "职称栏", + "User profile Role will be set from the specified attribute" : "用户个人资料中的职称将按照指定属性设置", + "Headline Field" : "标题栏", + "User profile Headline will be set from the specified attribute" : "用户个人资料中的标题栏将按照指定属性设置", + "Biography Field" : "自述栏", + "User profile Biography will be set from the specified attribute" : "用户个人资料中的自述将按照指定属性设置", + "Birthdate Field" : "生日栏", + "User profile Date of birth will be set from the specified attribute" : "用户个人资料的出生日期将从指定的属性中设置", + "Pronouns Field" : "代词栏", + "User profile Pronouns will be set from the specified attribute" : "用户个人资料中的代词将从指定属性设置", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "默认情况下将从 UUID 属性创建内部用户名。将确保用户名是唯一的字符,并且不需要转换。内部用户名,只允许使用这些字符:[a-zA-Z0-9 _。@ - ]。其他字符被替换为它们的 ASCII 对应或简单地被忽略。如果出现重复,将添加或增加一个数字。内部用户名用于在内部标识用户。它是用户主文件夹的默认名称。它也是远程URL的一部分,例如对于所有 *DAV 服务。使用此设置,可以覆盖默认行为。默认行为为空,则更改只会对新映射(已添加)的LDAP用户有效。", + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "默认情况下,内部用户名将按照UUID属性创建。这确保用户名独一无二,且无需转换字符。内部用户名拥有限制,只允许下列字符:[a-zA-Z0-9_.@-]。其它字符将被替换成对应的ASCII码或被直接删除。如有冲突,将会添加/递增一个数字。内部用户名被用来在内部确认用户身份。其也是用户主目录文件夹的默认名称。其也是远程URL的一部分,例如所有DAV服务。在此设置下,默认行为将会被覆盖。修改仅对新映射(添加)的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 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射(或增加)的 LDAP 用户和组。", @@ -187,6 +231,7 @@ "Username-LDAP User Mapping" : "用户名-LDAP用户映射", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "用户名用于存储和分配元数据。为了精确的区分和识别用户,每个 LDAP 用户都会有一个内部的用户名。这要求建立一个用户名到 LDAP 用户的映射。创建的用户名会被映射到 LDAP 用户的 UUID。另外为了节省 LDAP 连接开销,DN 会被缓存,但不会用于识别。如果 DN 变了,这些变化会被识别到。在 Nextcloud 各个页面会使用内部用户名。清空映射会造成系统里面有大量的残留信息。清空映射会影响所有的 LDAP 配置,而不仅仅是当前配置。不要在生产环境里面应用清空映射,请仅用于测试环境或者早期验证步骤。", "Clear Username-LDAP User Mapping" : "清除用户-LDAP用户映射", - "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射" + "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射", + "Invalid configuration. Please have a look at the logs for further details." : "配置无效。更多细节请查看日志。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/zh_HK.js b/apps/user_ldap/l10n/zh_HK.js index 0330104f586..0409ced3b34 100644 --- a/apps/user_ldap/l10n/zh_HK.js +++ b/apps/user_ldap/l10n/zh_HK.js @@ -5,12 +5,13 @@ OC.L10N.register( "Failed to delete the server configuration" : "刪除伺服器設定時失敗", "Invalid configuration: Anonymous binding is not allowed." : "無效的配置:不允許匿名綁定。", "Valid configuration, connection established!" : "有效的配置,連接成功!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "有效的配置,但是綁定失敗。 請檢查伺服器設定和證書。", - "Invalid configuration. Please have a look at the logs for further details." : "無效的配置。 請查看日誌以獲取更多詳細訊息。", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "有效的配置,但是綁定失敗。請檢查伺服器設定和證書。", + "Invalid configuration: %s" : "無效配置:%s", "No action specified" : "沒有指定操作", "No configuration specified" : "沒有指定配置", "No data specified" : "沒有指定資料", - " Could not set configuration %s" : "無法設定 %s 為配置值", + "Invalid data specified" : "指定的數據無效", + "Could not set configuration %1$s to %2$s" : "無法將 %1$s 配置設定為 %2$s", "Action does not exist" : "操作不存在", "Renewing …" : "更新中...", "Very weak password" : "密碼安全性極弱", @@ -29,83 +30,107 @@ OC.L10N.register( "Please specify the port, it could not be auto-detected." : "請您指定您的連接阜,無法自動偵測", "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN 無法被自動偵測,請重新設定主機,連接阜以及認證", "Could not detect Base DN, please enter it manually." : "無法偵測到Base DN,請手動輸入", - "{nthServer}. Server" : "{nthServer}. 伺服器", - "No object found in the given Base DN. Please revise." : "在Base DN中找不到物件,請重新修改", - "More than 1,000 directory entries available." : "目前有超過 1,000 個資料夾項目是可以使用的", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} 基礎DN中的可用條目"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "產生錯誤,請檢查Base DN,以及連線設定和驗證", + "{nthServer}. Server" : "{nthServer}。伺服器", + "No object found in the given Base DN. Please revise." : "在Base DN中找不到物件,請重新修改。", + "More than 1,000 directory entries available." : "有 1,000 多個目錄項目可用。", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["提供的 Base DN 中有 {objectsFound} 個項目可用"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "產生錯誤。請檢查 Base DN,以及連線設定和驗證", "Do you really want to delete the current Server Configuration?" : "您真的要刪除現在的伺服器設定嗎?", "Confirm Deletion" : "確認刪除", - "Mappings cleared successfully!" : "Mappings清除成功", - "Error while clearing the mappings." : "清除Mappings發生錯誤", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "匿名是不允許的,請提供使用者DN和密碼", - "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 錯誤,不允許匿名榜定", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "存檔失敗,請確認資料庫運作中,請重新讀取一次然後再試一次", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式會使LDAP自動抓取資訊,抓取資訊的時間依您的LDAP大小而定,可能會花一點時間,您確定要切換模式?", + "Mappings cleared successfully!" : "Mappings 清除成功!", + "Error while clearing the mappings." : "清除 mappings 時出錯。", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "匿名是不允許的,請提供用戶DN和密碼。", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 錯誤,不允許匿名榜定。", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "儲存失敗。 請確保數據庫處於運行狀態。 在繼續之前重新加載。", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式會使LDAP自動抓取資訊,抓取資訊的時間依您的LDAP大小而定,可能會花一點時間。您確定要切換模式?", "Mode switch" : "模式切換", "Select attributes" : "選擇屬性", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "找不到用戶。請檢查您的登錄屬性和用戶名。有效過濾(複製和粘貼命令行驗證):<br/>", - "User found and settings verified." : "使用者存在,設定值正確", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "找不到用戶。請檢查您的登入屬性和用戶名。有效過濾(複製和粘貼命令行驗證):<br/>", + "User found and settings verified." : "用戶存在,設定值正確。", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "如返回結果太多可考慮進一步縮小搜尋範圍,僅返回的第一個用戶可以登入。", "An unspecified error occurred. Please check log and settings." : "發生一個不明的錯誤‧請檢查日誌和設定。", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜尋過濾器無效,可能是由於語法問題引起的,例如,方括號的數量不均勻。 請修改。", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "連線到 LDAP/AD出現錯誤,請檢查主機,連接阜和驗證資訊", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "“%uid”佔位符丟失。查詢LDAP/AD時,它將替換為登入名稱。", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜尋過濾器無效,可能是由於語法問題引起的,例如,方括號的數量不均勻。請修改。", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "連線到 LDAP/AD 出現錯誤。請檢查主機,連接埠和身份驗證。", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "“%uid”佔位符丟失。查詢 LDAP/AD 時,它將替換為登入名稱。", "Please provide a login name to test against" : "請提供登入姓名以便再次測試", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "群組盒已經停用,LDAP/AD 伺服器並不支援", - "Password change rejected. Hint: " : "密碼更改被拒絕。提示:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "群組盒已經停用,LDAP/AD 伺服器並不支援", + "Password change rejected. Hint: %s" : "密碼更改被拒絕。提示:%s", + "Mandatory field \"%s\" left empty" : "必填欄位「%s」為空", + "A password is given, but not an LDAP agent" : "已提供密碼,但並未提供 LDAP 代理程式", + "No password is given for the user agent" : "未提供使用者代理程式的密碼", + "No LDAP base DN was given" : "未提供 LDAP 基礎 DN", + "User base DN is not a subnode of global base DN" : "用戶基礎 DN 不是全域基礎 DN 的子節點", + "Group base DN is not a subnode of global base DN" : "群組基礎 DN 不是全域基礎 DN 的子節點", + "Login filter does not contain %s placeholder." : "登入過濾條件不包含 %s 佔位字串。", "Please login with the new password" : "請登入並使用新的密碼", "LDAP User backend" : "LDAP 用戶後端系統", - "Your password will expire tomorrow." : "您的密碼將於明天過期", - "Your password will expire today." : "您的密碼將於今天過期", + "Your password will expire tomorrow." : "您的密碼將於明日過期", + "Your password will expire today." : "您的密碼將於今日過期", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密碼將於%n天後過期"], - "LDAP / AD integration" : "LDAP /AD 整合", - "_%s group found_::_%s groups found_" : ["找到 %s 群組"], - "_%s user found_::_%s users found_" : ["找到 %s 用戶"], + "LDAP/AD integration" : "LDAP /AD 整合", + "LDAP Connection" : "LDAP 連線", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["LDAP 配置綁紮失敗:%s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["搜尋 %n LDAP 配置失敗:%s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["有 %n 個非活動 LDAP 配置:%s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["綁定和搜尋適用於所有 %n 已設定的 LDAP 連線 (%s)"], + "Invalid LDAP UUIDs" : "無效的 LDAP UUID", + "None found" : "未找到", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAP 帳戶或群組的 UUID 無效。請查看 LDAP 配置專家部分中的“覆蓋 UUID 檢測”設置,並使用“occ ldap:update-uuid”更新它們。", + "_%n group found_::_%n groups found_" : ["找到 %n 個群組"], + "> 1000 groups found" : "找到 > 1000 個群組", + "> 1000 users found" : "找到 > 1000 位用戶", + "_%n user found_::_%n users found_" : ["找到 %n 位用戶"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "無法檢測到用戶顯示名稱屬性。請在高級LDAP設置中自行指定。", "Could not find the desired feature" : "無法找到所需的功能", - "Invalid Host" : "無效的Host", + "Invalid Host" : "無效的 Host", "LDAP user and group backend" : "LDAP 用戶和群組後端系統", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "該應用程序使管理員可以將Nextcloud連接到基於LDAP的用戶目錄。", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "本應用啟用功能使管理員可將 Nextcloud 與基於 LDAP 的用戶目錄連接,進行身份驗證以及提供用戶、群組和用戶屬性。管理員可配置此程序通過 LDAP 接口連接至一個或多個 LDAP 或 Active Directory 目錄。通過適當的查詢和篩選,可將以下屬性從目錄導入 Nextcloud:用戶磁盤配額、電子郵箱、頭像、所屬群組以及更多。 用戶可以用其LDAP或AD中的身份登錄 Nextcloud, 並根據 LDAP 或 AD 服務的身份驗證獲得訪問權限。Nextcloud 僅使用身份驗證隨後為用戶身份使用會話,但不會儲存LDAP或AD的密碼。您可從 LDAP 用戶及群組後台文檔中獲取更多信息。", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "此應用程式讓管理員可以將 Nextcloud 連線到以 LDAP 為基礎的用戶目錄來進行驗證與提供用戶、群組與用戶屬性。管理員可以設定此應用程式來連線到一個或更多個 LDAP 目錄,或是透過 LDAP 介面的 Active Directories。如用戶配額、電子郵件、虛擬化身圖片、群組成員資格等屬性可以透過有適當查詢與過濾條件的目錄從 Nextcloud 拉取。\n\n用戶以其 LDAP 或 AD 憑證登入 Nextcloud,並根據 LDAP 或 AD 伺服器處理的身份驗證請求來授予存取權限。Nextcloud 並不儲存 LDAP 或 AD 的密碼,而是使用這些憑證來對用戶進行身份驗證,然後 Nextcloud 會使用工作階段作為用戶 ID。更多資訊在 LDAP 用戶與群組後端文件中提供。", "Test Configuration" : "測試此配置", - "Help" : "說明", - "Groups meeting these criteria are available in %s:" : "滿足這些條件的群組在%s中可用:", + "Help" : "支援", + "Groups meeting these criteria are available in %s:" : "符合這些條件的群組可在 %s 找到:", "Only these object classes:" : "只有這些物件類別:", - "Only from these groups:" : "只從這些群組:", + "Only from these groups:" : "僅從這些群組:", "Search groups" : "搜尋群組", "Available groups" : "可用的群組", - "Selected groups" : "已選擇的群組", + "Selected groups" : "已選群組", "Edit LDAP Query" : "編輯LDAP Query", - "LDAP Filter:" : "LDAP 過慮器:", - "When logging in, %s will find the user based on the following attributes:" : "當登入%s時,將會根據以下屬性找到用戶 :", - "LDAP / AD Username:" : "LDAP / AD 用戶名稱:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允許使用LDAP / AD用戶名登入,該用戶名可以是“ uid”或“ sAMAccountName”。", - "LDAP / AD Email Address:" : "LDAP / AD 電郵地址:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允許使用電郵地址屬性登入。 允許使用 “mail” 和 “mailPrimaryAddress”。", - "Other Attributes:" : "其他屬性:", + "LDAP Filter:" : "LDAP 過慮器:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "過濾器指定哪些 LDAP 群組將有權存取 %s。", + "Verify settings and count the groups" : "驗證設置併點算群組數目", + "When logging in, %s will find the user based on the following attributes:" : "當登入%s時,將會根據以下屬性找到用戶 :", + "LDAP/AD Username:" : "LDAP/AD 用戶名稱:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允許使用 LDAP/AD 用戶名登入,該用戶名可以是 “uid” 或 “sAMAccountName”。", + "LDAP/AD Email Address:" : "LDAP/AD 電郵地址:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允許使用電郵地址屬性登入。允許使用 “mail” 和 “mailPrimaryAddress”。", + "Other Attributes:" : "其他屬性:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "定義嘗試登入時要應用的過濾器。“%%uid” 取代登入時輸入的用戶名。示例:“uid = %%uid”", "Test Loginname" : "測試登入姓名", + "Attempts to receive a DN for the given loginname and the current login filter" : "嘗試接收給定登錄名和目前登錄過濾器的 DN", "Verify settings" : "驗證設定", - "%s. Server:" : "%s. 伺服器:", - "Add a new configuration" : "建立一個新的配置", - "Copy current configuration into new directory binding" : "複製目前的設定檔到新目錄", - "Delete the current configuration" : "刪除目前的設定檔", + "%s. Server:" : "%s。伺服器:", + "Add a new configuration" : "添加一個新的配置", + "Copy current configuration into new directory binding" : "複製目前的配置到新目錄綁定", + "Delete the current configuration" : "刪除目前的配置", "Host" : "主機", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "除非需要 SSL,否則可以省略該協議。如果需要 SSL,請以 ldaps:// 開頭", "Port" : "連接埠", "Detect 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=agent,dc=example,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 與密碼欄位留白", "Save Credentials" : "保存憑證", "One Base DN per line" : "一行一個 Base DN", - "You can specify Base DN for users and groups in the Advanced tab" : "您可以在進階標籤頁裡面指定使用者及群組的 Base DN", + "You can specify Base DN for users and groups in the Advanced tab" : "您可以在進階標籤頁裡面指定用戶及群組的 Base DN", "Detect Base DN" : "偵測 Base DN", "Test Base DN" : "測試 Base DN", - "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP篩選器 (建議在大型的資料環境)", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "避免自動 LDAP 請求。適合較大的設置,但需要多一些 LDAP 知識。", + "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP篩選器(建議在大型的資料環境)", "Listing and searching for users is constrained by these criteria:" : "列出和搜索用戶受到以下條件的約束:", - "The filter specifies which LDAP users shall have access to the %s instance." : "篩選起指定哪些LDAP的使用者應該擁有存取%s的權限", - "Verify settings and count users" : "驗證設定並計算使用者數", + "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." : "用戶最常見的對像類是 OrganizationalPerson、person、user 和inetOrgPerson。如果不確定要選擇哪個對像類,請諮詢您的目錄管理員。", + "The filter specifies which LDAP users shall have access to the %s instance." : "篩選起指定哪些LDAP的用戶應該擁有存取%s的權限", + "Verify settings and count users" : "驗證設定並計算用戶數", "Saving" : "儲存", "Back" : "返回", "Continue" : "繼續", @@ -118,7 +143,7 @@ OC.L10N.register( "Wrong password." : "密碼錯誤", "Cancel" : "取消", "Server" : "伺服器", - "Users" : "使用者", + "Users" : "用戶", "Login Attributes" : "登入的設定", "Groups" : "群組", "Expert" : "專業模式", @@ -137,36 +162,78 @@ OC.L10N.register( "Cache Time-To-Live" : "快取的存活時間", "in seconds. A change empties the cache." : "以秒為單位。變更後會清空快取。", "Directory Settings" : "目錄設定", - "User Display Name Field" : "使用者顯示名稱欄位", - "The LDAP attribute to use to generate the user's display name." : "LDAP設定值,用於產生使用者的顯示名稱", + "User Display Name Field" : "用戶顯示名稱欄位", + "The LDAP attribute to use to generate the user's display name." : "LDAP設定值,用於產生用戶的顯示名稱", "2nd User Display Name Field" : "第二位用戶顯示名稱欄位", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "選填。要加進顯示名稱中括號的 LDAP 屬性。例如 »John Doe (john.doe@example.org)«。", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "選填。要加進顯示名稱中括號的 LDAP 屬性。例如 »John Doe(john.doe@example.org)«。", "Base User Tree" : "Base User Tree", - "One User Base DN per line" : "一行一個使用者 Base DN", - "User Search Attributes" : "User Search Attributes", + "One User Base DN per line" : "一行一個用戶 Base DN", + "User Search Attributes" : "用戶搜尋屬性", "Optional; one attribute per line" : "非必要,一行一項屬性", + "Disable users missing from LDAP" : "停用 LDAP 中找不到的的用戶", + "When switched on, users imported from LDAP which are then missing will be disabled" : "開啟後,從 LDAP 匯入但隨後找不到的的用戶將被停用", "Group Display Name Field" : "群組顯示名稱欄位", - "The LDAP attribute to use to generate the groups's display name." : "LDAP設定值,用於產生使用者群組的顯示名稱", - "Base Group Tree" : "Base Group Tree", + "The LDAP attribute to use to generate the groups's display name." : "LDAP設定值,用於產生用戶群組的顯示名稱", + "Base Group Tree" : "基本群組樹", "One Group Base DN per line" : "一行一個 Group Base DN", - "Group Search Attributes" : "Group Search Attributes", - "Group-Member association" : "Group-Member association", + "Group Search Attributes" : "群組搜尋屬性", + "Group-Member association" : "群組與成員之間的關聯", + "Dynamic Group Member URL" : "動態組成員URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "群組對像的 LDAP 屬性包含一個 LDAP 搜索URL,該URL確定哪些對象屬於該群組。(空白設置將禁用動態群組成員資格功能。)", + "Nested Groups" : "嵌套群組", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "啟用後,將支持組內組。(僅在組成員屬性包含DN時有效。)", + "Paging chunksize" : "分頁塊大小", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "分頁 LDAP 搜尋所用的 chunksize 可能會返回大量結果,例如用戶或組枚舉。(在這種情況下,將其設置為0會禁用分頁 LDAP 搜尋。)", + "Enable LDAP password changes per user" : "啟用每個用戶的LDAP密碼更改", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "允許 LDAP 用戶更改其密碼,並允許超級管理員和群組管理員更改其 LDAP 用戶的密碼。僅當在 LDAP 伺服器上相應配置了存取控制控制策略時,該選項才起作用。由於密碼以明文形式發送到 LDAP 伺服器,因此必須使用傳輸加密,並且應該在 LDAP 伺服器上配置密碼 hashing。", + "(New password is sent as plain text to LDAP)" : "(新密碼以純文本格式發送到LDAP)", "Default password policy DN" : "默認密碼策略DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "默認的DN 密碼過期處理策略。僅當啟用了單個用戶 LDAP 密碼更改且僅OpenLDAP支持此功能時,此方法才有效。留空以禁用密碼過期處理。", "Special Attributes" : "特殊屬性", "Quota Field" : "配額欄位", - "Quota Default" : "預設配額", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "將用戶的默認配額留空。否則,請指定 LDAP/AD 屬性。", + "Quota Default" : "默認配額", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "覆蓋沒有在“配額”字段中設置配額的 LDAP 用戶的默認配額。", "Email Field" : "電郵地址欄位", - "User Home Folder Naming Rule" : "使用者家目錄的命名規則", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "使用用戶的 LDAP 屬性去設置其電郵地址。留空 = 使用默認值。", + "User Home Folder Naming Rule" : "用戶家目錄的命名規則", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "用戶名留空(默認)。否則,請指定 LDAP/AD 屬性。", + "\"$home\" Placeholder Field" : "\"$home\" 佔位符字段", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "外部存儲配置中的 $home 將替換為指定屬性的值", + "User Profile Attributes" : "用戶個人資料屬性", + "Phone Field" : "電話號碼欄位", + "User profile Phone will be set from the specified attribute" : "用戶個人資料電話號碼將從指定的屬性設置", + "Website Field" : "網址欄位", + "User profile Website will be set from the specified attribute" : "用戶個人資料網址將從指定的屬性設置", + "Address Field" : "地址欄位", + "User profile Address will be set from the specified attribute" : "用戶個人資料地址將從指定的屬性設置", + "Twitter Field" : "Twitter 欄位", + "User profile Twitter will be set from the specified attribute" : "用戶個人資料 Twitter 將從指定的屬性設置", + "Fediverse Field" : "Fediverse 欄位", + "User profile Fediverse will be set from the specified attribute" : "用戶個人資料 Fediverse 將從指定的屬性設置", + "Organisation Field" : "工作機構欄位", + "User profile Organisation will be set from the specified attribute" : "用戶個人資料工作機構將從指定的屬性設置", + "Role Field" : "職銜欄位", + "User profile Role will be set from the specified attribute" : "用戶個人資料職銜將從指定的屬性設置", + "Headline Field" : "標題欄位", + "User profile Headline will be set from the specified attribute" : "用戶個人資料標題將從指定的屬性設置", + "Biography Field" : "小傳欄位", + "User profile Biography will be set from the specified attribute" : "用戶個人資料小傳將從指定的屬性設置", + "Birthdate Field" : "出生日期欄位", + "User profile Date of birth will be set from the specified attribute" : "使用者個人資料的出生日期將從指定的屬性中設定", + "Pronouns Field" : "代名詞欄位", + "User profile Pronouns will be set from the specified attribute" : "用戶個人資料代名詞將從指定的屬性設置", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "默認情況下調試UUID屬性創建內部用戶名。將確保用戶名是唯一的字符,並且不需要轉換。內部用戶名,只允許使用這些字符:[ a-zA-Z0-9_.@- ]。其他字符被替換為它們的ASCII對應或簡單地被忽略。如果出現重複,將添加或增加一個數字。內部用戶名用作在內部標識用戶。它是用戶主文件夾的替代名稱。它也是遠端URL的一部分,例如對於所有 *DAV 服務。使用此設置,可以覆蓋預設行為。將其保留為空以保留默認行為。更改僅對新映射(添加)的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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "默認情況下,內部用戶名稱將從 UUID 屬性建立。其確保了用戶名稱是唯一且不需要轉換字元。內部用戶名稱的限制是只能使用下列字元:[a-zA-Z0-9_.@-]。其他字元會使用其 ASCII 對映或被忽略。發生碰撞時,將會加入數字。內部用戶名稱用於內部識別用戶。其也是用戶家資料夾的預設名稱。也是遠端 URL 的一部分,舉例來說,會用於所有 *DAV 服務。使用此設定,預設的行為將會被覆寫。變更僅對新映射(新增)的 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." : "預設情況下,UUID 屬性會自動偵測。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." : "預設情況下,UUID 屬性會自動偵測。UUID 屬性用來準確識別 LDAP 用戶及群組。此外,如果未在上方指定,內部用戶名稱會基於 UUID 建立。您能覆蓋設定並直接指定屬性,但一定要確保指定的屬性能被用戶及群組取得且唯一。留空則執行默認行為。變更只會對新映射(加入)的 LDAP 用戶及群組生效。", + "UUID Attribute for Users:" : "用戶的UUID值:", + "UUID Attribute for Groups:" : "群組的UUID值:", "Username-LDAP User Mapping" : "用戶名-LDAP 用戶 Mapping", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "用戶名用於存儲和分配元數據。為了精確地區分和識別用戶,每個LDAP用戶都會有一個內部的用戶名。這要求建立一個用戶名到LDAP用戶的映射。創建的用戶名會被映射到 LDAP用戶的UUID。另外為了節省LDAP連接開銷,DN會被緩存,但不會使用識別。如果DN變了,這些變化會被識別到。在Nextcloud各個頁面會使用內部用戶名。清除映射會造成 系統裡面有大量的殘留信息。清除映射會影響所有的LDAP配置,同時進行雙向配置。不要在生產環境裡面應用可變映射,請僅用於測試環境或早期驗證步驟。", "Clear Username-LDAP User Mapping" : "清除 用戶名-LDAP 用戶 Mapping", - "Clear Groupname-LDAP Group Mapping" : "清除 群組名稱-LDAP 群組 Mapping" + "Clear Groupname-LDAP Group Mapping" : "清除 群組名稱-LDAP 群組 Mapping", + "Invalid configuration. Please have a look at the logs for further details." : "無效的配置。請查看日誌以獲取更多詳細訊息。" }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/zh_HK.json b/apps/user_ldap/l10n/zh_HK.json index 27c07720612..ecebd433141 100644 --- a/apps/user_ldap/l10n/zh_HK.json +++ b/apps/user_ldap/l10n/zh_HK.json @@ -3,12 +3,13 @@ "Failed to delete the server configuration" : "刪除伺服器設定時失敗", "Invalid configuration: Anonymous binding is not allowed." : "無效的配置:不允許匿名綁定。", "Valid configuration, connection established!" : "有效的配置,連接成功!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "有效的配置,但是綁定失敗。 請檢查伺服器設定和證書。", - "Invalid configuration. Please have a look at the logs for further details." : "無效的配置。 請查看日誌以獲取更多詳細訊息。", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "有效的配置,但是綁定失敗。請檢查伺服器設定和證書。", + "Invalid configuration: %s" : "無效配置:%s", "No action specified" : "沒有指定操作", "No configuration specified" : "沒有指定配置", "No data specified" : "沒有指定資料", - " Could not set configuration %s" : "無法設定 %s 為配置值", + "Invalid data specified" : "指定的數據無效", + "Could not set configuration %1$s to %2$s" : "無法將 %1$s 配置設定為 %2$s", "Action does not exist" : "操作不存在", "Renewing …" : "更新中...", "Very weak password" : "密碼安全性極弱", @@ -27,83 +28,107 @@ "Please specify the port, it could not be auto-detected." : "請您指定您的連接阜,無法自動偵測", "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN 無法被自動偵測,請重新設定主機,連接阜以及認證", "Could not detect Base DN, please enter it manually." : "無法偵測到Base DN,請手動輸入", - "{nthServer}. Server" : "{nthServer}. 伺服器", - "No object found in the given Base DN. Please revise." : "在Base DN中找不到物件,請重新修改", - "More than 1,000 directory entries available." : "目前有超過 1,000 個資料夾項目是可以使用的", - "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} 基礎DN中的可用條目"], - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "產生錯誤,請檢查Base DN,以及連線設定和驗證", + "{nthServer}. Server" : "{nthServer}。伺服器", + "No object found in the given Base DN. Please revise." : "在Base DN中找不到物件,請重新修改。", + "More than 1,000 directory entries available." : "有 1,000 多個目錄項目可用。", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["提供的 Base DN 中有 {objectsFound} 個項目可用"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "產生錯誤。請檢查 Base DN,以及連線設定和驗證", "Do you really want to delete the current Server Configuration?" : "您真的要刪除現在的伺服器設定嗎?", "Confirm Deletion" : "確認刪除", - "Mappings cleared successfully!" : "Mappings清除成功", - "Error while clearing the mappings." : "清除Mappings發生錯誤", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "匿名是不允許的,請提供使用者DN和密碼", - "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 錯誤,不允許匿名榜定", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "存檔失敗,請確認資料庫運作中,請重新讀取一次然後再試一次", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式會使LDAP自動抓取資訊,抓取資訊的時間依您的LDAP大小而定,可能會花一點時間,您確定要切換模式?", + "Mappings cleared successfully!" : "Mappings 清除成功!", + "Error while clearing the mappings." : "清除 mappings 時出錯。", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "匿名是不允許的,請提供用戶DN和密碼。", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 錯誤,不允許匿名榜定。", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "儲存失敗。 請確保數據庫處於運行狀態。 在繼續之前重新加載。", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式會使LDAP自動抓取資訊,抓取資訊的時間依您的LDAP大小而定,可能會花一點時間。您確定要切換模式?", "Mode switch" : "模式切換", "Select attributes" : "選擇屬性", - "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "找不到用戶。請檢查您的登錄屬性和用戶名。有效過濾(複製和粘貼命令行驗證):<br/>", - "User found and settings verified." : "使用者存在,設定值正確", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "找不到用戶。請檢查您的登入屬性和用戶名。有效過濾(複製和粘貼命令行驗證):<br/>", + "User found and settings verified." : "用戶存在,設定值正確。", "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "如返回結果太多可考慮進一步縮小搜尋範圍,僅返回的第一個用戶可以登入。", "An unspecified error occurred. Please check log and settings." : "發生一個不明的錯誤‧請檢查日誌和設定。", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜尋過濾器無效,可能是由於語法問題引起的,例如,方括號的數量不均勻。 請修改。", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "連線到 LDAP/AD出現錯誤,請檢查主機,連接阜和驗證資訊", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "“%uid”佔位符丟失。查詢LDAP/AD時,它將替換為登入名稱。", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜尋過濾器無效,可能是由於語法問題引起的,例如,方括號的數量不均勻。請修改。", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "連線到 LDAP/AD 出現錯誤。請檢查主機,連接埠和身份驗證。", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "“%uid”佔位符丟失。查詢 LDAP/AD 時,它將替換為登入名稱。", "Please provide a login name to test against" : "請提供登入姓名以便再次測試", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "群組盒已經停用,LDAP/AD 伺服器並不支援", - "Password change rejected. Hint: " : "密碼更改被拒絕。提示:", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "群組盒已經停用,LDAP/AD 伺服器並不支援", + "Password change rejected. Hint: %s" : "密碼更改被拒絕。提示:%s", + "Mandatory field \"%s\" left empty" : "必填欄位「%s」為空", + "A password is given, but not an LDAP agent" : "已提供密碼,但並未提供 LDAP 代理程式", + "No password is given for the user agent" : "未提供使用者代理程式的密碼", + "No LDAP base DN was given" : "未提供 LDAP 基礎 DN", + "User base DN is not a subnode of global base DN" : "用戶基礎 DN 不是全域基礎 DN 的子節點", + "Group base DN is not a subnode of global base DN" : "群組基礎 DN 不是全域基礎 DN 的子節點", + "Login filter does not contain %s placeholder." : "登入過濾條件不包含 %s 佔位字串。", "Please login with the new password" : "請登入並使用新的密碼", "LDAP User backend" : "LDAP 用戶後端系統", - "Your password will expire tomorrow." : "您的密碼將於明天過期", - "Your password will expire today." : "您的密碼將於今天過期", + "Your password will expire tomorrow." : "您的密碼將於明日過期", + "Your password will expire today." : "您的密碼將於今日過期", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密碼將於%n天後過期"], - "LDAP / AD integration" : "LDAP /AD 整合", - "_%s group found_::_%s groups found_" : ["找到 %s 群組"], - "_%s user found_::_%s users found_" : ["找到 %s 用戶"], + "LDAP/AD integration" : "LDAP /AD 整合", + "LDAP Connection" : "LDAP 連線", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["LDAP 配置綁紮失敗:%s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["搜尋 %n LDAP 配置失敗:%s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["有 %n 個非活動 LDAP 配置:%s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["綁定和搜尋適用於所有 %n 已設定的 LDAP 連線 (%s)"], + "Invalid LDAP UUIDs" : "無效的 LDAP UUID", + "None found" : "未找到", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "LDAP 帳戶或群組的 UUID 無效。請查看 LDAP 配置專家部分中的“覆蓋 UUID 檢測”設置,並使用“occ ldap:update-uuid”更新它們。", + "_%n group found_::_%n groups found_" : ["找到 %n 個群組"], + "> 1000 groups found" : "找到 > 1000 個群組", + "> 1000 users found" : "找到 > 1000 位用戶", + "_%n user found_::_%n users found_" : ["找到 %n 位用戶"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "無法檢測到用戶顯示名稱屬性。請在高級LDAP設置中自行指定。", "Could not find the desired feature" : "無法找到所需的功能", - "Invalid Host" : "無效的Host", + "Invalid Host" : "無效的 Host", "LDAP user and group backend" : "LDAP 用戶和群組後端系統", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "該應用程序使管理員可以將Nextcloud連接到基於LDAP的用戶目錄。", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "本應用啟用功能使管理員可將 Nextcloud 與基於 LDAP 的用戶目錄連接,進行身份驗證以及提供用戶、群組和用戶屬性。管理員可配置此程序通過 LDAP 接口連接至一個或多個 LDAP 或 Active Directory 目錄。通過適當的查詢和篩選,可將以下屬性從目錄導入 Nextcloud:用戶磁盤配額、電子郵箱、頭像、所屬群組以及更多。 用戶可以用其LDAP或AD中的身份登錄 Nextcloud, 並根據 LDAP 或 AD 服務的身份驗證獲得訪問權限。Nextcloud 僅使用身份驗證隨後為用戶身份使用會話,但不會儲存LDAP或AD的密碼。您可從 LDAP 用戶及群組後台文檔中獲取更多信息。", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "此應用程式讓管理員可以將 Nextcloud 連線到以 LDAP 為基礎的用戶目錄來進行驗證與提供用戶、群組與用戶屬性。管理員可以設定此應用程式來連線到一個或更多個 LDAP 目錄,或是透過 LDAP 介面的 Active Directories。如用戶配額、電子郵件、虛擬化身圖片、群組成員資格等屬性可以透過有適當查詢與過濾條件的目錄從 Nextcloud 拉取。\n\n用戶以其 LDAP 或 AD 憑證登入 Nextcloud,並根據 LDAP 或 AD 伺服器處理的身份驗證請求來授予存取權限。Nextcloud 並不儲存 LDAP 或 AD 的密碼,而是使用這些憑證來對用戶進行身份驗證,然後 Nextcloud 會使用工作階段作為用戶 ID。更多資訊在 LDAP 用戶與群組後端文件中提供。", "Test Configuration" : "測試此配置", - "Help" : "說明", - "Groups meeting these criteria are available in %s:" : "滿足這些條件的群組在%s中可用:", + "Help" : "支援", + "Groups meeting these criteria are available in %s:" : "符合這些條件的群組可在 %s 找到:", "Only these object classes:" : "只有這些物件類別:", - "Only from these groups:" : "只從這些群組:", + "Only from these groups:" : "僅從這些群組:", "Search groups" : "搜尋群組", "Available groups" : "可用的群組", - "Selected groups" : "已選擇的群組", + "Selected groups" : "已選群組", "Edit LDAP Query" : "編輯LDAP Query", - "LDAP Filter:" : "LDAP 過慮器:", - "When logging in, %s will find the user based on the following attributes:" : "當登入%s時,將會根據以下屬性找到用戶 :", - "LDAP / AD Username:" : "LDAP / AD 用戶名稱:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允許使用LDAP / AD用戶名登入,該用戶名可以是“ uid”或“ sAMAccountName”。", - "LDAP / AD Email Address:" : "LDAP / AD 電郵地址:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允許使用電郵地址屬性登入。 允許使用 “mail” 和 “mailPrimaryAddress”。", - "Other Attributes:" : "其他屬性:", + "LDAP Filter:" : "LDAP 過慮器:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "過濾器指定哪些 LDAP 群組將有權存取 %s。", + "Verify settings and count the groups" : "驗證設置併點算群組數目", + "When logging in, %s will find the user based on the following attributes:" : "當登入%s時,將會根據以下屬性找到用戶 :", + "LDAP/AD Username:" : "LDAP/AD 用戶名稱:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允許使用 LDAP/AD 用戶名登入,該用戶名可以是 “uid” 或 “sAMAccountName”。", + "LDAP/AD Email Address:" : "LDAP/AD 電郵地址:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允許使用電郵地址屬性登入。允許使用 “mail” 和 “mailPrimaryAddress”。", + "Other Attributes:" : "其他屬性:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "定義嘗試登入時要應用的過濾器。“%%uid” 取代登入時輸入的用戶名。示例:“uid = %%uid”", "Test Loginname" : "測試登入姓名", + "Attempts to receive a DN for the given loginname and the current login filter" : "嘗試接收給定登錄名和目前登錄過濾器的 DN", "Verify settings" : "驗證設定", - "%s. Server:" : "%s. 伺服器:", - "Add a new configuration" : "建立一個新的配置", - "Copy current configuration into new directory binding" : "複製目前的設定檔到新目錄", - "Delete the current configuration" : "刪除目前的設定檔", + "%s. Server:" : "%s。伺服器:", + "Add a new configuration" : "添加一個新的配置", + "Copy current configuration into new directory binding" : "複製目前的配置到新目錄綁定", + "Delete the current configuration" : "刪除目前的配置", "Host" : "主機", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "除非需要 SSL,否則可以省略該協議。如果需要 SSL,請以 ldaps:// 開頭", "Port" : "連接埠", "Detect 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=agent,dc=example,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 與密碼欄位留白", "Save Credentials" : "保存憑證", "One Base DN per line" : "一行一個 Base DN", - "You can specify Base DN for users and groups in the Advanced tab" : "您可以在進階標籤頁裡面指定使用者及群組的 Base DN", + "You can specify Base DN for users and groups in the Advanced tab" : "您可以在進階標籤頁裡面指定用戶及群組的 Base DN", "Detect Base DN" : "偵測 Base DN", "Test Base DN" : "測試 Base DN", - "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP篩選器 (建議在大型的資料環境)", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "避免自動 LDAP 請求。適合較大的設置,但需要多一些 LDAP 知識。", + "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP篩選器(建議在大型的資料環境)", "Listing and searching for users is constrained by these criteria:" : "列出和搜索用戶受到以下條件的約束:", - "The filter specifies which LDAP users shall have access to the %s instance." : "篩選起指定哪些LDAP的使用者應該擁有存取%s的權限", - "Verify settings and count users" : "驗證設定並計算使用者數", + "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." : "用戶最常見的對像類是 OrganizationalPerson、person、user 和inetOrgPerson。如果不確定要選擇哪個對像類,請諮詢您的目錄管理員。", + "The filter specifies which LDAP users shall have access to the %s instance." : "篩選起指定哪些LDAP的用戶應該擁有存取%s的權限", + "Verify settings and count users" : "驗證設定並計算用戶數", "Saving" : "儲存", "Back" : "返回", "Continue" : "繼續", @@ -116,7 +141,7 @@ "Wrong password." : "密碼錯誤", "Cancel" : "取消", "Server" : "伺服器", - "Users" : "使用者", + "Users" : "用戶", "Login Attributes" : "登入的設定", "Groups" : "群組", "Expert" : "專業模式", @@ -135,36 +160,78 @@ "Cache Time-To-Live" : "快取的存活時間", "in seconds. A change empties the cache." : "以秒為單位。變更後會清空快取。", "Directory Settings" : "目錄設定", - "User Display Name Field" : "使用者顯示名稱欄位", - "The LDAP attribute to use to generate the user's display name." : "LDAP設定值,用於產生使用者的顯示名稱", + "User Display Name Field" : "用戶顯示名稱欄位", + "The LDAP attribute to use to generate the user's display name." : "LDAP設定值,用於產生用戶的顯示名稱", "2nd User Display Name Field" : "第二位用戶顯示名稱欄位", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "選填。要加進顯示名稱中括號的 LDAP 屬性。例如 »John Doe (john.doe@example.org)«。", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "選填。要加進顯示名稱中括號的 LDAP 屬性。例如 »John Doe(john.doe@example.org)«。", "Base User Tree" : "Base User Tree", - "One User Base DN per line" : "一行一個使用者 Base DN", - "User Search Attributes" : "User Search Attributes", + "One User Base DN per line" : "一行一個用戶 Base DN", + "User Search Attributes" : "用戶搜尋屬性", "Optional; one attribute per line" : "非必要,一行一項屬性", + "Disable users missing from LDAP" : "停用 LDAP 中找不到的的用戶", + "When switched on, users imported from LDAP which are then missing will be disabled" : "開啟後,從 LDAP 匯入但隨後找不到的的用戶將被停用", "Group Display Name Field" : "群組顯示名稱欄位", - "The LDAP attribute to use to generate the groups's display name." : "LDAP設定值,用於產生使用者群組的顯示名稱", - "Base Group Tree" : "Base Group Tree", + "The LDAP attribute to use to generate the groups's display name." : "LDAP設定值,用於產生用戶群組的顯示名稱", + "Base Group Tree" : "基本群組樹", "One Group Base DN per line" : "一行一個 Group Base DN", - "Group Search Attributes" : "Group Search Attributes", - "Group-Member association" : "Group-Member association", + "Group Search Attributes" : "群組搜尋屬性", + "Group-Member association" : "群組與成員之間的關聯", + "Dynamic Group Member URL" : "動態組成員URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "群組對像的 LDAP 屬性包含一個 LDAP 搜索URL,該URL確定哪些對象屬於該群組。(空白設置將禁用動態群組成員資格功能。)", + "Nested Groups" : "嵌套群組", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "啟用後,將支持組內組。(僅在組成員屬性包含DN時有效。)", + "Paging chunksize" : "分頁塊大小", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "分頁 LDAP 搜尋所用的 chunksize 可能會返回大量結果,例如用戶或組枚舉。(在這種情況下,將其設置為0會禁用分頁 LDAP 搜尋。)", + "Enable LDAP password changes per user" : "啟用每個用戶的LDAP密碼更改", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "允許 LDAP 用戶更改其密碼,並允許超級管理員和群組管理員更改其 LDAP 用戶的密碼。僅當在 LDAP 伺服器上相應配置了存取控制控制策略時,該選項才起作用。由於密碼以明文形式發送到 LDAP 伺服器,因此必須使用傳輸加密,並且應該在 LDAP 伺服器上配置密碼 hashing。", + "(New password is sent as plain text to LDAP)" : "(新密碼以純文本格式發送到LDAP)", "Default password policy DN" : "默認密碼策略DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "默認的DN 密碼過期處理策略。僅當啟用了單個用戶 LDAP 密碼更改且僅OpenLDAP支持此功能時,此方法才有效。留空以禁用密碼過期處理。", "Special Attributes" : "特殊屬性", "Quota Field" : "配額欄位", - "Quota Default" : "預設配額", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "將用戶的默認配額留空。否則,請指定 LDAP/AD 屬性。", + "Quota Default" : "默認配額", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "覆蓋沒有在“配額”字段中設置配額的 LDAP 用戶的默認配額。", "Email Field" : "電郵地址欄位", - "User Home Folder Naming Rule" : "使用者家目錄的命名規則", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "使用用戶的 LDAP 屬性去設置其電郵地址。留空 = 使用默認值。", + "User Home Folder Naming Rule" : "用戶家目錄的命名規則", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "用戶名留空(默認)。否則,請指定 LDAP/AD 屬性。", + "\"$home\" Placeholder Field" : "\"$home\" 佔位符字段", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "外部存儲配置中的 $home 將替換為指定屬性的值", + "User Profile Attributes" : "用戶個人資料屬性", + "Phone Field" : "電話號碼欄位", + "User profile Phone will be set from the specified attribute" : "用戶個人資料電話號碼將從指定的屬性設置", + "Website Field" : "網址欄位", + "User profile Website will be set from the specified attribute" : "用戶個人資料網址將從指定的屬性設置", + "Address Field" : "地址欄位", + "User profile Address will be set from the specified attribute" : "用戶個人資料地址將從指定的屬性設置", + "Twitter Field" : "Twitter 欄位", + "User profile Twitter will be set from the specified attribute" : "用戶個人資料 Twitter 將從指定的屬性設置", + "Fediverse Field" : "Fediverse 欄位", + "User profile Fediverse will be set from the specified attribute" : "用戶個人資料 Fediverse 將從指定的屬性設置", + "Organisation Field" : "工作機構欄位", + "User profile Organisation will be set from the specified attribute" : "用戶個人資料工作機構將從指定的屬性設置", + "Role Field" : "職銜欄位", + "User profile Role will be set from the specified attribute" : "用戶個人資料職銜將從指定的屬性設置", + "Headline Field" : "標題欄位", + "User profile Headline will be set from the specified attribute" : "用戶個人資料標題將從指定的屬性設置", + "Biography Field" : "小傳欄位", + "User profile Biography will be set from the specified attribute" : "用戶個人資料小傳將從指定的屬性設置", + "Birthdate Field" : "出生日期欄位", + "User profile Date of birth will be set from the specified attribute" : "使用者個人資料的出生日期將從指定的屬性中設定", + "Pronouns Field" : "代名詞欄位", + "User profile Pronouns will be set from the specified attribute" : "用戶個人資料代名詞將從指定的屬性設置", "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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "默認情況下調試UUID屬性創建內部用戶名。將確保用戶名是唯一的字符,並且不需要轉換。內部用戶名,只允許使用這些字符:[ a-zA-Z0-9_.@- ]。其他字符被替換為它們的ASCII對應或簡單地被忽略。如果出現重複,將添加或增加一個數字。內部用戶名用作在內部標識用戶。它是用戶主文件夾的替代名稱。它也是遠端URL的一部分,例如對於所有 *DAV 服務。使用此設置,可以覆蓋預設行為。將其保留為空以保留默認行為。更改僅對新映射(添加)的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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "默認情況下,內部用戶名稱將從 UUID 屬性建立。其確保了用戶名稱是唯一且不需要轉換字元。內部用戶名稱的限制是只能使用下列字元:[a-zA-Z0-9_.@-]。其他字元會使用其 ASCII 對映或被忽略。發生碰撞時,將會加入數字。內部用戶名稱用於內部識別用戶。其也是用戶家資料夾的預設名稱。也是遠端 URL 的一部分,舉例來說,會用於所有 *DAV 服務。使用此設定,預設的行為將會被覆寫。變更僅對新映射(新增)的 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." : "預設情況下,UUID 屬性會自動偵測。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." : "預設情況下,UUID 屬性會自動偵測。UUID 屬性用來準確識別 LDAP 用戶及群組。此外,如果未在上方指定,內部用戶名稱會基於 UUID 建立。您能覆蓋設定並直接指定屬性,但一定要確保指定的屬性能被用戶及群組取得且唯一。留空則執行默認行為。變更只會對新映射(加入)的 LDAP 用戶及群組生效。", + "UUID Attribute for Users:" : "用戶的UUID值:", + "UUID Attribute for Groups:" : "群組的UUID值:", "Username-LDAP User Mapping" : "用戶名-LDAP 用戶 Mapping", "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "用戶名用於存儲和分配元數據。為了精確地區分和識別用戶,每個LDAP用戶都會有一個內部的用戶名。這要求建立一個用戶名到LDAP用戶的映射。創建的用戶名會被映射到 LDAP用戶的UUID。另外為了節省LDAP連接開銷,DN會被緩存,但不會使用識別。如果DN變了,這些變化會被識別到。在Nextcloud各個頁面會使用內部用戶名。清除映射會造成 系統裡面有大量的殘留信息。清除映射會影響所有的LDAP配置,同時進行雙向配置。不要在生產環境裡面應用可變映射,請僅用於測試環境或早期驗證步驟。", "Clear Username-LDAP User Mapping" : "清除 用戶名-LDAP 用戶 Mapping", - "Clear Groupname-LDAP Group Mapping" : "清除 群組名稱-LDAP 群組 Mapping" + "Clear Groupname-LDAP Group Mapping" : "清除 群組名稱-LDAP 群組 Mapping", + "Invalid configuration. Please have a look at the logs for further details." : "無效的配置。請查看日誌以獲取更多詳細訊息。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/zh_TW.js b/apps/user_ldap/l10n/zh_TW.js index 0401faca31c..d7fa6d00327 100644 --- a/apps/user_ldap/l10n/zh_TW.js +++ b/apps/user_ldap/l10n/zh_TW.js @@ -1,154 +1,239 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "清除映射失敗", - "Failed to delete the server configuration" : "刪除伺服器設定時失敗", - "Valid configuration, connection established!" : "有效的設定,連接成功!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "有效的設定,但是綁定失敗。 請檢查伺服器設定和證書。", - "Invalid configuration. Please have a look at the logs for further details." : "無效的設定。 請查看日誌以獲取更多詳細訊息。", - "No action specified" : "沒有指定操作", - "No configuration specified" : "沒有指定設定", - "No data specified" : "沒有指定資料", - " Could not set configuration %s" : "無法設定 %s 為設定值", - "Action does not exist" : "操作不存在", - "Renewing …" : "更新中...", + "Failed to clear the mappings." : "無法清除映射。", + "Failed to delete the server configuration" : "無法刪除伺服器組態設定", + "Invalid configuration: Anonymous binding is not allowed." : "無效的組態設定:不允許匿名綁定。", + "Valid configuration, connection established!" : "有效的組態設定,連線已建立!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "有效的組態設定,但是綁定失敗。請檢查伺服器設定與憑證。", + "Invalid configuration: %s" : "無效組態:%s", + "No action specified" : "未指定動作", + "No configuration specified" : "未指定組態設定", + "No data specified" : "未指定資料", + "Invalid data specified" : "指定了無效的資料", + "Could not set configuration %1$s to %2$s" : "無法將組態 %1$s 設定為 %2$s", + "Action does not exist" : "動作不存在", + "Renewing …" : "正在更新…", "Very weak password" : "密碼安全性極弱", "Weak password" : "密碼安全性弱", "So-so password" : "密碼安全性普通", "Good password" : "密碼安全性佳", "Strong password" : "密碼安全性極佳", "The Base DN appears to be wrong" : "Base DN 出現問題", - "Testing configuration…" : "設定測試中...", - "Configuration incorrect" : "設定不正確", - "Configuration incomplete" : "設定未完成", - "Configuration OK" : "設定完成", - "Select groups" : "選擇群組", - "Select object classes" : "選擇物件", - "Please check the credentials, they seem to be wrong." : "請檢查您的憑證,似乎出了點問題", - "Please specify the port, it could not be auto-detected." : "請您指定您的連接阜,無法自動偵測", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN 無法被自動偵測,請重新設定主機,連接阜以及認證", - "Could not detect Base DN, please enter it manually." : "無法偵測到Base DN,請手動輸入", + "Testing configuration…" : "正在測試組態設定…", + "Configuration incorrect" : "組態設定不正確", + "Configuration incomplete" : "組態設定未完成", + "Configuration OK" : "組態設定完成", + "Select groups" : "選取群組", + "Select object classes" : "選取物件類別", + "Please check the credentials, they seem to be wrong." : "請檢查您的憑證,它們似乎有錯。", + "Please specify the port, it could not be auto-detected." : "請指定連接埠,它無法自動偵測。", + "Base DN could not be auto-detected, please revise credentials, host and port." : "無法自動偵測 Base DN,請修改憑證、主機、連接埠等。", + "Could not detect Base DN, please enter it manually." : "偵測不到 Base DN,請手動輸入。", "{nthServer}. Server" : "{nthServer}. 伺服器", - "No object found in the given Base DN. Please revise." : "在Base DN中找不到物件,請重新修改", - "More than 1,000 directory entries available." : "目前有超過 1,000 個資料夾項目是可以使用的", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "產生錯誤,請檢查Base DN,以及連線設定和驗證", - "Do you really want to delete the current Server Configuration?" : "您真的要刪除現在的伺服器設定嗎?", + "No object found in the given Base DN. Please revise." : "在 Base DN 中找不到物件。請修正。", + "More than 1,000 directory entries available." : "有超過 1,000 個目錄條目可用。", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["提供的 Base DN 中有 {objectsFound} 個條目可用"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "遭遇錯誤。請檢查 Base DN、連線設定、憑證等。", + "Do you really want to delete the current Server Configuration?" : "您真的要刪除現在的伺服器組態設定嗎?", "Confirm Deletion" : "確認刪除", - "Mappings cleared successfully!" : "Mappings清除成功", - "Error while clearing the mappings." : "清除Mappings發生錯誤", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "匿名是不允許的,請提供使用者DN和密碼", - "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 錯誤,不允許匿名榜定", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "存檔失敗,請確認資料庫運作中,請重新讀取一次然後再試一次", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式會使LDAP自動抓取資訊,抓取資訊的時間依您的LDAP大小而定,可能會花一點時間,您確定要切換模式?", + "Mappings cleared successfully!" : "映射清除成功!", + "Error while clearing the mappings." : "清除映射時發生錯誤。", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "不允許匿名綁定。請提供使用者 DN 與密碼。", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 操作錯誤。可能不允許匿名綁定。", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "儲存失敗。請確保資料庫可以運作。繼續前請重新載入。", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式將會啟用自動 LDAP 查詢。取決於您的 LDAP 大小,可能需要一些時間。您仍然想要切換模式嗎?", "Mode switch" : "模式切換", - "Select attributes" : "選擇屬性", - "User found and settings verified." : "使用者存在,設定值正確", - "An unspecified error occurred. Please check log and settings." : "發生一個不明的錯誤‧請檢查日誌和設定。", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "連線到 LDAP/AD出現錯誤,請檢查主機,連接阜和驗證資訊", - "Please provide a login name to test against" : "請提供登入姓名以便再次測試", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "群組盒已經停用,LDAP/AD 伺服器並不支援", - "Please login with the new password" : "請登入並使用新的密碼", - "Your password will expire tomorrow." : "您的密碼將於明天過期", - "Your password will expire today." : "您的密碼將於今天過期", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密碼將於%n天後過期"], - "LDAP / AD integration" : "LDAP /AD 整合", - "_%s group found_::_%s groups found_" : ["找到 %s 群組"], - "_%s user found_::_%s users found_" : ["找到 %s 使用者"], - "Could not find the desired feature" : "無法找到所需的功能", - "Invalid Host" : "無效的Host", - "Test Configuration" : "測試此設定", + "Select attributes" : "選取特性", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "找不到使用者。請檢查您的登入資料與使用者名稱。有效的過濾條件(複製貼上以進行命令列驗證):<br/>", + "User found and settings verified." : "使用者存在,設定值正確。", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "請考慮縮小搜尋範圍,目前涵蓋了許多使用者,但只有第一個才能登入。", + "An unspecified error occurred. Please check log and settings." : "發生不明錯誤。請檢查紀錄檔與設定。", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜尋過濾條件無效,可能是語法問題引起,如括號不對稱等。請修正。", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "遭遇 LDAP/AD 的連線錯誤。請檢查主機、連接埠、憑證等。", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "「%uid」佔位字串遺失。查詢 LDAP/AD 時將會使用登入名稱取代。", + "Please provide a login name to test against" : "請提供登入名稱以便再次測試", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "由於 LDAP/AD 伺服器不支援 memberOf,群組盒已停用。", + "Password change rejected. Hint: %s" : "密碼變更被拒絕。提示:%s", + "Mandatory field \"%s\" left empty" : "必填欄位「%s」為空", + "A password is given, but not an LDAP agent" : "已提供密碼,但並未提供 LDAP 代理程式", + "No password is given for the user agent" : "未提供使用者代理程式的密碼", + "No LDAP base DN was given" : "未提供 LDAP 基礎 DN", + "User base DN is not a subnode of global base DN" : "使用者基礎 DN 不是全域基礎 DN 的子節點", + "Group base DN is not a subnode of global base DN" : "群組基礎 DN 不是全域基礎 DN 的子節點", + "Login filter does not contain %s placeholder." : "登入過濾條件不包含 %s 佔位字串。", + "Please login with the new password" : "請以新密碼登入", + "LDAP User backend" : "LDAP 使用者後端", + "Your password will expire tomorrow." : "您的密碼將於明天到期。", + "Your password will expire today." : "您的密碼將於今天到期。", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密碼將於 %n 天內到期。"], + "LDAP/AD integration" : "LDAP/AD 整合", + "LDAP Connection" : "LDAP 連線", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["%n LDAP 設定綁紮失敗:%s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["%n LDAP 設定搜尋失敗:%s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["有 %n 個不活躍的 LDAP 設定:%s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["綁紮與搜尋適用於全部 %n 個已設定的 LDAP 連線 (%s)"], + "Invalid LDAP UUIDs" : "無效的 LDAP UUID", + "None found" : "找不到", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "找到無效的 LDAP 帳號或群組 UUID。請審閱您在 LDAP 專家設定中的「覆寫 UUID 偵測」設定,並使用「occ ldap:update-uuid」來更新它們。", + "_%n group found_::_%n groups found_" : ["找到 %n 個群組"], + "> 1000 groups found" : "找到 > 1000 個群組", + "> 1000 users found" : "找到 > 1000 個使用者", + "_%n user found_::_%n users found_" : ["找到 %n 個使用者"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "偵測不到使用者顯示名稱特性。請在進階 LDAP 設定中自行指定。", + "Could not find the desired feature" : "找不到所需的功能", + "Invalid Host" : "無效的主機", + "LDAP user and group backend" : "LDAP 使用者與群組後端", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "此應用程式讓管理員可以將 Nextcloud 連線到以 LDAP 為基礎的使用者目錄。", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "此應用程式讓管理員可以將 Nextcloud 連線到以 LDAP 為基礎的使用者目錄,來認證與供應使用者、群組與使用者特性。管理員可以設定此應用程式連線到一個或更多個 LDAP 目錄,或是透過 LDAP 介面連線到 Active Directory。像是使用者容量限制、電子郵件、頭像圖片、群組成員資格等特性,可以透過適當查詢與過濾條件後的目錄從 Nextcloud 拉取。\n\n使用者以其 LDAP 或 AD 憑證登入 Nextcloud,並根據 LDAP 或 AD 伺服器處理的身份認證請求來授予存取權。Nextcloud 並不儲存 LDAP 或 AD 的密碼,而是使用這些憑證來對使用者進行身份認證,接著 Nextcloud 會使用工作階段作為使用者 ID。更多資訊請參閱 LDAP 使用者與群組後端文件。", + "Test Configuration" : "測試組態設定", "Help" : "說明", - "Only these object classes:" : "只有這些物件類別:", - "Only from these groups:" : "只從這些群組:", + "Groups meeting these criteria are available in %s:" : "在 %s 中符合這些條件可用群組:", + "Only these object classes:" : "僅限這些物件類別:", + "Only from these groups:" : "僅限這些群組:", "Search groups" : "搜尋群組", "Available groups" : "可用的群組", - "Selected groups" : "已選擇的群組", - "Edit LDAP Query" : "編輯LDAP Query", - "LDAP Filter:" : "LDAP 過慮器:", - "When logging in, %s will find the user based on the following attributes:" : "當登入%s時,將會根據以下屬性找到使用者 :", - "LDAP / AD Username:" : "LDAP / AD 使用者名稱:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允許使用LDAP / AD使用者登入,該使用者可以是“ uid”或“ sAMAccountName”。", - "LDAP / AD Email Address:" : "LDAP / AD 電子郵件:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允許使用電子郵件屬性登入。 允許使用“ mail”和“ mailPrimaryAddress”。", - "Other Attributes:" : "其他屬性:", - "Test Loginname" : "測試登入姓名", + "Selected groups" : "已選取的群組", + "Edit LDAP Query" : "編輯 LDAP 查詢", + "LDAP Filter:" : "LDAP 過濾條件:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "過濾條件指定哪些 LDAP 群組應該具備 %s 站台的存取權。", + "Verify settings and count the groups" : "驗證設定並計算群組", + "When logging in, %s will find the user based on the following attributes:" : "登入時,%s 將會根據以下特性尋找使用者:", + "LDAP/AD Username:" : "LDAP/AD 使用者名稱:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允許使用 LDAP/AD 使用者名稱登入,可以是「uid」或「sAMAccountName」,會自動偵測。", + "LDAP/AD Email Address:" : "LDAP/AD 電子郵件地址:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允許以電子郵件特性登入。允許使用「mail」與「mailPrimaryAddress」。", + "Other Attributes:" : "其他特性:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "定義試圖登入時所要套用的過濾條件。「%%uid」會在登入動作時取代使用者名稱。範例:「uid=%%uid」", + "Test Loginname" : "測試登入名稱", + "Attempts to receive a DN for the given loginname and the current login filter" : "嘗試接收給定登入名稱與目前登入過濾條件的 DN", "Verify settings" : "驗證設定", - "%s. Server:" : "%s. 伺服器:", - "Add a new configuration" : "建立一個新的設定", - "Copy current configuration into new directory binding" : "複製目前的設定檔到新目錄", - "Delete the current configuration" : "刪除目前的設定檔", + "%s. Server:" : "%s. 伺服器:", + "Add a new configuration" : "建立新的組態設定", + "Copy current configuration into new directory binding" : "複製目前的組態設定檔到新目錄綁定", + "Delete the current configuration" : "刪除目前的組態設定", "Host" : "主機", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "除非您需要 SSL,否則您可以忽略通訊協定。如果需要,請以 ldaps:// 開頭", "Port" : "連接埠", - "Detect Port" : "偵測連接阜", - "User DN" : "User 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與密碼欄位留白。", + "Detect 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=agent,dc=example,dc=com。若是匿名存取,則請將 DN 與密碼欄位留空。", "Password" : "密碼", - "For anonymous access, leave DN and Password empty." : "匿名連接時請將 DN 與密碼欄位留白", - "Save Credentials" : "保存憑證", + "For anonymous access, leave DN and Password empty." : "匿名存取時,請將 DN 與密碼欄位留空。", + "Save Credentials" : "儲存憑證", "One Base DN per line" : "一行一個 Base DN", - "You can specify Base DN for users and groups in the Advanced tab" : "您可以在進階標籤頁裡面指定使用者及群組的 Base DN", + "You can specify Base DN for users and groups in the Advanced tab" : "您可以在「進階」分頁中為使用者與群組指定 Base DN", "Detect Base DN" : "偵測 Base DN", "Test Base DN" : "測試 Base DN", - "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP篩選器 (建議在大型的資料環境)", - "Listing and searching for users is constrained by these criteria:" : "列出和搜索用戶受到以下條件的約束:", - "The filter specifies which LDAP users shall have access to the %s instance." : "篩選起指定哪些LDAP的使用者應該擁有存取%s的權限", - "Verify settings and count users" : "驗證設定並計算使用者數", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "避免自動 LDAP 請求。適合較大規模的安裝設置,但需要具備一些 LDAP 知識。", + "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP 過濾條件(建議用於大型目錄)", + "Listing and searching for users is constrained by these criteria:" : "列出和搜尋以下條件限定的使用者:", + "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." : "使用者最常見的物件類別是 organizationalPerson、person、user、inetOrgPerson 等。如果不確定要選取哪個物件類別,則請諮詢您的目錄管理員。", + "The filter specifies which LDAP users shall have access to the %s instance." : "過濾條件指定哪些 LDAP 使用者應具備 %s 站台的存取權。", + "Verify settings and count users" : "驗證設定並計算使用者", "Saving" : "儲存", "Back" : "返回", "Continue" : "繼續", - "Please renew your password." : "請更新您的密碼", - "An internal error occurred." : "發生內部錯誤", - "Please try again or contact your administrator." : "請重試或聯絡系統管理員", + "Please renew your password." : "請更新您的密碼。", + "An internal error occurred." : "發生內部錯誤。", + "Please try again or contact your administrator." : "請重試,或聯絡您的系統管理員。", "Current password" : "目前密碼", "New password" : "新密碼", "Renew password" : "更新密碼", - "Wrong password." : "密碼錯誤", + "Wrong password." : "密碼錯誤。", "Cancel" : "取消", "Server" : "伺服器", "Users" : "使用者", - "Login Attributes" : "登入的設定", + "Login Attributes" : "登入特性", "Groups" : "群組", - "Expert" : "專業模式", + "Expert" : "專家", "Advanced" : "進階", - "<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>沒有安裝 PHP LDAP 模組,後端系統將無法運作,請要求您的系統管理員安裝模組。", + "<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>未安裝 PHP LDAP 模組,後端系統將無法運作。請要求您的系統管理員安裝。", "Connection Settings" : "連線設定", - "Configuration Active" : "設定使用中", - "When unchecked, this configuration will be skipped." : "沒有被勾選時,此設定會被略過。", - "Backup (Replica) Host" : "備用主機", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "可以選擇性設定備用主機,必須是 LDAP/AD 中央伺服器的複本。", - "Backup (Replica) Port" : "備用(複本)連接埠", + "Configuration Active" : "組態設定作用中", + "When unchecked, this configuration will be skipped." : "沒有勾選時,此組態設定會被略過。", + "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." : "只能連線至複製伺服器。", - "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." : "不建議,請僅在測試時使用!如果連線只能在此設定下工作,請匯入LDAP伺服器的SSL認證到您的伺服器%s上", + "Only connect to the replica server." : "僅連線至複本伺服器。", + "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." : "不建議,請僅在測試時使用!如果連線只能在此選項下運作,請匯入 LDAP 伺服器的 SSL 憑證到您的 %s 伺服器上。", "Cache Time-To-Live" : "快取的存活時間", "in seconds. A change empties the cache." : "以秒為單位。變更後會清空快取。", "Directory Settings" : "目錄設定", "User Display Name Field" : "使用者顯示名稱欄位", - "The LDAP attribute to use to generate the user's display name." : "LDAP設定值,用於產生使用者的顯示名稱", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "選填。要加進顯示名稱中括號的 LDAP 屬性。例如 »John Doe (john.doe@example.org)«。", - "Base User Tree" : "Base User Tree", + "The LDAP attribute to use to generate the user's display name." : "用於生成使用者顯示名稱的 LDAP 特性。", + "2nd User Display Name Field" : "第二個使用者顯示名稱欄位", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "選填。要加進顯示名稱括號中的 LDAP 特性。例如 »John Doe (john.doe@example.org)«。", + "Base User Tree" : "基本使用者樹", "One User Base DN per line" : "一行一個使用者 Base DN", - "User Search Attributes" : "User Search Attributes", - "Optional; one attribute per line" : "非必要,一行一項屬性", + "User Search Attributes" : "使用者搜尋特性", + "Optional; one attribute per line" : "選填;一行一項特性", + "Disable users missing from LDAP" : "停用 LDAP 中沒有的使用者", + "When switched on, users imported from LDAP which are then missing will be disabled" : "開啟後,從 LDAP 匯入但隨後消失的使用者將被停用", "Group Display Name Field" : "群組顯示名稱欄位", - "The LDAP attribute to use to generate the groups's display name." : "LDAP設定值,用於產生使用者群組的顯示名稱", - "Base Group Tree" : "Base Group Tree", - "One Group Base DN per line" : "一行一個 Group Base DN", - "Group Search Attributes" : "Group Search Attributes", - "Group-Member association" : "Group-Member association", - "Default password policy DN" : "默認密碼策略DN", - "Special Attributes" : "特殊屬性", - "Quota Field" : "配額欄位", - "Quota Default" : "預設配額", - "Email Field" : "電郵欄位", + "The LDAP attribute to use to generate the groups's display name." : "用於生成群組顯示名稱的 LDAP 特性。", + "Base Group Tree" : "Base 群組樹", + "One Group Base DN per line" : "一行一個群組 Base DN", + "Group Search Attributes" : "群組搜尋特性", + "Group-Member association" : "群組與成員關聯", + "Dynamic Group Member URL" : "動態群組成員 URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "群組物件上的 LDAP 特性包含了 LDAP 搜尋 URL,該 URL 決定了哪些物件屬於該群組。(空白設定將會停用動態群組成員資格功能。)", + "Nested Groups" : "巢狀群組", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "啟用後,將會支援包含群組的群組。(僅在群組成員特性包含 DN 時可正常運作。)", + "Paging chunksize" : "分頁區塊大小", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "分頁式 LDAP 搜尋所使用的區塊大小,可能會回傳大量結果,例如使用者或群組列舉。(在這種情況下,設定為 0 會停用分頁式 LDAP 搜尋。)", + "Enable LDAP password changes per user" : "啟用每個使用者的 LDAP 密碼變更", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "允許 LDAP 使用者變更他們的密碼,並允許超級管理員與群組管理員變更其 LDAP 使用者的密碼。僅當在 LDAP 伺服器上設定了對應的存取控制策略時,此選項才會生效。由於密碼會以明文形式傳送給 LDAP 伺服器,因此必須使用傳輸加密,且必須在 LDAP 伺服器上設定密碼雜湊處理。", + "(New password is sent as plain text to LDAP)" : "(新密碼會以明文傳送給 LDAP)", + "Default password policy DN" : "預設密碼策略 DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "預設密碼策略的 DN,用於密碼過期處理。僅當啟用了每個使用者的 LDAP 密碼變更時才能正常運作,僅 OpenLDAP 有支援。保留空白將停用密碼過期處理。", + "Special Attributes" : "特殊特性", + "Quota Field" : "容量限制欄位", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "留空將以使用者的預設容量限制為準。否則,請指定 LDAP/AD 特性。", + "Quota Default" : "容量限制預設", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "凌駕在容量限制欄位中沒有設定配額容量的 LDAP 使用者的預設配額。", + "Email Field" : "電子郵件欄位", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "根據 LDAP 特性設定使用者的電子郵件。留空將採預設行為。", "User Home Folder Naming Rule" : "使用者家目錄的命名規則", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "留空將採用使用者名稱(預設值)。否則,請指定 LDAP/AD 特性。", + "\"$home\" Placeholder Field" : "「$home」佔位字串欄位", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "外部儲存空間組態設定中的 $home 將會以指定特性的值取代", + "User Profile Attributes" : "使用者個人檔案特性", + "Phone Field" : "電話號碼欄位", + "User profile Phone will be set from the specified attribute" : "使用者個人檔案電話號碼將根據指定的特性設定", + "Website Field" : "網站欄位", + "User profile Website will be set from the specified attribute" : "使用者個人檔案網站將根據指定的特性設定", + "Address Field" : "地址欄位", + "User profile Address will be set from the specified attribute" : "使用者個人檔案地址將根據指定的特性設定", + "Twitter Field" : "Twitter 欄位", + "User profile Twitter will be set from the specified attribute" : "使用者個人檔案 Twitter 將根據指定的特性設定", + "Fediverse Field" : "聯邦宇宙欄位", + "User profile Fediverse will be set from the specified attribute" : "使用者個人檔案聯邦宇宙將根據指定的特性設定", + "Organisation Field" : "組織單位欄位", + "User profile Organisation will be set from the specified attribute" : "使用者個人檔案組織單位將根據指定的特性設定", + "Role Field" : "職位欄位", + "User profile Role will be set from the specified attribute" : "使用者個人檔案職位將根據指定的特性設定", + "Headline Field" : "重要經歷欄位", + "User profile Headline will be set from the specified attribute" : "使用者個人檔案重要經歷將根據指定的特性設定", + "Biography Field" : "自傳欄位", + "User profile Biography will be set from the specified attribute" : "使用者個人檔案自傳將根據指定的特性設定", + "Birthdate Field" : "出生日期欄位", + "User profile Date of birth will be set from the specified attribute" : "使用者個人資料的出生日期將從指定的屬性中設定", + "Pronouns Field" : "代名詞欄位", + "User profile Pronouns will be set from the specified attribute" : "使用者個人資料代名詞將從指定的屬性設定", "Internal Username" : "內部使用者名稱", - "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." : "預設情況下,UUID 屬性會自動偵測。UUID 屬性用來準確識別 LDAP 使用者及群組。此外,如果未在上方指定,內部使用者名稱會基於 UUID 建立。您能覆蓋設定並直接指定屬性,但一定要確保指定的屬性能被使用者及群組取得且唯一。留空則執行預設行為。變更只會對新映射 (加入) 的 LDAP 使用者及群組生效。", - "UUID Attribute for Users:" : "使用者的UUID值:", - "UUID Attribute for Groups:" : "群組的UUID值:", - "Clear Groupname-LDAP Group Mapping" : "清除 群組名稱-LDAP 群組映射" + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "預設情況下,內部使用者名稱將根據 UUID 特性建立。這能確保使用者名稱是唯一,且不需要轉換字元。內部使用者名稱的限制是,只能使用下列字元:[a-zA-Z0-9_.@-]。其他字元會使用其 ASCII 對映取代,或是直接忽略。發生名稱碰撞時,將會加入或加大數字。內部使用者名稱用於內部識別使用者。這也是使用者家資料夾的預設名稱。也是遠端 URL 的一部分,例如,會用在所有 DAV 服務上。啟用此設定後,預設的行為會被凌駕。變更僅對新映射(新增)的 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." : "預設情況下,UUID 特性會自動偵測。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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "使用者名稱用於儲存並指派中介資料。為了精確識別並認知使用者,每個 LDAP 使用者都會有其內部使用者名稱。這需要從使用者名稱作映射到 LDAP 使用者。建立的使用者名稱會映射到 LDAP 使用者的 UUID。另外,DN 會被快取以減少 LDAP 互動,但快取不用於識別身份。若 DN 變更時,系統會發現變動。內部使用者名稱在系統中全面使用,所以一旦清除映射,會讓到處都是未連結的殘留項目。清除映射的行為並不會區分組態設定,而是會影響所有 LDAP 組態設定!請永遠不要在正式環境中清除映射,僅在測試或實驗階段使用。", + "Clear Username-LDAP User Mapping" : "清除使用者名稱-LDAP 使用者映射", + "Clear Groupname-LDAP Group Mapping" : "清除群組名稱-LDAP 群組映射", + "Invalid configuration. Please have a look at the logs for further details." : "無效的組態設定。請檢查紀錄檔以取得更多詳細資訊。" }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/zh_TW.json b/apps/user_ldap/l10n/zh_TW.json index 3cd6f105a6d..d78cd7f2642 100644 --- a/apps/user_ldap/l10n/zh_TW.json +++ b/apps/user_ldap/l10n/zh_TW.json @@ -1,152 +1,237 @@ { "translations": { - "Failed to clear the mappings." : "清除映射失敗", - "Failed to delete the server configuration" : "刪除伺服器設定時失敗", - "Valid configuration, connection established!" : "有效的設定,連接成功!", - "Valid configuration, but binding failed. Please check the server settings and credentials." : "有效的設定,但是綁定失敗。 請檢查伺服器設定和證書。", - "Invalid configuration. Please have a look at the logs for further details." : "無效的設定。 請查看日誌以獲取更多詳細訊息。", - "No action specified" : "沒有指定操作", - "No configuration specified" : "沒有指定設定", - "No data specified" : "沒有指定資料", - " Could not set configuration %s" : "無法設定 %s 為設定值", - "Action does not exist" : "操作不存在", - "Renewing …" : "更新中...", + "Failed to clear the mappings." : "無法清除映射。", + "Failed to delete the server configuration" : "無法刪除伺服器組態設定", + "Invalid configuration: Anonymous binding is not allowed." : "無效的組態設定:不允許匿名綁定。", + "Valid configuration, connection established!" : "有效的組態設定,連線已建立!", + "Valid configuration, but binding failed. Please check the server settings and credentials." : "有效的組態設定,但是綁定失敗。請檢查伺服器設定與憑證。", + "Invalid configuration: %s" : "無效組態:%s", + "No action specified" : "未指定動作", + "No configuration specified" : "未指定組態設定", + "No data specified" : "未指定資料", + "Invalid data specified" : "指定了無效的資料", + "Could not set configuration %1$s to %2$s" : "無法將組態 %1$s 設定為 %2$s", + "Action does not exist" : "動作不存在", + "Renewing …" : "正在更新…", "Very weak password" : "密碼安全性極弱", "Weak password" : "密碼安全性弱", "So-so password" : "密碼安全性普通", "Good password" : "密碼安全性佳", "Strong password" : "密碼安全性極佳", "The Base DN appears to be wrong" : "Base DN 出現問題", - "Testing configuration…" : "設定測試中...", - "Configuration incorrect" : "設定不正確", - "Configuration incomplete" : "設定未完成", - "Configuration OK" : "設定完成", - "Select groups" : "選擇群組", - "Select object classes" : "選擇物件", - "Please check the credentials, they seem to be wrong." : "請檢查您的憑證,似乎出了點問題", - "Please specify the port, it could not be auto-detected." : "請您指定您的連接阜,無法自動偵測", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN 無法被自動偵測,請重新設定主機,連接阜以及認證", - "Could not detect Base DN, please enter it manually." : "無法偵測到Base DN,請手動輸入", + "Testing configuration…" : "正在測試組態設定…", + "Configuration incorrect" : "組態設定不正確", + "Configuration incomplete" : "組態設定未完成", + "Configuration OK" : "組態設定完成", + "Select groups" : "選取群組", + "Select object classes" : "選取物件類別", + "Please check the credentials, they seem to be wrong." : "請檢查您的憑證,它們似乎有錯。", + "Please specify the port, it could not be auto-detected." : "請指定連接埠,它無法自動偵測。", + "Base DN could not be auto-detected, please revise credentials, host and port." : "無法自動偵測 Base DN,請修改憑證、主機、連接埠等。", + "Could not detect Base DN, please enter it manually." : "偵測不到 Base DN,請手動輸入。", "{nthServer}. Server" : "{nthServer}. 伺服器", - "No object found in the given Base DN. Please revise." : "在Base DN中找不到物件,請重新修改", - "More than 1,000 directory entries available." : "目前有超過 1,000 個資料夾項目是可以使用的", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "產生錯誤,請檢查Base DN,以及連線設定和驗證", - "Do you really want to delete the current Server Configuration?" : "您真的要刪除現在的伺服器設定嗎?", + "No object found in the given Base DN. Please revise." : "在 Base DN 中找不到物件。請修正。", + "More than 1,000 directory entries available." : "有超過 1,000 個目錄條目可用。", + "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["提供的 Base DN 中有 {objectsFound} 個條目可用"], + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "遭遇錯誤。請檢查 Base DN、連線設定、憑證等。", + "Do you really want to delete the current Server Configuration?" : "您真的要刪除現在的伺服器組態設定嗎?", "Confirm Deletion" : "確認刪除", - "Mappings cleared successfully!" : "Mappings清除成功", - "Error while clearing the mappings." : "清除Mappings發生錯誤", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "匿名是不允許的,請提供使用者DN和密碼", - "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 錯誤,不允許匿名榜定", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "存檔失敗,請確認資料庫運作中,請重新讀取一次然後再試一次", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式會使LDAP自動抓取資訊,抓取資訊的時間依您的LDAP大小而定,可能會花一點時間,您確定要切換模式?", + "Mappings cleared successfully!" : "映射清除成功!", + "Error while clearing the mappings." : "清除映射時發生錯誤。", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "不允許匿名綁定。請提供使用者 DN 與密碼。", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 操作錯誤。可能不允許匿名綁定。", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "儲存失敗。請確保資料庫可以運作。繼續前請重新載入。", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式將會啟用自動 LDAP 查詢。取決於您的 LDAP 大小,可能需要一些時間。您仍然想要切換模式嗎?", "Mode switch" : "模式切換", - "Select attributes" : "選擇屬性", - "User found and settings verified." : "使用者存在,設定值正確", - "An unspecified error occurred. Please check log and settings." : "發生一個不明的錯誤‧請檢查日誌和設定。", - "A connection error to LDAP / AD occurred, please check host, port and credentials." : "連線到 LDAP/AD出現錯誤,請檢查主機,連接阜和驗證資訊", - "Please provide a login name to test against" : "請提供登入姓名以便再次測試", - "The group box was disabled, because the LDAP / AD server does not support memberOf." : "群組盒已經停用,LDAP/AD 伺服器並不支援", - "Please login with the new password" : "請登入並使用新的密碼", - "Your password will expire tomorrow." : "您的密碼將於明天過期", - "Your password will expire today." : "您的密碼將於今天過期", - "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密碼將於%n天後過期"], - "LDAP / AD integration" : "LDAP /AD 整合", - "_%s group found_::_%s groups found_" : ["找到 %s 群組"], - "_%s user found_::_%s users found_" : ["找到 %s 使用者"], - "Could not find the desired feature" : "無法找到所需的功能", - "Invalid Host" : "無效的Host", - "Test Configuration" : "測試此設定", + "Select attributes" : "選取特性", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "找不到使用者。請檢查您的登入資料與使用者名稱。有效的過濾條件(複製貼上以進行命令列驗證):<br/>", + "User found and settings verified." : "使用者存在,設定值正確。", + "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "請考慮縮小搜尋範圍,目前涵蓋了許多使用者,但只有第一個才能登入。", + "An unspecified error occurred. Please check log and settings." : "發生不明錯誤。請檢查紀錄檔與設定。", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜尋過濾條件無效,可能是語法問題引起,如括號不對稱等。請修正。", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "遭遇 LDAP/AD 的連線錯誤。請檢查主機、連接埠、憑證等。", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "「%uid」佔位字串遺失。查詢 LDAP/AD 時將會使用登入名稱取代。", + "Please provide a login name to test against" : "請提供登入名稱以便再次測試", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "由於 LDAP/AD 伺服器不支援 memberOf,群組盒已停用。", + "Password change rejected. Hint: %s" : "密碼變更被拒絕。提示:%s", + "Mandatory field \"%s\" left empty" : "必填欄位「%s」為空", + "A password is given, but not an LDAP agent" : "已提供密碼,但並未提供 LDAP 代理程式", + "No password is given for the user agent" : "未提供使用者代理程式的密碼", + "No LDAP base DN was given" : "未提供 LDAP 基礎 DN", + "User base DN is not a subnode of global base DN" : "使用者基礎 DN 不是全域基礎 DN 的子節點", + "Group base DN is not a subnode of global base DN" : "群組基礎 DN 不是全域基礎 DN 的子節點", + "Login filter does not contain %s placeholder." : "登入過濾條件不包含 %s 佔位字串。", + "Please login with the new password" : "請以新密碼登入", + "LDAP User backend" : "LDAP 使用者後端", + "Your password will expire tomorrow." : "您的密碼將於明天到期。", + "Your password will expire today." : "您的密碼將於今天到期。", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["您的密碼將於 %n 天內到期。"], + "LDAP/AD integration" : "LDAP/AD 整合", + "LDAP Connection" : "LDAP 連線", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["%n LDAP 設定綁紮失敗:%s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["%n LDAP 設定搜尋失敗:%s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["有 %n 個不活躍的 LDAP 設定:%s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : ["綁紮與搜尋適用於全部 %n 個已設定的 LDAP 連線 (%s)"], + "Invalid LDAP UUIDs" : "無效的 LDAP UUID", + "None found" : "找不到", + "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "找到無效的 LDAP 帳號或群組 UUID。請審閱您在 LDAP 專家設定中的「覆寫 UUID 偵測」設定,並使用「occ ldap:update-uuid」來更新它們。", + "_%n group found_::_%n groups found_" : ["找到 %n 個群組"], + "> 1000 groups found" : "找到 > 1000 個群組", + "> 1000 users found" : "找到 > 1000 個使用者", + "_%n user found_::_%n users found_" : ["找到 %n 個使用者"], + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "偵測不到使用者顯示名稱特性。請在進階 LDAP 設定中自行指定。", + "Could not find the desired feature" : "找不到所需的功能", + "Invalid Host" : "無效的主機", + "LDAP user and group backend" : "LDAP 使用者與群組後端", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "此應用程式讓管理員可以將 Nextcloud 連線到以 LDAP 為基礎的使用者目錄。", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "此應用程式讓管理員可以將 Nextcloud 連線到以 LDAP 為基礎的使用者目錄,來認證與供應使用者、群組與使用者特性。管理員可以設定此應用程式連線到一個或更多個 LDAP 目錄,或是透過 LDAP 介面連線到 Active Directory。像是使用者容量限制、電子郵件、頭像圖片、群組成員資格等特性,可以透過適當查詢與過濾條件後的目錄從 Nextcloud 拉取。\n\n使用者以其 LDAP 或 AD 憑證登入 Nextcloud,並根據 LDAP 或 AD 伺服器處理的身份認證請求來授予存取權。Nextcloud 並不儲存 LDAP 或 AD 的密碼,而是使用這些憑證來對使用者進行身份認證,接著 Nextcloud 會使用工作階段作為使用者 ID。更多資訊請參閱 LDAP 使用者與群組後端文件。", + "Test Configuration" : "測試組態設定", "Help" : "說明", - "Only these object classes:" : "只有這些物件類別:", - "Only from these groups:" : "只從這些群組:", + "Groups meeting these criteria are available in %s:" : "在 %s 中符合這些條件可用群組:", + "Only these object classes:" : "僅限這些物件類別:", + "Only from these groups:" : "僅限這些群組:", "Search groups" : "搜尋群組", "Available groups" : "可用的群組", - "Selected groups" : "已選擇的群組", - "Edit LDAP Query" : "編輯LDAP Query", - "LDAP Filter:" : "LDAP 過慮器:", - "When logging in, %s will find the user based on the following attributes:" : "當登入%s時,將會根據以下屬性找到使用者 :", - "LDAP / AD Username:" : "LDAP / AD 使用者名稱:", - "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允許使用LDAP / AD使用者登入,該使用者可以是“ uid”或“ sAMAccountName”。", - "LDAP / AD Email Address:" : "LDAP / AD 電子郵件:", - "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允許使用電子郵件屬性登入。 允許使用“ mail”和“ mailPrimaryAddress”。", - "Other Attributes:" : "其他屬性:", - "Test Loginname" : "測試登入姓名", + "Selected groups" : "已選取的群組", + "Edit LDAP Query" : "編輯 LDAP 查詢", + "LDAP Filter:" : "LDAP 過濾條件:", + "The filter specifies which LDAP groups shall have access to the %s instance." : "過濾條件指定哪些 LDAP 群組應該具備 %s 站台的存取權。", + "Verify settings and count the groups" : "驗證設定並計算群組", + "When logging in, %s will find the user based on the following attributes:" : "登入時,%s 將會根據以下特性尋找使用者:", + "LDAP/AD Username:" : "LDAP/AD 使用者名稱:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "允許使用 LDAP/AD 使用者名稱登入,可以是「uid」或「sAMAccountName」,會自動偵測。", + "LDAP/AD Email Address:" : "LDAP/AD 電子郵件地址:", + "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "允許以電子郵件特性登入。允許使用「mail」與「mailPrimaryAddress」。", + "Other Attributes:" : "其他特性:", + "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "定義試圖登入時所要套用的過濾條件。「%%uid」會在登入動作時取代使用者名稱。範例:「uid=%%uid」", + "Test Loginname" : "測試登入名稱", + "Attempts to receive a DN for the given loginname and the current login filter" : "嘗試接收給定登入名稱與目前登入過濾條件的 DN", "Verify settings" : "驗證設定", - "%s. Server:" : "%s. 伺服器:", - "Add a new configuration" : "建立一個新的設定", - "Copy current configuration into new directory binding" : "複製目前的設定檔到新目錄", - "Delete the current configuration" : "刪除目前的設定檔", + "%s. Server:" : "%s. 伺服器:", + "Add a new configuration" : "建立新的組態設定", + "Copy current configuration into new directory binding" : "複製目前的組態設定檔到新目錄綁定", + "Delete the current configuration" : "刪除目前的組態設定", "Host" : "主機", + "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "除非您需要 SSL,否則您可以忽略通訊協定。如果需要,請以 ldaps:// 開頭", "Port" : "連接埠", - "Detect Port" : "偵測連接阜", - "User DN" : "User 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與密碼欄位留白。", + "Detect 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=agent,dc=example,dc=com。若是匿名存取,則請將 DN 與密碼欄位留空。", "Password" : "密碼", - "For anonymous access, leave DN and Password empty." : "匿名連接時請將 DN 與密碼欄位留白", - "Save Credentials" : "保存憑證", + "For anonymous access, leave DN and Password empty." : "匿名存取時,請將 DN 與密碼欄位留空。", + "Save Credentials" : "儲存憑證", "One Base DN per line" : "一行一個 Base DN", - "You can specify Base DN for users and groups in the Advanced tab" : "您可以在進階標籤頁裡面指定使用者及群組的 Base DN", + "You can specify Base DN for users and groups in the Advanced tab" : "您可以在「進階」分頁中為使用者與群組指定 Base DN", "Detect Base DN" : "偵測 Base DN", "Test Base DN" : "測試 Base DN", - "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP篩選器 (建議在大型的資料環境)", - "Listing and searching for users is constrained by these criteria:" : "列出和搜索用戶受到以下條件的約束:", - "The filter specifies which LDAP users shall have access to the %s instance." : "篩選起指定哪些LDAP的使用者應該擁有存取%s的權限", - "Verify settings and count users" : "驗證設定並計算使用者數", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "避免自動 LDAP 請求。適合較大規模的安裝設置,但需要具備一些 LDAP 知識。", + "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP 過濾條件(建議用於大型目錄)", + "Listing and searching for users is constrained by these criteria:" : "列出和搜尋以下條件限定的使用者:", + "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." : "使用者最常見的物件類別是 organizationalPerson、person、user、inetOrgPerson 等。如果不確定要選取哪個物件類別,則請諮詢您的目錄管理員。", + "The filter specifies which LDAP users shall have access to the %s instance." : "過濾條件指定哪些 LDAP 使用者應具備 %s 站台的存取權。", + "Verify settings and count users" : "驗證設定並計算使用者", "Saving" : "儲存", "Back" : "返回", "Continue" : "繼續", - "Please renew your password." : "請更新您的密碼", - "An internal error occurred." : "發生內部錯誤", - "Please try again or contact your administrator." : "請重試或聯絡系統管理員", + "Please renew your password." : "請更新您的密碼。", + "An internal error occurred." : "發生內部錯誤。", + "Please try again or contact your administrator." : "請重試,或聯絡您的系統管理員。", "Current password" : "目前密碼", "New password" : "新密碼", "Renew password" : "更新密碼", - "Wrong password." : "密碼錯誤", + "Wrong password." : "密碼錯誤。", "Cancel" : "取消", "Server" : "伺服器", "Users" : "使用者", - "Login Attributes" : "登入的設定", + "Login Attributes" : "登入特性", "Groups" : "群組", - "Expert" : "專業模式", + "Expert" : "專家", "Advanced" : "進階", - "<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>沒有安裝 PHP LDAP 模組,後端系統將無法運作,請要求您的系統管理員安裝模組。", + "<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>未安裝 PHP LDAP 模組,後端系統將無法運作。請要求您的系統管理員安裝。", "Connection Settings" : "連線設定", - "Configuration Active" : "設定使用中", - "When unchecked, this configuration will be skipped." : "沒有被勾選時,此設定會被略過。", - "Backup (Replica) Host" : "備用主機", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "可以選擇性設定備用主機,必須是 LDAP/AD 中央伺服器的複本。", - "Backup (Replica) Port" : "備用(複本)連接埠", + "Configuration Active" : "組態設定作用中", + "When unchecked, this configuration will be skipped." : "沒有勾選時,此組態設定會被略過。", + "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." : "只能連線至複製伺服器。", - "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." : "不建議,請僅在測試時使用!如果連線只能在此設定下工作,請匯入LDAP伺服器的SSL認證到您的伺服器%s上", + "Only connect to the replica server." : "僅連線至複本伺服器。", + "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." : "不建議,請僅在測試時使用!如果連線只能在此選項下運作,請匯入 LDAP 伺服器的 SSL 憑證到您的 %s 伺服器上。", "Cache Time-To-Live" : "快取的存活時間", "in seconds. A change empties the cache." : "以秒為單位。變更後會清空快取。", "Directory Settings" : "目錄設定", "User Display Name Field" : "使用者顯示名稱欄位", - "The LDAP attribute to use to generate the user's display name." : "LDAP設定值,用於產生使用者的顯示名稱", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "選填。要加進顯示名稱中括號的 LDAP 屬性。例如 »John Doe (john.doe@example.org)«。", - "Base User Tree" : "Base User Tree", + "The LDAP attribute to use to generate the user's display name." : "用於生成使用者顯示名稱的 LDAP 特性。", + "2nd User Display Name Field" : "第二個使用者顯示名稱欄位", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "選填。要加進顯示名稱括號中的 LDAP 特性。例如 »John Doe (john.doe@example.org)«。", + "Base User Tree" : "基本使用者樹", "One User Base DN per line" : "一行一個使用者 Base DN", - "User Search Attributes" : "User Search Attributes", - "Optional; one attribute per line" : "非必要,一行一項屬性", + "User Search Attributes" : "使用者搜尋特性", + "Optional; one attribute per line" : "選填;一行一項特性", + "Disable users missing from LDAP" : "停用 LDAP 中沒有的使用者", + "When switched on, users imported from LDAP which are then missing will be disabled" : "開啟後,從 LDAP 匯入但隨後消失的使用者將被停用", "Group Display Name Field" : "群組顯示名稱欄位", - "The LDAP attribute to use to generate the groups's display name." : "LDAP設定值,用於產生使用者群組的顯示名稱", - "Base Group Tree" : "Base Group Tree", - "One Group Base DN per line" : "一行一個 Group Base DN", - "Group Search Attributes" : "Group Search Attributes", - "Group-Member association" : "Group-Member association", - "Default password policy DN" : "默認密碼策略DN", - "Special Attributes" : "特殊屬性", - "Quota Field" : "配額欄位", - "Quota Default" : "預設配額", - "Email Field" : "電郵欄位", + "The LDAP attribute to use to generate the groups's display name." : "用於生成群組顯示名稱的 LDAP 特性。", + "Base Group Tree" : "Base 群組樹", + "One Group Base DN per line" : "一行一個群組 Base DN", + "Group Search Attributes" : "群組搜尋特性", + "Group-Member association" : "群組與成員關聯", + "Dynamic Group Member URL" : "動態群組成員 URL", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "群組物件上的 LDAP 特性包含了 LDAP 搜尋 URL,該 URL 決定了哪些物件屬於該群組。(空白設定將會停用動態群組成員資格功能。)", + "Nested Groups" : "巢狀群組", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "啟用後,將會支援包含群組的群組。(僅在群組成員特性包含 DN 時可正常運作。)", + "Paging chunksize" : "分頁區塊大小", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "分頁式 LDAP 搜尋所使用的區塊大小,可能會回傳大量結果,例如使用者或群組列舉。(在這種情況下,設定為 0 會停用分頁式 LDAP 搜尋。)", + "Enable LDAP password changes per user" : "啟用每個使用者的 LDAP 密碼變更", + "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "允許 LDAP 使用者變更他們的密碼,並允許超級管理員與群組管理員變更其 LDAP 使用者的密碼。僅當在 LDAP 伺服器上設定了對應的存取控制策略時,此選項才會生效。由於密碼會以明文形式傳送給 LDAP 伺服器,因此必須使用傳輸加密,且必須在 LDAP 伺服器上設定密碼雜湊處理。", + "(New password is sent as plain text to LDAP)" : "(新密碼會以明文傳送給 LDAP)", + "Default password policy DN" : "預設密碼策略 DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "預設密碼策略的 DN,用於密碼過期處理。僅當啟用了每個使用者的 LDAP 密碼變更時才能正常運作,僅 OpenLDAP 有支援。保留空白將停用密碼過期處理。", + "Special Attributes" : "特殊特性", + "Quota Field" : "容量限制欄位", + "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "留空將以使用者的預設容量限制為準。否則,請指定 LDAP/AD 特性。", + "Quota Default" : "容量限制預設", + "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "凌駕在容量限制欄位中沒有設定配額容量的 LDAP 使用者的預設配額。", + "Email Field" : "電子郵件欄位", + "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "根據 LDAP 特性設定使用者的電子郵件。留空將採預設行為。", "User Home Folder Naming Rule" : "使用者家目錄的命名規則", + "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "留空將採用使用者名稱(預設值)。否則,請指定 LDAP/AD 特性。", + "\"$home\" Placeholder Field" : "「$home」佔位字串欄位", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "外部儲存空間組態設定中的 $home 將會以指定特性的值取代", + "User Profile Attributes" : "使用者個人檔案特性", + "Phone Field" : "電話號碼欄位", + "User profile Phone will be set from the specified attribute" : "使用者個人檔案電話號碼將根據指定的特性設定", + "Website Field" : "網站欄位", + "User profile Website will be set from the specified attribute" : "使用者個人檔案網站將根據指定的特性設定", + "Address Field" : "地址欄位", + "User profile Address will be set from the specified attribute" : "使用者個人檔案地址將根據指定的特性設定", + "Twitter Field" : "Twitter 欄位", + "User profile Twitter will be set from the specified attribute" : "使用者個人檔案 Twitter 將根據指定的特性設定", + "Fediverse Field" : "聯邦宇宙欄位", + "User profile Fediverse will be set from the specified attribute" : "使用者個人檔案聯邦宇宙將根據指定的特性設定", + "Organisation Field" : "組織單位欄位", + "User profile Organisation will be set from the specified attribute" : "使用者個人檔案組織單位將根據指定的特性設定", + "Role Field" : "職位欄位", + "User profile Role will be set from the specified attribute" : "使用者個人檔案職位將根據指定的特性設定", + "Headline Field" : "重要經歷欄位", + "User profile Headline will be set from the specified attribute" : "使用者個人檔案重要經歷將根據指定的特性設定", + "Biography Field" : "自傳欄位", + "User profile Biography will be set from the specified attribute" : "使用者個人檔案自傳將根據指定的特性設定", + "Birthdate Field" : "出生日期欄位", + "User profile Date of birth will be set from the specified attribute" : "使用者個人資料的出生日期將從指定的屬性中設定", + "Pronouns Field" : "代名詞欄位", + "User profile Pronouns will be set from the specified attribute" : "使用者個人資料代名詞將從指定的屬性設定", "Internal Username" : "內部使用者名稱", - "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." : "預設情況下,UUID 屬性會自動偵測。UUID 屬性用來準確識別 LDAP 使用者及群組。此外,如果未在上方指定,內部使用者名稱會基於 UUID 建立。您能覆蓋設定並直接指定屬性,但一定要確保指定的屬性能被使用者及群組取得且唯一。留空則執行預設行為。變更只會對新映射 (加入) 的 LDAP 使用者及群組生效。", - "UUID Attribute for Users:" : "使用者的UUID值:", - "UUID Attribute for Groups:" : "群組的UUID值:", - "Clear Groupname-LDAP Group Mapping" : "清除 群組名稱-LDAP 群組映射" + "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "預設情況下,內部使用者名稱將根據 UUID 特性建立。這能確保使用者名稱是唯一,且不需要轉換字元。內部使用者名稱的限制是,只能使用下列字元:[a-zA-Z0-9_.@-]。其他字元會使用其 ASCII 對映取代,或是直接忽略。發生名稱碰撞時,將會加入或加大數字。內部使用者名稱用於內部識別使用者。這也是使用者家資料夾的預設名稱。也是遠端 URL 的一部分,例如,會用在所有 DAV 服務上。啟用此設定後,預設的行為會被凌駕。變更僅對新映射(新增)的 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." : "預設情況下,UUID 特性會自動偵測。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 metadata. In order to precisely identify and recognize users, each LDAP user will have an 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." : "使用者名稱用於儲存並指派中介資料。為了精確識別並認知使用者,每個 LDAP 使用者都會有其內部使用者名稱。這需要從使用者名稱作映射到 LDAP 使用者。建立的使用者名稱會映射到 LDAP 使用者的 UUID。另外,DN 會被快取以減少 LDAP 互動,但快取不用於識別身份。若 DN 變更時,系統會發現變動。內部使用者名稱在系統中全面使用,所以一旦清除映射,會讓到處都是未連結的殘留項目。清除映射的行為並不會區分組態設定,而是會影響所有 LDAP 組態設定!請永遠不要在正式環境中清除映射,僅在測試或實驗階段使用。", + "Clear Username-LDAP User Mapping" : "清除使用者名稱-LDAP 使用者映射", + "Clear Groupname-LDAP Group Mapping" : "清除群組名稱-LDAP 群組映射", + "Invalid configuration. Please have a look at the logs for further details." : "無效的組態設定。請檢查紀錄檔以取得更多詳細資訊。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index d11ca98ece9..9fe0aa64268 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -1,64 +1,32 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Aaron Wood <aaronjwood@gmail.com> - * @author Andreas Fischer <bantu@owncloud.com> - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Benjamin Diele <benjamin@diele.be> - * @author bline <scottbeck@gmail.com> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Daniel Kesselberg <mail@danielkesselberg.de> - * @author J0WI <J0WI@users.noreply.github.com> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es> - * @author Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Mario Kolling <mario.kolling@serpro.gov.br> - * @author Max Kovalenko <mxss1998@yandex.ru> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Nicolas Grekas <nicolas.grekas@gmail.com> - * @author Peter Kubica <peter@kubica.ch> - * @author Ralph Krimmel <rkrimme1@gwdg.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Roland Tapken <roland@bitarbeiter.net> - * @author root <root@localhost.localdomain> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; use DomainException; -use OC\HintException; use OC\Hooks\PublicEmitter; use OC\ServerNotAvailableException; use OCA\User_LDAP\Exceptions\ConstraintViolationException; +use OCA\User_LDAP\Exceptions\NoMoreResults; use OCA\User_LDAP\Mapping\AbstractMapping; -use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\OfflineUser; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\HintException; +use OCP\IAppConfig; use OCP\IConfig; -use OCP\ILogger; +use OCP\IGroupManager; use OCP\IUserManager; +use OCP\Server; +use OCP\User\Events\UserIdAssignedEvent; +use OCP\Util; +use Psr\Log\LoggerInterface; +use function strlen; +use function substr; /** * Class Access @@ -68,64 +36,46 @@ use OCP\IUserManager; class Access extends LDAPUtility { public const UUID_ATTRIBUTES = ['entryuuid', 'nsuniqueid', 'objectguid', 'guid', 'ipauniqueid']; - /** @var \OCA\User_LDAP\Connection */ - public $connection; - /** @var Manager */ - public $userManager; - //never ever check this var directly, always use getPagedSearchResultState - protected $pagedSearchedSuccessful; - /** - * @var UserMapping $userMapper + * never ever check this var directly, always use getPagedSearchResultState + * @var ?bool */ + protected $pagedSearchedSuccessful; + + /** @var ?AbstractMapping */ protected $userMapper; - /** - * @var AbstractMapping $userMapper - */ + /** @var ?AbstractMapping */ protected $groupMapper; - /** - * @var \OCA\User_LDAP\Helper - */ - private $helper; - /** @var IConfig */ - private $config; - /** @var IUserManager */ - private $ncUserManager; - /** @var string */ - private $lastCookie = ''; + private string $lastCookie = ''; public function __construct( - Connection $connection, ILDAPWrapper $ldap, - Manager $userManager, - Helper $helper, - IConfig $config, - IUserManager $ncUserManager + public Connection $connection, + public Manager $userManager, + private Helper $helper, + private IConfig $config, + private IUserManager $ncUserManager, + private LoggerInterface $logger, + private IAppConfig $appConfig, + private IEventDispatcher $dispatcher, ) { parent::__construct($ldap); - $this->connection = $connection; - $this->userManager = $userManager; $this->userManager->setLdapAccess($this); - $this->helper = $helper; - $this->config = $config; - $this->ncUserManager = $ncUserManager; } /** * sets the User Mapper - * - * @param AbstractMapping $mapper */ - public function setUserMapper(AbstractMapping $mapper) { + public function setUserMapper(AbstractMapping $mapper): void { $this->userMapper = $mapper; } /** * @throws \Exception */ - public function getUserMapper(): UserMapping { + public function getUserMapper(): AbstractMapping { if (is_null($this->userMapper)) { throw new \Exception('UserMapper was not assigned to this Access instance.'); } @@ -134,20 +84,17 @@ class Access extends LDAPUtility { /** * sets the Group Mapper - * - * @param AbstractMapping $mapper */ - public function setGroupMapper(AbstractMapping $mapper) { + public function setGroupMapper(AbstractMapping $mapper): void { $this->groupMapper = $mapper; } /** * returns the Group Mapper * - * @return AbstractMapping * @throws \Exception */ - public function getGroupMapper() { + public function getGroupMapper(): AbstractMapping { if (is_null($this->groupMapper)) { throw new \Exception('GroupMapper was not assigned to this Access instance.'); } @@ -171,38 +118,75 @@ class Access extends LDAPUtility { } /** - * reads a given attribute for an LDAP record identified by a DN + * Reads several attributes for an LDAP record identified by a DN and a filter + * No support for ranged attributes. * * @param string $dn the record in question - * @param string $attr the attribute that shall be retrieved - * if empty, just check the record's existence + * @param array $attrs the attributes that shall be retrieved + * if empty, just check the record's existence * @param string $filter * @return array|false an array of values on success or an empty - * array if $attr is empty, false otherwise + * array if $attr is empty, false otherwise * @throws ServerNotAvailableException */ - public function readAttribute($dn, $attr, $filter = 'objectClass=*') { + public function readAttributes(string $dn, array $attrs, string $filter = 'objectClass=*'): array|false { if (!$this->checkConnection()) { - \OCP\Util::writeLog('user_ldap', + $this->logger->warning( 'No LDAP Connector assigned, access impossible for readAttribute.', - ILogger::WARN); + ['app' => 'user_ldap'] + ); return false; } $cr = $this->connection->getConnectionResource(); - if (!$this->ldap->isResource($cr)) { - //LDAP not available - \OCP\Util::writeLog('user_ldap', 'LDAP resource not available.', ILogger::DEBUG); + $attrs = array_map( + fn (string $attr): string => mb_strtolower($attr, 'UTF-8'), + $attrs, + ); + + $values = []; + $record = $this->executeRead($dn, $attrs, $filter); + if (is_bool($record)) { + // when an exists request was run and it was successful, an empty + // array must be returned + return $record ? [] : false; + } + + $result = []; + foreach ($attrs as $attr) { + $values = $this->extractAttributeValuesFromResult($record, $attr); + if (!empty($values)) { + $result[$attr] = $values; + } + } + + if (!empty($result)) { + return $result; + } + + $this->logger->debug('Requested attributes {attrs} not found for ' . $dn, ['app' => 'user_ldap', 'attrs' => $attrs]); + return false; + } + + /** + * reads a given attribute for an LDAP record identified by a DN + * + * @param string $dn the record in question + * @param string $attr the attribute that shall be retrieved + * if empty, just check the record's existence + * @param string $filter + * @return array|false an array of values on success or an empty + * array if $attr is empty, false otherwise + * @throws ServerNotAvailableException + */ + public function readAttribute(string $dn, string $attr, string $filter = 'objectClass=*') { + if (!$this->checkConnection()) { + $this->logger->warning( + 'No LDAP Connector assigned, access impossible for readAttribute.', + ['app' => 'user_ldap'] + ); return false; } - //Cancel possibly running Paged Results operation, otherwise we run in - //LDAP protocol errors - $this->abandonPagedSearch(); - // openLDAP requires that we init a new Paged Search. Not needed by AD, - // but does not hurt either. - $pagingSize = (int)$this->connection->ldapPagingSize; - // 0 won't result in replies, small numbers may leave out groups - // (cf. #12306), 500 is default for paging and should work everywhere. - $maxResults = $pagingSize > 20 ? $pagingSize : 500; + $cr = $this->connection->getConnectionResource(); $attr = mb_strtolower($attr, 'UTF-8'); // the actual read attribute later may contain parameters on a ranged // request, e.g. member;range=99-199. Depends on server reply. @@ -211,7 +195,7 @@ class Access extends LDAPUtility { $values = []; $isRangeRequest = false; do { - $result = $this->executeRead($cr, $dn, $attrToRead, $filter, $maxResults); + $result = $this->executeRead($dn, $attrToRead, $filter); if (is_bool($result)) { // when an exists request was run and it was successful, an empty // array must be returned @@ -246,47 +230,41 @@ class Access extends LDAPUtility { } } while ($isRangeRequest); - \OCP\Util::writeLog('user_ldap', 'Requested attribute ' . $attr . ' not found for ' . $dn, ILogger::DEBUG); + $this->logger->debug('Requested attribute ' . $attr . ' not found for ' . $dn, ['app' => 'user_ldap']); return false; } /** * Runs an read operation against LDAP * - * @param resource $cr the LDAP connection - * @param string $dn - * @param string $attribute - * @param string $filter - * @param int $maxResults * @return array|bool false if there was any error, true if an exists check * was performed and the requested DN found, array with the * returned data on a successful usual operation * @throws ServerNotAvailableException */ - public function executeRead($cr, $dn, $attribute, $filter, $maxResults) { - $this->initPagedSearch($filter, $dn, [$attribute], $maxResults, 0); + public function executeRead(string $dn, string|array $attribute, string $filter) { $dn = $this->helper->DNasBaseParameter($dn); - $rr = @$this->invokeLDAPMethod('read', $cr, $dn, $filter, [$attribute]); + $rr = @$this->invokeLDAPMethod('read', $dn, $filter, (is_string($attribute) ? [$attribute] : $attribute)); if (!$this->ldap->isResource($rr)) { if ($attribute !== '') { //do not throw this message on userExists check, irritates - \OCP\Util::writeLog('user_ldap', 'readAttribute failed for DN ' . $dn, ILogger::DEBUG); + $this->logger->debug('readAttribute failed for DN ' . $dn, ['app' => 'user_ldap']); } //in case an error occurs , e.g. object does not exist return false; } - if ($attribute === '' && ($filter === 'objectclass=*' || $this->invokeLDAPMethod('countEntries', $cr, $rr) === 1)) { - \OCP\Util::writeLog('user_ldap', 'readAttribute: ' . $dn . ' found', ILogger::DEBUG); + if ($attribute === '' && ($filter === 'objectclass=*' || $this->invokeLDAPMethod('countEntries', $rr) === 1)) { + $this->logger->debug('readAttribute: ' . $dn . ' found', ['app' => 'user_ldap']); return true; } - $er = $this->invokeLDAPMethod('firstEntry', $cr, $rr); + $er = $this->invokeLDAPMethod('firstEntry', $rr); if (!$this->ldap->isResource($er)) { //did not match the filter, return false return false; } //LDAP attributes are not case sensitive - $result = \OCP\Util::mb_array_change_key_case( - $this->invokeLDAPMethod('getAttributes', $cr, $er), MB_CASE_LOWER, 'UTF-8'); + $result = Util::mb_array_change_key_case( + $this->invokeLDAPMethod('getAttributes', $er), MB_CASE_LOWER, 'UTF-8'); return $result; } @@ -295,6 +273,8 @@ class Access extends LDAPUtility { * Normalizes a result grom getAttributes(), i.e. handles DNs and binary * data if present. * + * DN values are escaped as per RFC 2253 + * * @param array $result from ILDAPWrapper::getAttributes() * @param string $attribute the attribute name that was read * @return string[] @@ -326,20 +306,19 @@ class Access extends LDAPUtility { * @return array If a range was detected with keys 'values', 'attributeName', * 'attributeFull' and 'rangeHigh', otherwise empty. */ - public function extractRangeData($result, $attribute) { + public function extractRangeData(array $result, string $attribute): array { $keys = array_keys($result); foreach ($keys as $key) { - if ($key !== $attribute && strpos($key, $attribute) === 0) { - $queryData = explode(';', $key); - if (strpos($queryData[1], 'range=') === 0) { + if ($key !== $attribute && str_starts_with((string)$key, $attribute)) { + $queryData = explode(';', (string)$key); + if (isset($queryData[1]) && str_starts_with($queryData[1], 'range=')) { $high = substr($queryData[1], 1 + strpos($queryData[1], '-')); - $data = [ + return [ 'values' => $result[$key], 'attributeName' => $queryData[0], 'attributeFull' => $key, 'rangeHigh' => $high, ]; - return $data; } } } @@ -360,17 +339,12 @@ class Access extends LDAPUtility { throw new \Exception('LDAP password changes are disabled.'); } $cr = $this->connection->getConnectionResource(); - if (!$this->ldap->isResource($cr)) { - //LDAP not available - \OCP\Util::writeLog('user_ldap', 'LDAP resource not available.', ILogger::DEBUG); - return false; - } try { // try PASSWD extended operation first - return @$this->invokeLDAPMethod('exopPasswd', $cr, $userDN, '', $password) || - @$this->invokeLDAPMethod('modReplace', $cr, $userDN, $password); + return @$this->invokeLDAPMethod('exopPasswd', $userDN, '', $password) + || @$this->invokeLDAPMethod('modReplace', $userDN, $password); } catch (ConstraintViolationException $e) { - throw new HintException('Password change rejected.', \OC::$server->getL10N('user_ldap')->t('Password change rejected. Hint: ') . $e->getMessage(), $e->getCode()); + throw new HintException('Password change rejected.', Util::getL10N('user_ldap')->t('Password change rejected. Hint: %s', $e->getMessage()), (int)$e->getCode()); } } @@ -421,7 +395,7 @@ class Access extends LDAPUtility { $domainParts = []; $dcFound = false; foreach ($allParts as $part) { - if (!$dcFound && strpos($part, 'dc=') === 0) { + if (!$dcFound && str_starts_with($part, 'dc=')) { $dcFound = true; } if ($dcFound) { @@ -438,7 +412,7 @@ class Access extends LDAPUtility { * @return string|false LDAP DN on success, otherwise false */ public function groupname2dn($name) { - return $this->groupMapper->getDNByName($name); + return $this->getGroupMapper()->getDNByName($name); } /** @@ -448,7 +422,7 @@ class Access extends LDAPUtility { * @return string|false with the LDAP DN on success, otherwise false */ public function username2dn($name) { - $fdn = $this->userMapper->getDNByName($name); + $fdn = $this->getUserMapper()->getDNByName($name); //Check whether the DN belongs to the Base, to avoid issues on multi- //server setups @@ -464,10 +438,11 @@ class Access extends LDAPUtility { * * @param string $fdn the dn of the group object * @param string $ldapName optional, the display name of the object + * @param bool $autoMapping Should the group be mapped if not yet mapped * @return string|false with the name to use in Nextcloud, false on DN outside of search DN * @throws \Exception */ - public function dn2groupname($fdn, $ldapName = null) { + public function dn2groupname($fdn, $ldapName = null, bool $autoMapping = true) { //To avoid bypassing the base DN settings under certain circumstances //with the group support, check whether the provided DN matches one of //the given Bases @@ -475,18 +450,18 @@ class Access extends LDAPUtility { return false; } - return $this->dn2ocname($fdn, $ldapName, false); + return $this->dn2ocname($fdn, $ldapName, false, autoMapping:$autoMapping); } /** * returns the internal Nextcloud name for the given LDAP DN of the user, false on DN outside of search DN or failure * - * @param string $dn the dn of the user object + * @param string $fdn the dn of the user object * @param string $ldapName optional, the display name of the object * @return string|false with with the name to use in Nextcloud * @throws \Exception */ - public function dn2username($fdn, $ldapName = null) { + public function dn2username($fdn) { //To avoid bypassing the base DN settings under certain circumstances //with the group support, check whether the provided DN matches one of //the given Bases @@ -494,7 +469,7 @@ class Access extends LDAPUtility { return false; } - return $this->dn2ocname($fdn, $ldapName, true); + return $this->dn2ocname($fdn, null, true); } /** @@ -505,19 +480,21 @@ class Access extends LDAPUtility { * @param bool $isUser optional, whether it is a user object (otherwise group assumed) * @param bool|null $newlyMapped * @param array|null $record + * @param bool $autoMapping Should the group be mapped if not yet mapped * @return false|string with with the name to use in Nextcloud * @throws \Exception */ - public function dn2ocname($fdn, $ldapName = null, $isUser = true, &$newlyMapped = null, array $record = null) { + public function dn2ocname($fdn, $ldapName = null, $isUser = true, &$newlyMapped = null, ?array $record = null, bool $autoMapping = true) { + static $intermediates = []; + if (isset($intermediates[($isUser ? 'user-' : 'group-') . $fdn])) { + return false; // is a known intermediate + } + $newlyMapped = false; if ($isUser) { $mapper = $this->getUserMapper(); - $nameAttribute = $this->connection->ldapUserDisplayName; - $filter = $this->connection->ldapUserFilter; } else { $mapper = $this->getGroupMapper(); - $nameAttribute = $this->connection->ldapGroupDisplayName; - $filter = $this->connection->ldapGroupFilter; } //let's try to retrieve the Nextcloud name from the mappings table @@ -526,6 +503,41 @@ class Access extends LDAPUtility { return $ncName; } + if (!$autoMapping) { + /* If no auto mapping, stop there */ + return false; + } + + if ($isUser) { + $nameAttribute = strtolower($this->connection->ldapUserDisplayName); + $filter = $this->connection->ldapUserFilter; + $uuidAttr = 'ldapUuidUserAttribute'; + $uuidOverride = $this->connection->ldapExpertUUIDUserAttr; + $usernameAttribute = strtolower($this->connection->ldapExpertUsernameAttr); + $attributesToRead = [$nameAttribute,$usernameAttribute]; + // TODO fetch also display name attributes and cache them if the user is mapped + } else { + $nameAttribute = strtolower($this->connection->ldapGroupDisplayName); + $filter = $this->connection->ldapGroupFilter; + $uuidAttr = 'ldapUuidGroupAttribute'; + $uuidOverride = $this->connection->ldapExpertUUIDGroupAttr; + $attributesToRead = [$nameAttribute]; + } + + if ($this->detectUuidAttribute($fdn, $isUser, false, $record)) { + $attributesToRead[] = $this->connection->$uuidAttr; + } + + if ($record === null) { + /* No record was passed, fetch it */ + $record = $this->readAttributes($fdn, $attributesToRead, $filter); + if ($record === false) { + $this->logger->debug('Cannot read attributes for ' . $fdn . '. Skipping.', ['filter' => $filter]); + $intermediates[($isUser ? 'user-' : 'group-') . $fdn] = true; + return false; + } + } + //second try: get the UUID and check if it is known. Then, update the DN and return the name. $uuid = $this->getUUID($fdn, $isUser, $record); if (is_string($uuid)) { @@ -536,23 +548,17 @@ class Access extends LDAPUtility { } } else { //If the UUID can't be detected something is foul. - \OCP\Util::writeLog('user_ldap', 'Cannot determine UUID for ' . $fdn . '. Skipping.', ILogger::INFO); + $this->logger->debug('Cannot determine UUID for ' . $fdn . '. Skipping.', ['app' => 'user_ldap']); return false; } - if (is_null($ldapName)) { - $ldapName = $this->readAttribute($fdn, $nameAttribute, $filter); - if (!isset($ldapName[0]) && empty($ldapName[0])) { - \OCP\Util::writeLog('user_ldap', 'No or empty name for ' . $fdn . ' with filter ' . $filter . '.', ILogger::DEBUG); - return false; - } - $ldapName = $ldapName[0]; - } - if ($isUser) { - $usernameAttribute = (string)$this->connection->ldapExpertUsernameAttr; if ($usernameAttribute !== '') { - $username = $this->readAttribute($fdn, $usernameAttribute); + $username = $record[$usernameAttribute]; + if (!isset($username[0]) || empty($username[0])) { + $this->logger->debug('No or empty username (' . $usernameAttribute . ') for ' . $fdn . '.', ['app' => 'user_ldap']); + return false; + } $username = $username[0]; } else { $username = $uuid; @@ -560,9 +566,8 @@ class Access extends LDAPUtility { try { $intName = $this->sanitizeUsername($username); } catch (\InvalidArgumentException $e) { - \OC::$server->getLogger()->logException($e, [ - 'app' => 'user_ldap', - 'level' => ILogger::WARN, + $this->logger->warning('Error sanitizing username: ' . $e->getMessage(), [ + 'exception' => $e, ]); // we don't attempt to set a username here. We can go for // for an alternative 4 digit random number as we would append @@ -571,7 +576,16 @@ class Access extends LDAPUtility { return false; } } else { - $intName = $ldapName; + if (is_null($ldapName)) { + $ldapName = $record[$nameAttribute]; + if (!isset($ldapName[0]) || empty($ldapName[0])) { + $this->logger->debug('No or empty name for ' . $fdn . ' with filter ' . $filter . '.', ['app' => 'user_ldap']); + $intermediates['group-' . $fdn] = true; + return false; + } + $ldapName = $ldapName[0]; + } + $intName = $this->sanitizeGroupIDCandidate($ldapName); } //a new user/group! Add it only if it doesn't conflict with other backend's users or existing groups @@ -582,12 +596,13 @@ class Access extends LDAPUtility { $this->connection->setConfiguration(['ldapCacheTTL' => 0]); if ($intName !== '' && (($isUser && !$this->ncUserManager->userExists($intName)) - || (!$isUser && !\OC::$server->getGroupManager()->groupExists($intName)) + || (!$isUser && !Server::get(IGroupManager::class)->groupExists($intName)) ) ) { $this->connection->setConfiguration(['ldapCacheTTL' => $originalTTL]); $newlyMapped = $this->mapAndAnnounceIfApplicable($mapper, $fdn, $intName, $uuid, $isUser); if ($newlyMapped) { + $this->logger->debug('Mapped {fdn} as {name}', ['fdn' => $fdn,'name' => $intName]); return $intName; } } @@ -596,13 +611,21 @@ class Access extends LDAPUtility { $altName = $this->createAltInternalOwnCloudName($intName, $isUser); if (is_string($altName)) { if ($this->mapAndAnnounceIfApplicable($mapper, $fdn, $altName, $uuid, $isUser)) { + $this->logger->warning( + 'Mapped {fdn} as {altName} because of a name collision on {intName}.', + [ + 'fdn' => $fdn, + 'altName' => $altName, + 'intName' => $intName, + ] + ); $newlyMapped = true; return $altName; } } //if everything else did not help.. - \OCP\Util::writeLog('user_ldap', 'Could not create unique name for ' . $fdn . '.', ILogger::INFO); + $this->logger->info('Could not create unique name for ' . $fdn . '.', ['app' => 'user_ldap']); return false; } @@ -611,13 +634,16 @@ class Access extends LDAPUtility { string $fdn, string $name, string $uuid, - bool $isUser + bool $isUser, ): bool { if ($mapper->map($fdn, $name, $uuid)) { - if ($this->ncUserManager instanceof PublicEmitter && $isUser) { + if ($isUser) { $this->cacheUserExists($name); - $this->ncUserManager->emit('\OC\User', 'assignedUserId', [$name]); - } elseif (!$isUser) { + $this->dispatcher->dispatchTyped(new UserIdAssignedEvent($name)); + if ($this->ncUserManager instanceof PublicEmitter) { + $this->ncUserManager->emit('\OC\User', 'assignedUserId', [$name]); + } + } else { $this->cacheGroupExists($name); } return true; @@ -629,7 +655,7 @@ class Access extends LDAPUtility { * gives back the user names as they are used ownClod internally * * @param array $ldapUsers as returned by fetchList() - * @return array an array with the user names to use in Nextcloud + * @return array<int,string> an array with the user names to use in Nextcloud * * gives back the user names as they are used ownClod internally * @throws \Exception @@ -642,7 +668,7 @@ class Access extends LDAPUtility { * gives back the group names as they are used ownClod internally * * @param array $ldapGroups as returned by fetchList() - * @return array an array with the group names to use in Nextcloud + * @return array<int,string> an array with the group names to use in Nextcloud * * gives back the group names as they are used ownClod internally * @throws \Exception @@ -652,29 +678,22 @@ class Access extends LDAPUtility { } /** - * @param array $ldapObjects as returned by fetchList() - * @param bool $isUsers - * @return array + * @param array[] $ldapObjects as returned by fetchList() + * @return array<int,string> * @throws \Exception */ - private function ldap2NextcloudNames($ldapObjects, $isUsers) { + private function ldap2NextcloudNames(array $ldapObjects, bool $isUsers): array { if ($isUsers) { $nameAttribute = $this->connection->ldapUserDisplayName; $sndAttribute = $this->connection->ldapUserDisplayName2; } else { $nameAttribute = $this->connection->ldapGroupDisplayName; + $sndAttribute = null; } $nextcloudNames = []; foreach ($ldapObjects as $ldapObject) { - $nameByLDAP = null; - if (isset($ldapObject[$nameAttribute]) - && is_array($ldapObject[$nameAttribute]) - && isset($ldapObject[$nameAttribute][0]) - ) { - // might be set, but not necessarily. if so, we use it. - $nameByLDAP = $ldapObject[$nameAttribute][0]; - } + $nameByLDAP = $ldapObject[$nameAttribute][0] ?? null; $ncName = $this->dn2ocname($ldapObject['dn'][0], $nameByLDAP, $isUsers); if ($ncName) { @@ -686,8 +705,7 @@ class Access extends LDAPUtility { if (is_null($nameByLDAP)) { continue; } - $sndName = isset($ldapObject[$sndAttribute][0]) - ? $ldapObject[$sndAttribute][0] : ''; + $sndName = $ldapObject[$sndAttribute][0] ?? ''; $this->cacheUserDisplayName($ncName, $nameByLDAP, $sndName); } elseif ($nameByLDAP !== null) { $this->cacheGroupDisplayName($ncName, $nameByLDAP); @@ -703,7 +721,7 @@ class Access extends LDAPUtility { * @param string $ncname * @throws \Exception */ - public function updateUserState($ncname) { + public function updateUserState($ncname): void { $user = $this->userManager->get($ncname); if ($user instanceof OfflineUser) { $user->unmark(); @@ -716,18 +734,17 @@ class Access extends LDAPUtility { * @param string $ocName the internal Nextcloud username * @param string|false $home the home directory path */ - public function cacheUserHome($ocName, $home) { + public function cacheUserHome(string $ocName, $home): void { $cacheKey = 'getHome' . $ocName; $this->connection->writeToCache($cacheKey, $home); } /** * caches a user as existing - * - * @param string $ocName the internal Nextcloud username */ - public function cacheUserExists($ocName) { + public function cacheUserExists(string $ocName): void { $this->connection->writeToCache('userExists' . $ocName, true); + $this->connection->writeToCache('userExistsOnLDAP' . $ocName, true); } /** @@ -745,7 +762,7 @@ class Access extends LDAPUtility { * @param string $displayName2 the second display name * @throws \Exception */ - public function cacheUserDisplayName($ocName, $displayName, $displayName2 = '') { + public function cacheUserDisplayName(string $ocName, string $displayName, string $displayName2 = ''): void { $user = $this->userManager->get($ocName); if ($user === null) { return; @@ -769,7 +786,7 @@ class Access extends LDAPUtility { * Instead of using this method directly, call * createAltInternalOwnCloudName($name, true) */ - private function _createAltInternalOwnCloudNameForUsers($name) { + private function _createAltInternalOwnCloudNameForUsers(string $name) { $attempts = 0; //while loop is just a precaution. If a name is not generated within //20 attempts, something else is very wrong. Avoids infinite loop. @@ -796,9 +813,9 @@ class Access extends LDAPUtility { * numbering, e.g. Developers_42 when there are 41 other groups called * "Developers" */ - private function _createAltInternalOwnCloudNameForGroups($name) { - $usedNames = $this->groupMapper->getNamesBySearch($name, "", '_%'); - if (!$usedNames || count($usedNames) === 0) { + private function _createAltInternalOwnCloudNameForGroups(string $name) { + $usedNames = $this->getGroupMapper()->getNamesBySearch($name, '', '_%'); + if (count($usedNames) === 0) { $lastNo = 1; //will become name_2 } else { natsort($usedNames); @@ -813,7 +830,7 @@ class Access extends LDAPUtility { // Check to be really sure it is unique // while loop is just a precaution. If a name is not generated within // 20 attempts, something else is very wrong. Avoids infinite loop. - if (!\OC::$server->getGroupManager()->groupExists($altName)) { + if (!Server::get(IGroupManager::class)->groupExists($altName)) { return $altName; } $altName = $name . '_' . ($lastNo + $attempts); @@ -826,10 +843,15 @@ class Access extends LDAPUtility { * creates a unique name for internal Nextcloud use. * * @param string $name the display name of the object - * @param boolean $isUser whether name should be created for a user (true) or a group (false) + * @param bool $isUser whether name should be created for a user (true) or a group (false) * @return string|false with with the name to use in Nextcloud or false if unsuccessful */ - private function createAltInternalOwnCloudName($name, $isUser) { + private function createAltInternalOwnCloudName(string $name, bool $isUser) { + // ensure there is space for the "_1234" suffix + if (strlen($name) > 59) { + $name = substr($name, 0, 59); + } + $originalTTL = $this->connection->ldapCacheTTL; $this->connection->setConfiguration(['ldapCacheTTL' => 0]); if ($isUser) { @@ -857,7 +879,7 @@ class Access extends LDAPUtility { * utilizing the login filter. * * @param string $loginName - * @return int + * @return false|int */ public function countUsersByLoginName($loginName) { $loginName = $this->escapeFilterPart($loginName); @@ -868,17 +890,16 @@ class Access extends LDAPUtility { /** * @throws \Exception */ - public function fetchListOfUsers(string $filter, array $attr, int $limit = null, int $offset = null, bool $forceApplyAttributes = false): array { + public function fetchListOfUsers(string $filter, array $attr, ?int $limit = null, ?int $offset = null, bool $forceApplyAttributes = false): array { $ldapRecords = $this->searchUsers($filter, $attr, $limit, $offset); $recordsToUpdate = $ldapRecords; if (!$forceApplyAttributes) { - $isBackgroundJobModeAjax = $this->config - ->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'ajax'; + $isBackgroundJobModeAjax = $this->appConfig->getValueString('core', 'backgroundjobs_mode', 'ajax') === 'ajax'; $listOfDNs = array_reduce($ldapRecords, function ($listOfDNs, $entry) { $listOfDNs[] = $entry['dn'][0]; return $listOfDNs; }, []); - $idsByDn = $this->userMapper->getListOfIdsByDn($listOfDNs); + $idsByDn = $this->getUserMapper()->getListOfIdsByDn($listOfDNs); $recordsToUpdate = array_filter($ldapRecords, function ($record) use ($isBackgroundJobModeAjax, $idsByDn) { $newlyMapped = false; $uid = $idsByDn[$record['dn'][0]] ?? null; @@ -900,11 +921,10 @@ class Access extends LDAPUtility { * user object and requests it to process the freshly fetched attributes and * and their values * - * @param array $ldapRecords * @throws \Exception */ - public function batchApplyUserAttributes(array $ldapRecords) { - $displayNameAttribute = strtolower($this->connection->ldapUserDisplayName); + public function batchApplyUserAttributes(array $ldapRecords): void { + $displayNameAttribute = strtolower((string)$this->connection->ldapUserDisplayName); foreach ($ldapRecords as $userRecord) { if (!isset($userRecord[$displayNameAttribute])) { // displayName is obligatory @@ -919,7 +939,7 @@ class Access extends LDAPUtility { if ($user !== null) { $user->processAttributes($userRecord); } else { - \OC::$server->getLogger()->debug( + $this->logger->debug( "The ldap user manager returned null for $ocName", ['app' => 'user_ldap'] ); @@ -928,61 +948,38 @@ class Access extends LDAPUtility { } /** - * @param string $filter - * @param string|string[] $attr - * @param int $limit - * @param int $offset - * @return array + * @return array[] */ - public function fetchListOfGroups($filter, $attr, $limit = null, $offset = null) { + public function fetchListOfGroups(string $filter, array $attr, ?int $limit = null, ?int $offset = null): array { + $cacheKey = 'fetchListOfGroups_' . $filter . '_' . implode('-', $attr) . '_' . (string)$limit . '_' . (string)$offset; + $listOfGroups = $this->connection->getFromCache($cacheKey); + if (!is_null($listOfGroups)) { + return $listOfGroups; + } $groupRecords = $this->searchGroups($filter, $attr, $limit, $offset); - $listOfDNs = array_reduce($groupRecords, function ($listOfDNs, $entry) { - $listOfDNs[] = $entry['dn'][0]; - return $listOfDNs; - }, []); - $idsByDn = $this->groupMapper->getListOfIdsByDn($listOfDNs); - - array_walk($groupRecords, function ($record) use ($idsByDn) { - $newlyMapped = false; - $gid = $idsByDn[$record['dn'][0]] ?? null; - if ($gid === null) { - $gid = $this->dn2ocname($record['dn'][0], null, false, $newlyMapped, $record); - } - if (!$newlyMapped && is_string($gid)) { - $this->cacheGroupExists($gid); - } - }); - return $this->fetchList($groupRecords, $this->manyAttributes($attr)); + $listOfGroups = $this->fetchList($groupRecords, $this->manyAttributes($attr)); + $this->connection->writeToCache($cacheKey, $listOfGroups); + return $listOfGroups; } - /** - * @param array $list - * @param bool $manyAttributes - * @return array - */ - private function fetchList($list, $manyAttributes) { - if (is_array($list)) { - if ($manyAttributes) { - return $list; - } else { - $list = array_reduce($list, function ($carry, $item) { - $attribute = array_keys($item)[0]; - $carry[] = $item[$attribute][0]; - return $carry; - }, []); - return array_unique($list, SORT_LOCALE_STRING); - } + private function fetchList(array $list, bool $manyAttributes): array { + if ($manyAttributes) { + return $list; + } else { + $list = array_reduce($list, function ($carry, $item) { + $attribute = array_keys($item)[0]; + $carry[] = $item[$attribute][0]; + return $carry; + }, []); + return array_unique($list, SORT_LOCALE_STRING); } - - //error cause actually, maybe throw an exception in future. - return []; } /** * @throws ServerNotAvailableException */ - public function searchUsers(string $filter, array $attr = null, int $limit = null, int $offset = null): array { + public function searchUsers(string $filter, ?array $attr = null, ?int $limit = null, ?int $offset = null): array { $result = []; foreach ($this->connection->ldapBaseUsers as $base) { $result = array_merge($result, $this->search($filter, $base, $attr, $limit, $offset)); @@ -991,17 +988,14 @@ class Access extends LDAPUtility { } /** - * @param string $filter - * @param string|string[] $attr - * @param int $limit - * @param int $offset + * @param string[] $attr * @return false|int * @throws ServerNotAvailableException */ - public function countUsers($filter, $attr = ['dn'], $limit = null, $offset = null) { + public function countUsers(string $filter, array $attr = ['dn'], ?int $limit = null, ?int $offset = null) { $result = false; foreach ($this->connection->ldapBaseUsers as $base) { - $count = $this->count($filter, [$base], $attr, $limit, $offset); + $count = $this->count($filter, [$base], $attr, $limit ?? 0, $offset ?? 0); $result = is_int($count) ? (int)$result + $count : $result; } return $result; @@ -1010,16 +1004,12 @@ class Access extends LDAPUtility { /** * executes an LDAP search, optimized for Groups * - * @param string $filter the LDAP filter for the search - * @param string|string[] $attr optional, when a certain attribute shall be filtered out - * @param integer $limit - * @param integer $offset - * @return array with the search result + * @param ?string[] $attr optional, when certain attributes shall be filtered out * * Executes an LDAP search * @throws ServerNotAvailableException */ - public function searchGroups($filter, $attr = null, $limit = null, $offset = null) { + public function searchGroups(string $filter, ?array $attr = null, ?int $limit = null, ?int $offset = null): array { $result = []; foreach ($this->connection->ldapBaseGroups as $base) { $result = array_merge($result, $this->search($filter, $base, $attr, $limit, $offset)); @@ -1030,17 +1020,13 @@ class Access extends LDAPUtility { /** * returns the number of available groups * - * @param string $filter the LDAP search filter - * @param string[] $attr optional - * @param int|null $limit - * @param int|null $offset * @return int|bool * @throws ServerNotAvailableException */ - public function countGroups($filter, $attr = ['dn'], $limit = null, $offset = null) { + public function countGroups(string $filter, array $attr = ['dn'], ?int $limit = null, ?int $offset = null) { $result = false; foreach ($this->connection->ldapBaseGroups as $base) { - $count = $this->count($filter, [$base], $attr, $limit, $offset); + $count = $this->count($filter, [$base], $attr, $limit ?? 0, $offset ?? 0); $result = is_int($count) ? (int)$result + $count : $result; } return $result; @@ -1049,15 +1035,13 @@ class Access extends LDAPUtility { /** * returns the number of available objects on the base DN * - * @param int|null $limit - * @param int|null $offset * @return int|bool * @throws ServerNotAvailableException */ - public function countObjects($limit = null, $offset = null) { + public function countObjects(?int $limit = null, ?int $offset = null) { $result = false; foreach ($this->connection->ldapBase as $base) { - $count = $this->count('objectclass=*', [$base], ['dn'], $limit, $offset); + $count = $this->count('objectclass=*', [$base], ['dn'], $limit ?? 0, $offset ?? 0); $result = is_int($count) ? (int)$result + $count : $result; } return $result; @@ -1070,26 +1054,23 @@ class Access extends LDAPUtility { */ /** + * @param mixed[] $arguments * @return mixed * @throws \OC\ServerNotAvailableException */ - private function invokeLDAPMethod() { - $arguments = func_get_args(); - $command = array_shift($arguments); - $cr = array_shift($arguments); + private function invokeLDAPMethod(string $command, ...$arguments) { + if ($command == 'controlPagedResultResponse') { + // php no longer supports call-time pass-by-reference + // thus cannot support controlPagedResultResponse as the third argument + // is a reference + throw new \InvalidArgumentException('Invoker does not support controlPagedResultResponse, call LDAP Wrapper directly instead.'); + } if (!method_exists($this->ldap, $command)) { return null; } - array_unshift($arguments, $cr); - // php no longer supports call-time pass-by-reference - // thus cannot support controlPagedResultResponse as the third argument - // is a reference + array_unshift($arguments, $this->connection->getConnectionResource()); $doMethod = function () use ($command, &$arguments) { - if ($command == 'controlPagedResultResponse') { - throw new \InvalidArgumentException('Invoker does not support controlPagedResultResponse, call LDAP Wrapper directly instead.'); - } else { - return call_user_func_array([$this->ldap, $command], $arguments); - } + return call_user_func_array([$this->ldap, $command], $arguments); }; try { $ret = $doMethod(); @@ -1098,13 +1079,13 @@ class Access extends LDAPUtility { * Maybe implement exponential backoff? * This was enough to get solr indexer working which has large delays between LDAP fetches. */ - \OCP\Util::writeLog('user_ldap', "Connection lost on $command, attempting to reestablish.", ILogger::DEBUG); + $this->logger->debug("Connection lost on $command, attempting to reestablish.", ['app' => 'user_ldap']); $this->connection->resetConnectionResource(); $cr = $this->connection->getConnectionResource(); if (!$this->ldap->isResource($cr)) { // Seems like we didn't find any resource. - \OCP\Util::writeLog('user_ldap', "Could not $command, because resource is missing.", ILogger::DEBUG); + $this->logger->debug("Could not $command, because resource is missing.", ['app' => 'user_ldap']); throw $e; } @@ -1123,33 +1104,31 @@ class Access extends LDAPUtility { * @param int|null $limit optional, maximum results to be counted * @param int|null $offset optional, a starting point * @return array|false array with the search result as first value and pagedSearchOK as - * second | false if not successful + * second | false if not successful * @throws ServerNotAvailableException */ private function executeSearch( string $filter, string $base, ?array &$attr, - ?int $limit, - ?int $offset + ?int $pageSize, + ?int $offset, ) { // See if we have a resource, in case not cancel with message $cr = $this->connection->getConnectionResource(); - if (!$this->ldap->isResource($cr)) { - // Seems like we didn't find any resource. - // Return an empty array just like before. - \OCP\Util::writeLog('user_ldap', 'Could not search, because resource is missing.', ILogger::DEBUG); - return false; - } //check whether paged search should be attempted - $pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, (int)$limit, (int)$offset); + try { + [$pagedSearchOK, $pageSize, $cookie] = $this->initPagedSearch($filter, $base, $attr, (int)$pageSize, (int)$offset); + } catch (NoMoreResults $e) { + // beyond last results page + return false; + } - $sr = $this->invokeLDAPMethod('search', $cr, $base, $filter, $attr); - // cannot use $cr anymore, might have changed in the previous call! + $sr = $this->invokeLDAPMethod('search', $base, $filter, $attr, 0, 0, $pageSize, $cookie); $error = $this->ldap->errno($this->connection->getConnectionResource()); if (!$this->ldap->isResource($sr) || $error !== 0) { - \OCP\Util::writeLog('user_ldap', 'Attempt for Paging? ' . print_r($pagedSearchOK, true), ILogger::ERROR); + $this->logger->error('Attempt for Paging? ' . print_r($pagedSearchOK, true), ['app' => 'user_ldap']); return false; } @@ -1159,12 +1138,12 @@ class Access extends LDAPUtility { /** * processes an LDAP paged search operation * - * @param resource $sr the array containing the LDAP search resources + * @param \LDAP\Result|\LDAP\Result[] $sr the array containing the LDAP search resources * @param int $foundItems number of results in the single search operation * @param int $limit maximum results to be counted * @param bool $pagedSearchOK whether a paged search has been executed * @param bool $skipHandling required for paged search when cookies to - * prior results need to be gained + * prior results need to be gained * @return bool cookie validity, true if we have more pages, false otherwise. * @throws ServerNotAvailableException */ @@ -1173,9 +1152,9 @@ class Access extends LDAPUtility { int $foundItems, int $limit, bool $pagedSearchOK, - bool $skipHandling + bool $skipHandling, ): bool { - $cookie = null; + $cookie = ''; if ($pagedSearchOK) { $cr = $this->connection->getConnectionResource(); if ($this->ldap->controlPagedResultResponse($cr, $sr, $cookie)) { @@ -1187,14 +1166,14 @@ class Access extends LDAPUtility { return false; } // if count is bigger, then the server does not support - // paged search. Instead, he did a normal search. We set a + // paged search. Instead, they did a normal search. We set a // flag here, so the callee knows how to deal with it. if ($foundItems <= $limit) { $this->pagedSearchedSuccessful = true; } } else { - if (!is_null($limit) && (int)$this->connection->ldapPagingSize !== 0) { - \OC::$server->getLogger()->debug( + if ((int)$this->connection->ldapPagingSize !== 0) { + $this->logger->debug( 'Paged search was not available', ['app' => 'user_ldap'] ); @@ -1213,34 +1192,30 @@ class Access extends LDAPUtility { * * @param string $filter the LDAP filter for the search * @param array $bases an array containing the LDAP subtree(s) that shall be searched - * @param string|string[] $attr optional, array, one or more attributes that shall be - * retrieved. Results will according to the order in the array. - * @param int $limit optional, maximum results to be counted - * @param int $offset optional, a starting point + * @param ?string[] $attr optional, array, one or more attributes that shall be + * retrieved. Results will according to the order in the array. + * @param int $limit maximum results to be counted, 0 means no limit + * @param int $offset a starting point, defaults to 0 * @param bool $skipHandling indicates whether the pages search operation is - * completed + * completed * @return int|false Integer or false if the search could not be initialized * @throws ServerNotAvailableException */ private function count( string $filter, array $bases, - $attr = null, - ?int $limit = null, - ?int $offset = null, - bool $skipHandling = false + ?array $attr = null, + int $limit = 0, + int $offset = 0, + bool $skipHandling = false, ) { - \OC::$server->getLogger()->debug('Count filter: {filter}', [ + $this->logger->debug('Count filter: {filter}', [ 'app' => 'user_ldap', 'filter' => $filter ]); - if (!is_null($attr) && !is_array($attr)) { - $attr = [mb_strtolower($attr, 'UTF-8')]; - } - $limitPerPage = (int)$this->connection->ldapPagingSize; - if (!is_null($limit) && $limit < $limitPerPage && $limit > 0) { + if ($limit < $limitPerPage && $limit > 0) { $limitPerPage = $limit; } @@ -1254,7 +1229,7 @@ class Access extends LDAPUtility { if ($search === false) { return $counter > 0 ? $counter : false; } - list($sr, $pagedSearchOK) = $search; + [$sr, $pagedSearchOK] = $search; /* ++ Fixing RHDS searches with pages with zero results ++ * countEntriesInSearchResults() method signature changed @@ -1269,24 +1244,26 @@ class Access extends LDAPUtility { * Continue now depends on $hasMorePages value */ $continue = $pagedSearchOK && $hasMorePages; - } while ($continue && (is_null($limit) || $limit <= 0 || $limit > $counter)); + } while ($continue && ($limit <= 0 || $limit > $counter)); } return $counter; } /** - * @param resource $sr + * @param \LDAP\Result|\LDAP\Result[] $sr * @return int * @throws ServerNotAvailableException */ private function countEntriesInSearchResults($sr): int { - return (int)$this->invokeLDAPMethod('countEntries', $this->connection->getConnectionResource(), $sr); + return (int)$this->invokeLDAPMethod('countEntries', $sr); } /** * Executes an LDAP search * + * DN values in the result set are escaped as per RFC 2253 + * * @throws ServerNotAvailableException */ public function search( @@ -1295,17 +1272,13 @@ class Access extends LDAPUtility { ?array $attr = null, ?int $limit = null, ?int $offset = null, - bool $skipHandling = false + bool $skipHandling = false, ): array { $limitPerPage = (int)$this->connection->ldapPagingSize; if (!is_null($limit) && $limit < $limitPerPage && $limit > 0) { $limitPerPage = $limit; } - if (!is_null($attr) && !is_array($attr)) { - $attr = [mb_strtolower($attr, 'UTF-8')]; - } - /* ++ Fixing RHDS searches with pages with zero results ++ * As we can have pages with zero results and/or pages with less * than $limit results but with a still valid server 'cookie', @@ -1313,6 +1286,7 @@ class Access extends LDAPUtility { * $findings['count'] < $limit */ $findings = []; + $offset = $offset ?? 0; $savedoffset = $offset; $iFoundItems = 0; @@ -1321,8 +1295,7 @@ class Access extends LDAPUtility { if ($search === false) { return []; } - list($sr, $pagedSearchOK) = $search; - $cr = $this->connection->getConnectionResource(); + [$sr, $pagedSearchOK] = $search; if ($skipHandling) { //i.e. result do not need to be fetched, we just need the cookie @@ -1332,7 +1305,7 @@ class Access extends LDAPUtility { return []; } - $findings = array_merge($findings, $this->invokeLDAPMethod('getEntries', $cr, $sr)); + $findings = array_merge($findings, $this->invokeLDAPMethod('getEntries', $sr)); $iFoundItems = max($iFoundItems, $findings['count']); unset($findings['count']); @@ -1343,12 +1316,6 @@ class Access extends LDAPUtility { // resetting offset $offset = $savedoffset; - // if we're here, probably no connection resource is returned. - // to make Nextcloud behave nicely, we simply give back an empty array. - if (is_null($findings)) { - return []; - } - if (!is_null($attr)) { $selection = []; $i = 0; @@ -1356,7 +1323,7 @@ class Access extends LDAPUtility { if (!is_array($item)) { continue; } - $item = \OCP\Util::mb_array_change_key_case($item, MB_CASE_LOWER, 'UTF-8'); + $item = Util::mb_array_change_key_case($item, MB_CASE_LOWER, 'UTF-8'); foreach ($attr as $key) { if (isset($item[$key])) { if (is_array($item[$key]) && isset($item[$key]['count'])) { @@ -1389,7 +1356,7 @@ class Access extends LDAPUtility { && !is_null($limit) ) ) { - $findings = array_slice($findings, (int)$offset, $limit); + $findings = array_slice($findings, $offset, $limit); } return $findings; } @@ -1406,12 +1373,15 @@ class Access extends LDAPUtility { return $name; } - // Transliteration to ASCII - $transliterated = @iconv('UTF-8', 'ASCII//TRANSLIT', $name); - if ($transliterated !== false) { - // depending on system config iconv can work or not - $name = $transliterated; - } + // Use htmlentities to get rid of accents + $name = htmlentities($name, ENT_NOQUOTES, 'UTF-8'); + + // Remove accents + $name = preg_replace('#&([A-Za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $name); + // Remove ligatures + $name = preg_replace('#&([A-Za-z]{2})(?:lig);#', '\1', $name); + // Remove unknown leftover entities + $name = preg_replace('#&[^;]+;#', '', $name); // Replacements $name = str_replace(' ', '_', $name); @@ -1419,6 +1389,10 @@ class Access extends LDAPUtility { // Every remaining disallowed characters will be removed $name = preg_replace('/[^a-zA-Z0-9_.@-]/u', '', $name); + if (strlen($name) > 64) { + $name = hash('sha256', $name, false); + } + if ($name === '') { throw new \InvalidArgumentException('provided name template for username does not contain any allowed characters'); } @@ -1426,6 +1400,18 @@ class Access extends LDAPUtility { return $name; } + public function sanitizeGroupIDCandidate(string $candidate): string { + $candidate = trim($candidate); + if (strlen($candidate) > 64) { + $candidate = hash('sha256', $candidate, false); + } + if ($candidate === '') { + throw new \InvalidArgumentException('provided name template for username does not contain any allowed characters'); + } + + return $candidate; + } + /** * escapes (user provided) parts for LDAP filter * @@ -1439,9 +1425,7 @@ class Access extends LDAPUtility { $asterisk = '*'; $input = mb_substr($input, 1, null, 'UTF-8'); } - $search = ['*', '\\', '(', ')']; - $replace = ['\\*', '\\\\', '\\(', '\\)']; - return $asterisk . str_replace($search, $replace, $input); + return $asterisk . ldap_escape($input, '', LDAP_ESCAPE_FILTER); } /** @@ -1459,7 +1443,7 @@ class Access extends LDAPUtility { * * @param string[] $filters the filters to connect * @return string the combined filter - * Combines Filter arguments with OR + * Combines Filter arguments with OR */ public function combineFilterWithOr($filters) { return $this->combineFilter($filters, '|'); @@ -1472,7 +1456,7 @@ class Access extends LDAPUtility { * @param string $operator either & or | * @return string the combined filter */ - private function combineFilter($filters, $operator) { + private function combineFilter(array $filters, string $operator): string { $combinedFilter = '(' . $operator; foreach ($filters as $filter) { if ($filter !== '' && $filter[0] !== '(') { @@ -1490,7 +1474,7 @@ class Access extends LDAPUtility { * @param string $search the search term * @return string the final filter part to use in LDAP searches */ - public function getFilterPartForUserSearch($search) { + public function getFilterPartForUserSearch($search): string { return $this->getFilterPartForSearch($search, $this->connection->ldapAttributesForUserSearch, $this->connection->ldapUserDisplayName); @@ -1502,7 +1486,7 @@ class Access extends LDAPUtility { * @param string $search the search term * @return string the final filter part to use in LDAP searches */ - public function getFilterPartForGroupSearch($search) { + public function getFilterPartForGroupSearch($search): string { return $this->getFilterPartForSearch($search, $this->connection->ldapAttributesForGroupSearch, $this->connection->ldapGroupDisplayName); @@ -1513,12 +1497,12 @@ class Access extends LDAPUtility { * string into single words * * @param string $search the search term - * @param string[] $searchAttributes needs to have at least two attributes, - * otherwise it does not make sense :) + * @param string[]|null|'' $searchAttributes needs to have at least two attributes, + * otherwise it does not make sense :) * @return string the final filter part to use in LDAP searches * @throws DomainException */ - private function getAdvancedFilterPartForSearch($search, $searchAttributes) { + private function getAdvancedFilterPartForSearch(string $search, $searchAttributes): string { if (!is_array($searchAttributes) || count($searchAttributes) < 2) { throw new DomainException('searchAttributes must be an array with at least two string'); } @@ -1540,15 +1524,15 @@ class Access extends LDAPUtility { * creates a filter part for searches * * @param string $search the search term - * @param string[]|null $searchAttributes + * @param string[]|null|'' $searchAttributes * @param string $fallbackAttribute a fallback attribute in case the user - * did not define search attributes. Typically the display name attribute. + * did not define search attributes. Typically the display name attribute. * @return string the final filter part to use in LDAP searches */ - private function getFilterPartForSearch($search, $searchAttributes, $fallbackAttribute) { + private function getFilterPartForSearch(string $search, $searchAttributes, string $fallbackAttribute): string { $filter = []; $haveMultiSearchAttributes = (is_array($searchAttributes) && count($searchAttributes) > 0); - if ($haveMultiSearchAttributes && strpos(trim($search), ' ') !== false) { + if ($haveMultiSearchAttributes && str_contains(trim($search), ' ')) { try { return $this->getAdvancedFilterPartForSearch($search, $searchAttributes); } catch (DomainException $e) { @@ -1556,14 +1540,23 @@ class Access extends LDAPUtility { } } + $originalSearch = $search; $search = $this->prepareSearchTerm($search); if (!is_array($searchAttributes) || count($searchAttributes) === 0) { if ($fallbackAttribute === '') { return ''; } + // wildcards don't work with some attributes + if ($originalSearch !== '') { + $filter[] = $fallbackAttribute . '=' . $originalSearch; + } $filter[] = $fallbackAttribute . '=' . $search; } else { foreach ($searchAttributes as $attribute) { + // wildcards don't work with some attributes + if ($originalSearch !== '') { + $filter[] = $attribute . '=' . $originalSearch; + } $filter[] = $attribute . '=' . $search; } } @@ -1577,11 +1570,9 @@ class Access extends LDAPUtility { * returns the search term depending on whether we are allowed * list users found by ldap with the current input appended by * a * - * - * @return string */ - private function prepareSearchTerm($term) { - $config = \OC::$server->getConfig(); + private function prepareSearchTerm(string $term): string { + $config = Server::get(IConfig::class); $allowEnum = $config->getAppValue('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes'); @@ -1596,10 +1587,8 @@ class Access extends LDAPUtility { /** * returns the filter used for counting users - * - * @return string */ - public function getFilterForUserCount() { + public function getFilterForUserCount(): string { $filter = $this->combineFilterWithAnd([ $this->connection->ldapUserFilter, $this->connection->ldapUserDisplayName . '=*' @@ -1608,17 +1597,15 @@ class Access extends LDAPUtility { return $filter; } - /** - * @param string $name - * @param string $password - * @return bool - */ - public function areCredentialsValid($name, $password) { + public function areCredentialsValid(string $name, string $password): bool { + if ($name === '' || $password === '') { + return false; + } $name = $this->helper->DNasBaseParameter($name); $testConnection = clone $this->connection; $credentials = [ 'ldapAgentName' => $name, - 'ldapAgentPassword' => $password + 'ldapAgentPassword' => $password, ]; if (!$testConnection->setConfiguration($credentials)) { return false; @@ -1670,7 +1657,7 @@ class Access extends LDAPUtility { $filter = $uuidAttr . '=' . $uuid; $result = $this->searchUsers($filter, ['dn'], 2); - if (is_array($result) && isset($result[0]) && isset($result[0]['dn']) && count($result) === 1) { + if (isset($result[0]['dn']) && count($result) === 1) { // we put the count into account to make sure that this is // really unique return $result[0]['dn'][0]; @@ -1689,7 +1676,7 @@ class Access extends LDAPUtility { * @return bool true on success, false otherwise * @throws ServerNotAvailableException */ - private function detectUuidAttribute($dn, $isUser = true, $force = false, array $ldapRecord = null) { + private function detectUuidAttribute(string $dn, bool $isUser = true, bool $force = false, ?array $ldapRecord = null): bool { if ($isUser) { $uuidAttr = 'ldapUuidUserAttribute'; $uuidOverride = $this->connection->ldapExpertUUIDUserAttr; @@ -1707,7 +1694,7 @@ class Access extends LDAPUtility { } $attribute = $this->connection->getFromCache($uuidAttr); - if (!$attribute === null) { + if ($attribute !== null) { $this->connection->$uuidAttr = $attribute; return true; } @@ -1724,7 +1711,7 @@ class Access extends LDAPUtility { $value = $this->readAttribute($dn, $attribute); if (is_array($value) && isset($value[0]) && !empty($value[0])) { - \OC::$server->getLogger()->debug( + $this->logger->debug( 'Setting {attribute} as {subject}', [ 'app' => 'user_ldap', @@ -1737,19 +1724,17 @@ class Access extends LDAPUtility { return true; } } - \OC::$server->getLogger()->debug('Could not autodetect the UUID attribute', ['app' => 'user_ldap']); + $this->logger->debug('Could not autodetect the UUID attribute', ['app' => 'user_ldap']); return false; } /** - * @param string $dn - * @param bool $isUser - * @param null $ldapRecord - * @return bool|string + * @param array|null $ldapRecord + * @return false|string * @throws ServerNotAvailableException */ - public function getUUID($dn, $isUser = true, $ldapRecord = null) { + public function getUUID(string $dn, bool $isUser = true, ?array $ldapRecord = null) { if ($isUser) { $uuidAttr = 'ldapUuidUserAttribute'; $uuidOverride = $this->connection->ldapExpertUUIDUserAttr; @@ -1761,7 +1746,7 @@ class Access extends LDAPUtility { $uuid = false; if ($this->detectUuidAttribute($dn, $isUser, false, $ldapRecord)) { $attr = $this->connection->$uuidAttr; - $uuid = isset($ldapRecord[$attr]) ? $ldapRecord[$attr] : $this->readAttribute($dn, $attr); + $uuid = $ldapRecord[$attr] ?? $this->readAttribute($dn, $attr); if (!is_array($uuid) && $uuidOverride !== '' && $this->detectUuidAttribute($dn, $isUser, true, $ldapRecord)) { @@ -1769,7 +1754,7 @@ class Access extends LDAPUtility { ? $ldapRecord[$this->connection->$uuidAttr] : $this->readAttribute($dn, $this->connection->$uuidAttr); } - if (is_array($uuid) && isset($uuid[0]) && !empty($uuid[0])) { + if (is_array($uuid) && !empty($uuid[0])) { $uuid = $uuid[0]; } } @@ -1780,11 +1765,10 @@ class Access extends LDAPUtility { /** * converts a binary ObjectGUID into a string representation * - * @param string $oguid the ObjectGUID in it's binary form as retrieved from AD - * @return string + * @param string $oguid the ObjectGUID in its binary form as retrieved from AD * @link https://www.php.net/manual/en/function.ldap-get-values-len.php#73198 */ - private function convertObjectGUID2Str($oguid) { + private function convertObjectGUID2Str(string $oguid): string { $hex_guid = bin2hex($oguid); $hex_guid_to_guid_str = ''; for ($k = 1; $k <= 4; ++$k) { @@ -1807,18 +1791,12 @@ class Access extends LDAPUtility { /** * the first three blocks of the string-converted GUID happen to be in * reverse order. In order to use it in a filter, this needs to be - * corrected. Furthermore the dashes need to be replaced and \\ preprended - * to every two hax figures. + * corrected. Furthermore the dashes need to be replaced and \\ prepended + * to every two hex figures. * * If an invalid string is passed, it will be returned without change. - * - * @param string $guid - * @return string */ - public function formatGuid2ForFilterUser($guid) { - if (!is_string($guid)) { - throw new \InvalidArgumentException('String expected'); - } + public function formatGuid2ForFilterUser(string $guid): string { $blocks = explode('-', $guid); if (count($blocks) !== 5) { /* @@ -1832,9 +1810,9 @@ class Access extends LDAPUtility { * an exception here would kill the experience for a valid, acting * user. Instead we write a log message. */ - \OC::$server->getLogger()->info( - 'Passed string does not resemble a valid GUID. Known UUID ' . - '({uuid}) probably does not match UUID configuration.', + $this->logger->info( + 'Passed string does not resemble a valid GUID. Known UUID ' + . '({uuid}) probably does not match UUID configuration.', ['app' => 'user_ldap', 'uuid' => $guid] ); return $guid; @@ -1919,11 +1897,9 @@ class Access extends LDAPUtility { /** * checks if the given DN is part of the given base DN(s) * - * @param string $dn the DN * @param string[] $bases array containing the allowed base DN or DNs - * @return bool */ - public function isDNPartOfBase($dn, $bases) { + public function isDNPartOfBase(string $dn, array $bases): bool { $belongsToBase = false; $bases = $this->helper->sanitizeDN($bases); @@ -1944,12 +1920,10 @@ class Access extends LDAPUtility { * * @throws ServerNotAvailableException */ - private function abandonPagedSearch() { + private function abandonPagedSearch(): void { if ($this->lastCookie === '') { return; } - $cr = $this->connection->getConnectionResource(); - $this->invokeLDAPMethod('controlPagedResult', $cr, 0, false); $this->getPagedSearchResultState(); $this->lastCookie = ''; } @@ -1966,7 +1940,7 @@ class Access extends LDAPUtility { * @return bool */ public function hasMoreResults() { - if (empty($this->lastCookie) && $this->lastCookie !== '0') { + if ($this->lastCookie === '') { // as in RFC 2696, when all results are returned, the cookie will // be empty. return false; @@ -1990,63 +1964,67 @@ class Access extends LDAPUtility { * Prepares a paged search, if possible * * @param string $filter the LDAP filter for the search - * @param string[] $bases an array containing the LDAP subtree(s) that shall be searched + * @param string $base the LDAP subtree that shall be searched * @param string[] $attr optional, when a certain attribute shall be filtered outside * @param int $limit * @param int $offset - * @return bool|true + * @return array{bool, int, string} * @throws ServerNotAvailableException + * @throws NoMoreResults */ private function initPagedSearch( string $filter, string $base, ?array $attr, - int $limit, - int $offset - ): bool { + int $pageSize, + int $offset, + ): array { $pagedSearchOK = false; - if ($limit !== 0) { - \OC::$server->getLogger()->debug( - 'initializing paged search for filter {filter}, base {base}, attr {attr}, limit {limit}, offset {offset}', + if ($pageSize !== 0) { + $this->logger->debug( + 'initializing paged search for filter {filter}, base {base}, attr {attr}, pageSize {pageSize}, offset {offset}', [ 'app' => 'user_ldap', 'filter' => $filter, 'base' => $base, 'attr' => $attr, - 'limit' => $limit, + 'pageSize' => $pageSize, 'offset' => $offset ] ); - //get the cookie from the search for the previous search, required by LDAP - if (empty($this->lastCookie) && $this->lastCookie !== "0" && ($offset > 0)) { + // Get the cookie from the search for the previous search, required by LDAP + if (($this->lastCookie === '') && ($offset > 0)) { // no cookie known from a potential previous search. We need // to start from 0 to come to the desired page. cookie value // of '0' is valid, because 389ds - $reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit; - $this->search($filter, $base, $attr, $limit, $reOffset, true); + $defaultPageSize = (int)$this->connection->ldapPagingSize; + if ($offset < $defaultPageSize) { + /* Make a search with offset as page size and dismiss the result, to init the cookie */ + $this->search($filter, $base, $attr, $offset, 0, true); + } else { + /* Make a search for previous page and dismiss the result, to init the cookie */ + $reOffset = $offset - $defaultPageSize; + $this->search($filter, $base, $attr, $defaultPageSize, $reOffset, true); + } if (!$this->hasMoreResults()) { // when the cookie is reset with != 0 offset, there are no further // results, so stop. - return false; + throw new NoMoreResults(); } } if ($this->lastCookie !== '' && $offset === 0) { //since offset = 0, this is a new search. We abandon other searches that might be ongoing. $this->abandonPagedSearch(); } - $pagedSearchOK = true === $this->invokeLDAPMethod( - 'controlPagedResult', $this->connection->getConnectionResource(), $limit, false - ); - if ($pagedSearchOK) { - \OC::$server->getLogger()->debug('Ready for a paged search', ['app' => 'user_ldap']); - } + $this->logger->debug('Ready for a paged search', ['app' => 'user_ldap']); + return [true, $pageSize, $this->lastCookie]; /* ++ Fixing RHDS searches with pages with zero results ++ - * We coudn't get paged searches working with our RHDS for login ($limit = 0), + * We couldn't get paged searches working with our RHDS for login ($limit = 0), * due to pages with zero results. * So we added "&& !empty($this->lastCookie)" to this test to ignore pagination * if we don't have a previous paged search. */ - } elseif ($limit === 0 && !empty($this->lastCookie)) { + } elseif ($this->lastCookie !== '') { // a search without limit was requested. However, if we do use // Paged Search once, we always must do it. This requires us to // initialize it with the configured page size. @@ -2054,12 +2032,10 @@ class Access extends LDAPUtility { // in case someone set it to 0 … use 500, otherwise no results will // be returned. $pageSize = (int)$this->connection->ldapPagingSize > 0 ? (int)$this->connection->ldapPagingSize : 500; - $pagedSearchOK = $this->invokeLDAPMethod('controlPagedResult', - $this->connection->getConnectionResource(), - $pageSize, false); + return [true, $pageSize, $this->lastCookie]; } - return $pagedSearchOK; + return [false, $pageSize, '']; } /** diff --git a/apps/user_ldap/lib/AccessFactory.php b/apps/user_ldap/lib/AccessFactory.php index 96f2655f046..da114c467a7 100644 --- a/apps/user_ldap/lib/AccessFactory.php +++ b/apps/user_ldap/lib/AccessFactory.php @@ -1,66 +1,44 @@ <?php + /** - * @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; use OCA\User_LDAP\User\Manager; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IAppConfig; use OCP\IConfig; use OCP\IUserManager; +use OCP\Server; +use Psr\Log\LoggerInterface; class AccessFactory { - /** @var ILDAPWrapper */ - protected $ldap; - /** @var Manager */ - protected $userManager; - /** @var Helper */ - protected $helper; - /** @var IConfig */ - protected $config; - /** @var IUserManager */ - private $ncUserManager; public function __construct( - ILDAPWrapper $ldap, - Manager $userManager, - Helper $helper, - IConfig $config, - IUserManager $ncUserManager) { - $this->ldap = $ldap; - $this->userManager = $userManager; - $this->helper = $helper; - $this->config = $config; - $this->ncUserManager = $ncUserManager; + private ILDAPWrapper $ldap, + private Helper $helper, + private IConfig $config, + private IAppConfig $appConfig, + private IUserManager $ncUserManager, + private LoggerInterface $logger, + private IEventDispatcher $dispatcher, + ) { } - public function get(Connection $connection) { + public function get(Connection $connection): Access { + /* Each Access instance gets its own Manager instance, see OCA\User_LDAP\AppInfo\Application::register() */ return new Access( - $connection, $this->ldap, - $this->userManager, + $connection, + Server::get(Manager::class), $this->helper, $this->config, - $this->ncUserManager + $this->ncUserManager, + $this->logger, + $this->appConfig, + $this->dispatcher, ); } } diff --git a/apps/user_ldap/lib/AppInfo/Application.php b/apps/user_ldap/lib/AppInfo/Application.php index 8dad63fbaf8..70b7920f7ab 100644 --- a/apps/user_ldap/lib/AppInfo/Application.php +++ b/apps/user_ldap/lib/AppInfo/Application.php @@ -1,29 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2017 Roger Szabo <roger.szabo@web.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roger Szabo <roger.szabo@web.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\AppInfo; use Closure; @@ -37,7 +17,11 @@ use OCA\User_LDAP\Handler\ExtStorageConfigHandler; use OCA\User_LDAP\Helper; use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\LDAP; +use OCA\User_LDAP\LoginListener; use OCA\User_LDAP\Notification\Notifier; +use OCA\User_LDAP\SetupChecks\LdapConnection; +use OCA\User_LDAP\SetupChecks\LdapInvalidUuids; +use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User_Proxy; use OCA\User_LDAP\UserPluginManager; use OCP\AppFramework\App; @@ -46,11 +30,19 @@ use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; use OCP\AppFramework\IAppContainer; use OCP\EventDispatcher\IEventDispatcher; +use OCP\IAvatarManager; +use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; +use OCP\Image; use OCP\IServerContainer; +use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use OCP\Share\IManager as IShareManager; +use OCP\User\Events\PostLoginEvent; +use OCP\Util; +use Psr\Container\ContainerInterface; +use Psr\Log\LoggerInterface; class Application extends App implements IBootstrap { public function __construct() { @@ -75,37 +67,61 @@ class Application extends App implements IBootstrap { ); }); - $container->registerService(ILDAPWrapper::class, function () { - return new LDAP(); + $container->registerService(ILDAPWrapper::class, function (IAppContainer $appContainer) { + /** @var IServerContainer $server */ + $server = $appContainer->get(IServerContainer::class); + + return new LDAP( + $server->getConfig()->getSystemValueString('ldap_log_file') + ); }); } public function register(IRegistrationContext $context): void { + $context->registerNotifierService(Notifier::class); + + $context->registerService( + Manager::class, + function (ContainerInterface $c) { + return new Manager( + $c->get(IConfig::class), + $c->get(LoggerInterface::class), + $c->get(IAvatarManager::class), + $c->get(Image::class), + $c->get(IUserManager::class), + $c->get(INotificationManager::class), + $c->get(IShareManager::class), + ); + }, + // the instance is specific to a lazy bound Access instance, thus cannot be shared. + false + ); + $context->registerEventListener(PostLoginEvent::class, LoginListener::class); + $context->registerSetupCheck(LdapInvalidUuids::class); + $context->registerSetupCheck(LdapConnection::class); } public function boot(IBootContext $context): void { $context->injectFn(function ( INotificationManager $notificationManager, IAppContainer $appContainer, - EventDispatcherInterface $legacyDispatcher, IEventDispatcher $dispatcher, + IUserManager $userManager, IGroupManager $groupManager, User_Proxy $userBackend, Group_Proxy $groupBackend, - Helper $helper - ) { + Helper $helper, + ): void { $configPrefixes = $helper->getServerConfigurationPrefixes(true); if (count($configPrefixes) > 0) { - $notificationManager->registerNotifierService(Notifier::class); - $userPluginManager = $appContainer->get(UserPluginManager::class); $groupPluginManager = $appContainer->get(GroupPluginManager::class); - \OC_User::useBackend($userBackend); + $userManager->registerBackend($userBackend); $groupManager->addBackend($groupBackend); $userBackendRegisteredEvent = new UserBackendRegistered($userBackend, $userPluginManager); - $legacyDispatcher->dispatch('OCA\\User_LDAP\\User\\User::postLDAPBackendAdded', $userBackendRegisteredEvent); + $dispatcher->dispatch('OCA\\User_LDAP\\User\\User::postLDAPBackendAdded', $userBackendRegisteredEvent); $dispatcher->dispatchTyped($userBackendRegisteredEvent); $groupBackendRegisteredEvent = new GroupBackendRegistered($groupBackend, $groupPluginManager); $dispatcher->dispatchTyped($groupBackendRegisteredEvent); @@ -114,7 +130,7 @@ class Application extends App implements IBootstrap { $context->injectFn(Closure::fromCallable([$this, 'registerBackendDependents'])); - \OCP\Util::connectHook( + Util::connectHook( '\OCA\Files_Sharing\API\Server2Server', 'preLoginNameUsedAsUserName', '\OCA\User_LDAP\Helper', @@ -122,10 +138,10 @@ class Application extends App implements IBootstrap { ); } - private function registerBackendDependents(IAppContainer $appContainer, EventDispatcherInterface $dispatcher) { + private function registerBackendDependents(IAppContainer $appContainer, IEventDispatcher $dispatcher): void { $dispatcher->addListener( 'OCA\\Files_External::loadAdditionalBackends', - function () use ($appContainer) { + function () use ($appContainer): void { $storagesBackendService = $appContainer->get(BackendService::class); $storagesBackendService->registerConfigHandler('home', function () use ($appContainer) { return $appContainer->get(ExtStorageConfigHandler::class); diff --git a/apps/user_ldap/lib/BackendUtility.php b/apps/user_ldap/lib/BackendUtility.php index a4eb739ab66..88d7311cde0 100644 --- a/apps/user_ldap/lib/BackendUtility.php +++ b/apps/user_ldap/lib/BackendUtility.php @@ -1,38 +1,19 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; abstract class BackendUtility { - protected $access; - /** * constructor, make sure the subclasses call this one! * @param Access $access an instance of Access for LDAP interaction */ - public function __construct(Access $access) { - $this->access = $access; + public function __construct( + protected Access $access, + ) { } } diff --git a/apps/user_ldap/lib/Command/CheckGroup.php b/apps/user_ldap/lib/Command/CheckGroup.php new file mode 100644 index 00000000000..9c7ccb9d3b3 --- /dev/null +++ b/apps/user_ldap/lib/Command/CheckGroup.php @@ -0,0 +1,162 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Command; + +use OCA\User_LDAP\Group_Proxy; +use OCA\User_LDAP\Helper; +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\Service\UpdateGroupsService; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Group\Events\GroupCreatedEvent; +use OCP\Group\Events\UserAddedEvent; +use OCP\Group\Events\UserRemovedEvent; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class CheckGroup extends Command { + public function __construct( + private UpdateGroupsService $service, + protected Group_Proxy $backend, + protected Helper $helper, + protected GroupMapping $mapping, + protected IEventDispatcher $dispatcher, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('ldap:check-group') + ->setDescription('checks whether a group exists on LDAP.') + ->addArgument( + 'ocName', + InputArgument::REQUIRED, + 'the group name as used in Nextcloud, or the LDAP DN' + ) + ->addOption( + 'force', + null, + InputOption::VALUE_NONE, + 'ignores disabled LDAP configuration' + ) + ->addOption( + 'update', + null, + InputOption::VALUE_NONE, + 'syncs values from LDAP' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $this->dispatcher->addListener(GroupCreatedEvent::class, fn ($event) => $this->onGroupCreatedEvent($event, $output)); + $this->dispatcher->addListener(UserAddedEvent::class, fn ($event) => $this->onUserAddedEvent($event, $output)); + $this->dispatcher->addListener(UserRemovedEvent::class, fn ($event) => $this->onUserRemovedEvent($event, $output)); + try { + $this->assertAllowed($input->getOption('force')); + $gid = $input->getArgument('ocName'); + $wasMapped = $this->groupWasMapped($gid); + if ($this->backend->getLDAPAccess($gid)->stringResemblesDN($gid)) { + $groupname = $this->backend->dn2GroupName($gid); + if ($groupname !== false) { + $gid = $groupname; + } + } + /* Search to trigger mapping for new groups */ + $this->backend->getGroups($gid); + $exists = $this->backend->groupExistsOnLDAP($gid, true); + if ($exists === true) { + $output->writeln('The group is still available on LDAP.'); + if ($input->getOption('update')) { + $this->backend->getLDAPAccess($gid)->connection->clearCache(); + if ($wasMapped) { + $this->service->handleKnownGroups([$gid]); + } else { + $this->service->handleCreatedGroups([$gid]); + } + } + return self::SUCCESS; + } + + if ($wasMapped) { + $output->writeln('The group does not exist on LDAP anymore.'); + if ($input->getOption('update')) { + $this->backend->getLDAPAccess($gid)->connection->clearCache(); + $this->service->handleRemovedGroups([$gid]); + } + return self::SUCCESS; + } + + throw new \Exception('The given group is not a recognized LDAP group.'); + } catch (\Exception $e) { + $output->writeln('<error>' . $e->getMessage() . '</error>'); + return self::FAILURE; + } + } + + public function onGroupCreatedEvent(GroupCreatedEvent $event, OutputInterface $output): void { + $output->writeln('<info>The group ' . $event->getGroup()->getGID() . ' was added to Nextcloud with ' . $event->getGroup()->count() . ' users</info>'); + } + + public function onUserAddedEvent(UserAddedEvent $event, OutputInterface $output): void { + $user = $event->getUser(); + $group = $event->getGroup(); + $output->writeln('<info>The user ' . $user->getUID() . ' was added to group ' . $group->getGID() . '</info>'); + } + + public function onUserRemovedEvent(UserRemovedEvent $event, OutputInterface $output): void { + $user = $event->getUser(); + $group = $event->getGroup(); + $output->writeln('<info>The user ' . $user->getUID() . ' was removed from group ' . $group->getGID() . '</info>'); + } + + /** + * checks whether a group is actually mapped + * @param string $gid the groupname as passed to the command + */ + protected function groupWasMapped(string $gid): bool { + $dn = $this->mapping->getDNByName($gid); + if ($dn !== false) { + return true; + } + $name = $this->mapping->getNameByDN($gid); + return $name !== false; + } + + /** + * checks whether the setup allows reliable checking of LDAP group existence + * @throws \Exception + */ + protected function assertAllowed(bool $force): void { + if ($this->helper->haveDisabledConfigurations() && !$force) { + throw new \Exception('Cannot check group existence, because ' + . 'disabled LDAP configurations are present.'); + } + + // we don't check ldapUserCleanupInterval from config.php because this + // action is triggered manually, while the setting only controls the + // background job. + } + + private function updateGroup(string $gid, OutputInterface $output, bool $wasMapped): void { + try { + if ($wasMapped) { + $this->service->handleKnownGroups([$gid]); + } else { + $this->service->handleCreatedGroups([$gid]); + } + } catch (\Exception $e) { + $output->writeln('<error>Error while trying to lookup and update attributes from LDAP</error>'); + } + } +} diff --git a/apps/user_ldap/lib/Command/CheckUser.php b/apps/user_ldap/lib/Command/CheckUser.php index 5314cac365a..8bb26ce3d0e 100644 --- a/apps/user_ldap/lib/Command/CheckUser.php +++ b/apps/user_ldap/lib/Command/CheckUser.php @@ -1,29 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Command; use OCA\User_LDAP\Helper; @@ -37,47 +18,30 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class CheckUser extends Command { - /** @var User_Proxy */ - protected $backend; - - /** @var Helper */ - protected $helper; - - /** @var DeletedUsersIndex */ - protected $dui; - - /** @var UserMapping */ - protected $mapping; - - /** - * @param User_Proxy $uBackend - * @param Helper $helper - * @param DeletedUsersIndex $dui - * @param UserMapping $mapping - */ - public function __construct(User_Proxy $uBackend, Helper $helper, DeletedUsersIndex $dui, UserMapping $mapping) { - $this->backend = $uBackend; - $this->helper = $helper; - $this->dui = $dui; - $this->mapping = $mapping; + public function __construct( + protected User_Proxy $backend, + protected Helper $helper, + protected DeletedUsersIndex $dui, + protected UserMapping $mapping, + ) { parent::__construct(); } - protected function configure() { + protected function configure(): void { $this ->setName('ldap:check-user') ->setDescription('checks whether a user exists on LDAP.') ->addArgument( - 'ocName', - InputArgument::REQUIRED, - 'the user name as used in Nextcloud' - ) + 'ocName', + InputArgument::REQUIRED, + 'the user name as used in Nextcloud, or the LDAP DN' + ) ->addOption( - 'force', - null, - InputOption::VALUE_NONE, - 'ignores disabled LDAP configuration' - ) + 'force', + null, + InputOption::VALUE_NONE, + 'ignores disabled LDAP configuration' + ) ->addOption( 'update', null, @@ -89,50 +53,53 @@ class CheckUser extends Command { protected function execute(InputInterface $input, OutputInterface $output): int { try { + $this->assertAllowed($input->getOption('force')); $uid = $input->getArgument('ocName'); - $this->isAllowed($input->getOption('force')); - $this->confirmUserIsMapped($uid); - $exists = $this->backend->userExistsOnLDAP($uid); + if ($this->backend->getLDAPAccess($uid)->stringResemblesDN($uid)) { + $username = $this->backend->dn2UserName($uid); + if ($username !== false) { + $uid = $username; + } + } + $wasMapped = $this->userWasMapped($uid); + $exists = $this->backend->userExistsOnLDAP($uid, true); if ($exists === true) { $output->writeln('The user is still available on LDAP.'); if ($input->getOption('update')) { $this->updateUser($uid, $output); } - return 0; + return self::SUCCESS; } - $this->dui->markUser($uid); - $output->writeln('The user does not exists on LDAP anymore.'); - $output->writeln('Clean up the user\'s remnants by: ./occ user:delete "' - . $uid . '"'); - return 0; + if ($wasMapped) { + $this->dui->markUser($uid); + $output->writeln('The user does not exists on LDAP anymore.'); + $output->writeln('Clean up the user\'s remnants by: ./occ user:delete "' + . $uid . '"'); + return self::SUCCESS; + } + + throw new \Exception('The given user is not a recognized LDAP user.'); } catch (\Exception $e) { - $output->writeln('<error>' . $e->getMessage(). '</error>'); - return 1; + $output->writeln('<error>' . $e->getMessage() . '</error>'); + return self::FAILURE; } } /** * checks whether a user is actually mapped * @param string $ocName the username as used in Nextcloud - * @throws \Exception - * @return true */ - protected function confirmUserIsMapped($ocName) { + protected function userWasMapped(string $ocName): bool { $dn = $this->mapping->getDNByName($ocName); - if ($dn === false) { - throw new \Exception('The given user is not a recognized LDAP user.'); - } - - return true; + return $dn !== false; } /** * checks whether the setup allows reliable checking of LDAP user existence * @throws \Exception - * @return true */ - protected function isAllowed($force) { + protected function assertAllowed(bool $force): void { if ($this->helper->haveDisabledConfigurations() && !$force) { throw new \Exception('Cannot check user existence, because ' . 'disabled LDAP configurations are present.'); @@ -141,8 +108,6 @@ class CheckUser extends Command { // we don't check ldapUserCleanupInterval from config.php because this // action is triggered manually, while the setting only controls the // background job. - - return true; } private function updateUser(string $uid, OutputInterface $output): void { @@ -151,7 +116,8 @@ class CheckUser extends Command { $attrs = $access->userManager->getAttributes(); $user = $access->userManager->get($uid); $avatarAttributes = $access->getConnection()->resolveRule('avatar'); - $result = $access->search('objectclass=*', $user->getDN(), $attrs, 1, 0); + $baseDn = $this->helper->DNasBaseParameter($user->getDN()); + $result = $access->search('objectclass=*', $baseDn, $attrs, 1, 0); foreach ($result[0] as $attribute => $valueSet) { $output->writeln(' ' . $attribute . ': '); foreach ($valueSet as $value) { diff --git a/apps/user_ldap/lib/Command/CreateEmptyConfig.php b/apps/user_ldap/lib/Command/CreateEmptyConfig.php index 4d88bf80c5e..7c381cf431f 100644 --- a/apps/user_ldap/lib/Command/CreateEmptyConfig.php +++ b/apps/user_ldap/lib/Command/CreateEmptyConfig.php @@ -1,29 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Martin Konrad <konrad@frib.msu.edu> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Command; use OCA\User_LDAP\Configuration; @@ -34,18 +15,13 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class CreateEmptyConfig extends Command { - /** @var \OCA\User_LDAP\Helper */ - protected $helper; - - /** - * @param Helper $helper - */ - public function __construct(Helper $helper) { - $this->helper = $helper; + public function __construct( + protected Helper $helper, + ) { parent::__construct(); } - protected function configure() { + protected function configure(): void { $this ->setName('ldap:create-empty-config') ->setDescription('creates an empty LDAP configuration') @@ -61,6 +37,7 @@ class CreateEmptyConfig extends Command { protected function execute(InputInterface $input, OutputInterface $output): int { $configPrefix = $this->helper->getNextServerConfigurationPrefix(); $configHolder = new Configuration($configPrefix); + $configHolder->ldapConfigurationActive = false; $configHolder->saveConfiguration(); $prose = ''; @@ -68,6 +45,6 @@ class CreateEmptyConfig extends Command { $prose = 'Created new configuration with configID '; } $output->writeln($prose . "{$configPrefix}"); - return 0; + return self::SUCCESS; } } diff --git a/apps/user_ldap/lib/Command/DeleteConfig.php b/apps/user_ldap/lib/Command/DeleteConfig.php index c76ba6f296b..7604e229bed 100644 --- a/apps/user_ldap/lib/Command/DeleteConfig.php +++ b/apps/user_ldap/lib/Command/DeleteConfig.php @@ -1,29 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Martin Konrad <info@martin-konrad.net> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Command; use OCA\User_LDAP\Helper; @@ -33,41 +14,35 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class DeleteConfig extends Command { - /** @var \OCA\User_LDAP\Helper */ - protected $helper; - - /** - * @param Helper $helper - */ - public function __construct(Helper $helper) { - $this->helper = $helper; + public function __construct( + protected Helper $helper, + ) { parent::__construct(); } - protected function configure() { + protected function configure(): void { $this ->setName('ldap:delete-config') ->setDescription('deletes an existing LDAP configuration') ->addArgument( - 'configID', - InputArgument::REQUIRED, - 'the configuration ID' - ) + 'configID', + InputArgument::REQUIRED, + 'the configuration ID' + ) ; } - protected function execute(InputInterface $input, OutputInterface $output): int { $configPrefix = $input->getArgument('configID'); $success = $this->helper->deleteServerConfiguration($configPrefix); - if ($success) { - $output->writeln("Deleted configuration with configID '{$configPrefix}'"); - return 0; - } else { + if (!$success) { $output->writeln("Cannot delete configuration with configID '{$configPrefix}'"); - return 1; + return self::FAILURE; } + + $output->writeln("Deleted configuration with configID '{$configPrefix}'"); + return self::SUCCESS; } } diff --git a/apps/user_ldap/lib/Command/PromoteGroup.php b/apps/user_ldap/lib/Command/PromoteGroup.php new file mode 100644 index 00000000000..b203a910b14 --- /dev/null +++ b/apps/user_ldap/lib/Command/PromoteGroup.php @@ -0,0 +1,111 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\User_LDAP\Command; + +use OCA\User_LDAP\Group_Proxy; +use OCP\IGroup; +use OCP\IGroupManager; +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\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\Question; + +class PromoteGroup extends Command { + + public function __construct( + private IGroupManager $groupManager, + private Group_Proxy $backend, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('ldap:promote-group') + ->setDescription('declares the specified group as admin group (only one is possible per LDAP configuration)') + ->addArgument( + 'group', + InputArgument::REQUIRED, + 'the group ID in Nextcloud or a group name' + ) + ->addOption( + 'yes', + 'y', + InputOption::VALUE_NONE, + 'do not ask for confirmation' + ); + } + + protected function formatGroupName(IGroup $group): string { + $idLabel = ''; + if ($group->getGID() !== $group->getDisplayName()) { + $idLabel = sprintf(' (Group ID: %s)', $group->getGID()); + } + return sprintf('%s%s', $group->getDisplayName(), $idLabel); + } + + protected function promoteGroup(IGroup $group, InputInterface $input, OutputInterface $output): void { + $access = $this->backend->getLDAPAccess($group->getGID()); + $currentlyPromotedGroupId = $access->connection->ldapAdminGroup; + if ($currentlyPromotedGroupId === $group->getGID()) { + $output->writeln('<info>The specified group is already promoted</info>'); + return; + } + + if ($input->getOption('yes') === false) { + $currentlyPromotedGroup = $this->groupManager->get($currentlyPromotedGroupId); + $demoteLabel = ''; + if ($currentlyPromotedGroup instanceof IGroup && $this->backend->groupExists($currentlyPromotedGroup->getGID())) { + $groupNameLabel = $this->formatGroupName($currentlyPromotedGroup); + $demoteLabel = sprintf('and demote %s ', $groupNameLabel); + } + + /** @var QuestionHelper $helper */ + $helper = $this->getHelper('question'); + $q = new Question(sprintf('Promote %s to the admin group %s(y|N)? ', $this->formatGroupName($group), $demoteLabel)); + $input->setOption('yes', $helper->ask($input, $output, $q) === 'y'); + } + if ($input->getOption('yes') === true) { + $access->connection->setConfiguration(['ldapAdminGroup' => $group->getGID()]); + $access->connection->saveConfiguration(); + $output->writeln(sprintf('<info>Group %s was promoted</info>', $group->getDisplayName())); + } else { + $output->writeln('<comment>Group promotion cancelled</comment>'); + } + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $groupInput = (string)$input->getArgument('group'); + $group = $this->groupManager->get($groupInput); + + if ($group instanceof IGroup && $this->backend->groupExists($group->getGID())) { + $this->promoteGroup($group, $input, $output); + return 0; + } + + $groupCandidates = $this->backend->getGroups($groupInput, 20); + foreach ($groupCandidates as $gidCandidate) { + $group = $this->groupManager->get($gidCandidate); + if ($group !== null + && $this->backend->groupExists($group->getGID()) // ensure it is an LDAP group + && ($group->getGID() === $groupInput + || $group->getDisplayName() === $groupInput) + ) { + $this->promoteGroup($group, $input, $output); + return 0; + } + } + + $output->writeln('<error>No matching group found</error>'); + return 1; + } + +} diff --git a/apps/user_ldap/lib/Command/ResetGroup.php b/apps/user_ldap/lib/Command/ResetGroup.php new file mode 100644 index 00000000000..5833ca980f2 --- /dev/null +++ b/apps/user_ldap/lib/Command/ResetGroup.php @@ -0,0 +1,87 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\User_LDAP\Command; + +use OCA\User_LDAP\Group_Proxy; +use OCA\User_LDAP\GroupPluginManager; +use OCP\IGroup; +use OCP\IGroupManager; +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\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\Question; + +class ResetGroup extends Command { + public function __construct( + private IGroupManager $groupManager, + private GroupPluginManager $pluginManager, + private Group_Proxy $backend, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('ldap:reset-group') + ->setDescription('deletes an LDAP group independent of the group state in the LDAP') + ->addArgument( + 'gid', + InputArgument::REQUIRED, + 'the group name as used in Nextcloud' + ) + ->addOption( + 'yes', + 'y', + InputOption::VALUE_NONE, + 'do not ask for confirmation' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + try { + $gid = $input->getArgument('gid'); + $group = $this->groupManager->get($gid); + if (!$group instanceof IGroup) { + throw new \Exception('Group not found'); + } + $backends = $group->getBackendNames(); + if (!in_array('LDAP', $backends)) { + throw new \Exception('The given group is not a recognized LDAP group.'); + } + if ($input->getOption('yes') === false) { + /** @var QuestionHelper $helper */ + $helper = $this->getHelper('question'); + $q = new Question('Delete all local data of this group (y|N)? '); + $input->setOption('yes', $helper->ask($input, $output, $q) === 'y'); + } + if ($input->getOption('yes') !== true) { + throw new \Exception('Reset cancelled by operator'); + } + + // Disable real deletion if a plugin supports it + $pluginManagerSuppressed = $this->pluginManager->setSuppressDeletion(true); + // Bypass groupExists test to force mapping deletion + $this->backend->getLDAPAccess($gid)->connection->writeToCache('groupExists' . $gid, false); + echo "calling delete $gid\n"; + if ($group->delete()) { + $this->pluginManager->setSuppressDeletion($pluginManagerSuppressed); + return self::SUCCESS; + } + } catch (\Throwable $e) { + if (isset($pluginManagerSuppressed)) { + $this->pluginManager->setSuppressDeletion($pluginManagerSuppressed); + } + $output->writeln('<error>' . $e->getMessage() . '</error>'); + return self::FAILURE; + } + $output->writeln('<error>Error while resetting group</error>'); + return self::INVALID; + } +} diff --git a/apps/user_ldap/lib/Command/ResetUser.php b/apps/user_ldap/lib/Command/ResetUser.php new file mode 100644 index 00000000000..1409806e4ac --- /dev/null +++ b/apps/user_ldap/lib/Command/ResetUser.php @@ -0,0 +1,85 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\User_LDAP\Command; + +use OCA\User_LDAP\User\DeletedUsersIndex; +use OCA\User_LDAP\User_Proxy; +use OCA\User_LDAP\UserPluginManager; +use OCP\IUser; +use OCP\IUserManager; +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\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\Question; + +class ResetUser extends Command { + public function __construct( + protected DeletedUsersIndex $dui, + private IUserManager $userManager, + private UserPluginManager $pluginManager, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('ldap:reset-user') + ->setDescription('deletes an LDAP user independent of the user state') + ->addArgument( + 'uid', + InputArgument::REQUIRED, + 'the user id as used in Nextcloud' + ) + ->addOption( + 'yes', + 'y', + InputOption::VALUE_NONE, + 'do not ask for confirmation' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + try { + $uid = $input->getArgument('uid'); + $user = $this->userManager->get($uid); + if (!$user instanceof IUser) { + throw new \Exception('User not found'); + } + $backend = $user->getBackend(); + if (!$backend instanceof User_Proxy) { + throw new \Exception('The given user is not a recognized LDAP user.'); + } + if ($input->getOption('yes') === false) { + /** @var QuestionHelper $helper */ + $helper = $this->getHelper('question'); + $q = new Question('Delete all local data of this user (y|N)? '); + $input->setOption('yes', $helper->ask($input, $output, $q) === 'y'); + } + if ($input->getOption('yes') !== true) { + throw new \Exception('Reset cancelled by operator'); + } + + $this->dui->markUser($uid); + $pluginManagerSuppressed = $this->pluginManager->setSuppressDeletion(true); + if ($user->delete()) { + $this->pluginManager->setSuppressDeletion($pluginManagerSuppressed); + return self::SUCCESS; + } + } catch (\Throwable $e) { + if (isset($pluginManagerSuppressed)) { + $this->pluginManager->setSuppressDeletion($pluginManagerSuppressed); + } + $output->writeln('<error>' . $e->getMessage() . '</error>'); + return self::FAILURE; + } + $output->writeln('<error>Error while resetting user</error>'); + return self::INVALID; + } +} diff --git a/apps/user_ldap/lib/Command/Search.php b/apps/user_ldap/lib/Command/Search.php index b8f2d885299..85906b20e9a 100644 --- a/apps/user_ldap/lib/Command/Search.php +++ b/apps/user_ldap/lib/Command/Search.php @@ -1,30 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Command; use OCA\User_LDAP\Group_Proxy; @@ -32,6 +12,7 @@ use OCA\User_LDAP\Helper; use OCA\User_LDAP\LDAP; use OCA\User_LDAP\User_Proxy; use OCP\IConfig; +use OCP\Server; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; @@ -40,59 +21,52 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class Search extends Command { - /** @var \OCP\IConfig */ - protected $ocConfig; - /** @var User_Proxy */ - private $userProxy; - /** @var Group_Proxy */ - private $groupProxy; - - public function __construct(IConfig $ocConfig, User_Proxy $userProxy, Group_Proxy $groupProxy) { + public function __construct( + protected IConfig $ocConfig, + private User_Proxy $userProxy, + private Group_Proxy $groupProxy, + ) { parent::__construct(); - $this->ocConfig = $ocConfig; - $this->userProxy = $userProxy; - $this->groupProxy = $groupProxy; } - protected function configure() { + protected function configure(): void { $this ->setName('ldap:search') ->setDescription('executes a user or group search') ->addArgument( - 'search', - InputArgument::REQUIRED, - 'the search string (can be empty)' - ) + 'search', + InputArgument::REQUIRED, + 'the search string (can be empty)' + ) ->addOption( - 'group', - null, - InputOption::VALUE_NONE, - 'searches groups instead of users' - ) + 'group', + null, + InputOption::VALUE_NONE, + 'searches groups instead of users' + ) ->addOption( - 'offset', - null, - InputOption::VALUE_REQUIRED, - 'The offset of the result set. Needs to be a multiple of limit. defaults to 0.', - 0 - ) + 'offset', + null, + InputOption::VALUE_REQUIRED, + 'The offset of the result set. Needs to be a multiple of limit. defaults to 0.', + '0' + ) ->addOption( - 'limit', - null, - InputOption::VALUE_REQUIRED, - 'limit the results. 0 means no limit, defaults to 15', - 15 - ) + 'limit', + null, + InputOption::VALUE_REQUIRED, + 'limit the results. 0 means no limit, defaults to 15', + '15' + ) ; } /** * Tests whether the offset and limit options are valid - * @param int $offset - * @param int $limit + * * @throws \InvalidArgumentException */ - protected function validateOffsetAndLimit($offset, $limit) { + protected function validateOffsetAndLimit(int $offset, int $limit): void { if ($limit < 0) { throw new \InvalidArgumentException('limit must be 0 or greater'); } @@ -108,7 +82,7 @@ class Search extends Command { } protected function execute(InputInterface $input, OutputInterface $output): int { - $helper = new Helper($this->ocConfig, \OC::$server->getDatabaseConnection()); + $helper = Server::get(Helper::class); $configPrefixes = $helper->getServerConfigurationPrefixes(true); $ldapWrapper = new LDAP(); @@ -133,9 +107,9 @@ class Search extends Command { $result = $proxy->$getMethod($input->getArgument('search'), $limit, $offset); foreach ($result as $id => $name) { - $line = $name . ($printID ? ' ('.$id.')' : ''); + $line = $name . ($printID ? ' (' . $id . ')' : ''); $output->writeln($line); } - return 0; + return self::SUCCESS; } } diff --git a/apps/user_ldap/lib/Command/SetConfig.php b/apps/user_ldap/lib/Command/SetConfig.php index 4b20ad65e9f..7e9efcf34d0 100644 --- a/apps/user_ldap/lib/Command/SetConfig.php +++ b/apps/user_ldap/lib/Command/SetConfig.php @@ -1,71 +1,52 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Command; use OCA\User_LDAP\Configuration; use OCA\User_LDAP\ConnectionFactory; use OCA\User_LDAP\Helper; use OCA\User_LDAP\LDAP; +use OCP\Server; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class SetConfig extends Command { - protected function configure() { + protected function configure(): void { $this ->setName('ldap:set-config') ->setDescription('modifies an LDAP configuration') ->addArgument( - 'configID', - InputArgument::REQUIRED, - 'the configuration ID' - ) + 'configID', + InputArgument::REQUIRED, + 'the configuration ID' + ) ->addArgument( - 'configKey', - InputArgument::REQUIRED, - 'the configuration key' - ) + 'configKey', + InputArgument::REQUIRED, + 'the configuration key' + ) ->addArgument( - 'configValue', - InputArgument::REQUIRED, - 'the new configuration value' - ) + 'configValue', + InputArgument::REQUIRED, + 'the new configuration value' + ) ; } protected function execute(InputInterface $input, OutputInterface $output): int { - $helper = new Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $helper = Server::get(Helper::class); $availableConfigs = $helper->getServerConfigurationPrefixes(); $configID = $input->getArgument('configID'); if (!in_array($configID, $availableConfigs)) { - $output->writeln("Invalid configID"); - return 1; + $output->writeln('Invalid configID'); + return self::FAILURE; } $this->setValue( @@ -73,16 +54,13 @@ class SetConfig extends Command { $input->getArgument('configKey'), $input->getArgument('configValue') ); - return 0; + return self::SUCCESS; } /** * save the configuration value as provided - * @param string $configID - * @param string $configKey - * @param string $configValue */ - protected function setValue($configID, $key, $value) { + protected function setValue(string $configID, string $key, string $value): void { $configHolder = new Configuration($configID); $configHolder->$key = $value; $configHolder->saveConfiguration(); diff --git a/apps/user_ldap/lib/Command/ShowConfig.php b/apps/user_ldap/lib/Command/ShowConfig.php index 99180bd7996..fa021192ac4 100644 --- a/apps/user_ldap/lib/Command/ShowConfig.php +++ b/apps/user_ldap/lib/Command/ShowConfig.php @@ -1,69 +1,50 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Daniel Kesselberg <mail@danielkesselberg.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Laurens Post <Crote@users.noreply.github.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Command; +use OC\Core\Command\Base; use OCA\User_LDAP\Configuration; use OCA\User_LDAP\Helper; -use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; -class ShowConfig extends Command { - /** @var \OCA\User_LDAP\Helper */ - protected $helper; - - /** - * @param Helper $helper - */ - public function __construct(Helper $helper) { - $this->helper = $helper; +class ShowConfig extends Base { + public function __construct( + protected Helper $helper, + ) { parent::__construct(); } - protected function configure() { + protected function configure(): void { $this ->setName('ldap:show-config') ->setDescription('shows the LDAP configuration') ->addArgument( - 'configID', - InputArgument::OPTIONAL, - 'will show the configuration of the specified id' - ) + 'configID', + InputArgument::OPTIONAL, + 'will show the configuration of the specified id' + ) + ->addOption( + 'show-password', + null, + InputOption::VALUE_NONE, + 'show ldap bind password' + ) ->addOption( - 'show-password', - null, - InputOption::VALUE_NONE, - 'show ldap bind password' - ) + 'output', + null, + InputOption::VALUE_OPTIONAL, + 'Output format (table, plain, json or json_pretty, default is table)', + 'table' + ) ; } @@ -73,43 +54,66 @@ class ShowConfig extends Command { if (!is_null($configID)) { $configIDs[] = $configID; if (!in_array($configIDs[0], $availableConfigs)) { - $output->writeln("Invalid configID"); - return 1; + $output->writeln('Invalid configID'); + return self::FAILURE; } } else { $configIDs = $availableConfigs; } - $this->renderConfigs($configIDs, $output, $input->getOption('show-password')); - return 0; + $this->renderConfigs($configIDs, $input, $output); + return self::SUCCESS; } /** * prints the LDAP configuration(s) - * @param string[] configID(s) - * @param OutputInterface $output - * @param bool $withPassword Set to TRUE to show plaintext passwords in output + * + * @param string[] $configIDs */ - protected function renderConfigs($configIDs, $output, $withPassword) { + protected function renderConfigs( + array $configIDs, + InputInterface $input, + OutputInterface $output, + ): void { + $renderTable = $input->getOption('output') === 'table' or $input->getOption('output') === null; + $showPassword = $input->getOption('show-password'); + + $configs = []; foreach ($configIDs as $id) { $configHolder = new Configuration($id); $configuration = $configHolder->getConfiguration(); ksort($configuration); - $table = new Table($output); - $table->setHeaders(['Configuration', $id]); $rows = []; - foreach ($configuration as $key => $value) { - if ($key === 'ldapAgentPassword' && !$withPassword) { - $value = '***'; + if ($renderTable) { + foreach ($configuration as $key => $value) { + if (is_array($value)) { + $value = implode(';', $value); + } + if ($key === 'ldapAgentPassword' && !$showPassword) { + $rows[] = [$key, '***']; + } else { + $rows[] = [$key, $value]; + } } - if (is_array($value)) { - $value = implode(';', $value); + $table = new Table($output); + $table->setHeaders(['Configuration', $id]); + $table->setRows($rows); + $table->render(); + continue; + } + + foreach ($configuration as $key => $value) { + if ($key === 'ldapAgentPassword' && !$showPassword) { + $rows[$key] = '***'; + } else { + $rows[$key] = $value; } - $rows[] = [$key, $value]; } - $table->setRows($rows); - $table->render(); + $configs[$id] = $rows; + } + if (!$renderTable) { + $this->writeArrayInOutputFormat($input, $output, $configs); } } } diff --git a/apps/user_ldap/lib/Command/ShowRemnants.php b/apps/user_ldap/lib/Command/ShowRemnants.php index 2d14ff5b06e..d255aac1368 100644 --- a/apps/user_ldap/lib/Command/ShowRemnants.php +++ b/apps/user_ldap/lib/Command/ShowRemnants.php @@ -1,30 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Daniel Kesselberg <mail@danielkesselberg.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author scolebrook <scolebrook@mac.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Command; use OCA\User_LDAP\User\DeletedUsersIndex; @@ -37,23 +17,14 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class ShowRemnants extends Command { - /** @var \OCA\User_LDAP\User\DeletedUsersIndex */ - protected $dui; - - /** @var \OCP\IDateTimeFormatter */ - protected $dateFormatter; - - /** - * @param DeletedUsersIndex $dui - * @param IDateTimeFormatter $dateFormatter - */ - public function __construct(DeletedUsersIndex $dui, IDateTimeFormatter $dateFormatter) { - $this->dui = $dui; - $this->dateFormatter = $dateFormatter; + public function __construct( + protected DeletedUsersIndex $dui, + protected IDateTimeFormatter $dateFormatter, + ) { parent::__construct(); } - protected function configure() { + protected function configure(): void { $this ->setName('ldap:show-remnants') ->setDescription('shows which users are not available on LDAP anymore, but have remnants in Nextcloud.') @@ -61,7 +32,7 @@ class ShowRemnants extends Command { ->addOption('short-date', null, InputOption::VALUE_NONE, 'show dates in Y-m-d format'); } - protected function formatDate(int $timestamp, string $default, bool $showShortDate) { + protected function formatDate(int $timestamp, string $default, bool $showShortDate): string { if (!($timestamp > 0)) { return $default; } @@ -104,6 +75,6 @@ class ShowRemnants extends Command { $table->setRows($rows); $table->render(); } - return 0; + return self::SUCCESS; } } diff --git a/apps/user_ldap/lib/Command/TestConfig.php b/apps/user_ldap/lib/Command/TestConfig.php index e83befe6f30..77eaac91d85 100644 --- a/apps/user_ldap/lib/Command/TestConfig.php +++ b/apps/user_ldap/lib/Command/TestConfig.php @@ -1,95 +1,94 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Command; +use OCA\User_LDAP\AccessFactory; use OCA\User_LDAP\Connection; use OCA\User_LDAP\Helper; +use OCA\User_LDAP\ILDAPWrapper; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class TestConfig extends Command { - protected function configure() { + protected const ESTABLISHED = 0; + protected const CONF_INVALID = 1; + protected const BINDFAILURE = 2; + protected const SEARCHFAILURE = 3; + + public function __construct( + protected AccessFactory $accessFactory, + protected Helper $helper, + protected ILDAPWrapper $ldap, + ) { + parent::__construct(); + } + + protected function configure(): void { $this ->setName('ldap:test-config') ->setDescription('tests an LDAP configuration') ->addArgument( - 'configID', - InputArgument::REQUIRED, - 'the configuration ID' - ) + 'configID', + InputArgument::REQUIRED, + 'the configuration ID' + ) ; } protected function execute(InputInterface $input, OutputInterface $output): int { - $helper = new Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); - $availableConfigs = $helper->getServerConfigurationPrefixes(); + $availableConfigs = $this->helper->getServerConfigurationPrefixes(); $configID = $input->getArgument('configID'); if (!in_array($configID, $availableConfigs)) { - $output->writeln("Invalid configID"); - return 1; + $output->writeln('Invalid configID'); + return self::FAILURE; } $result = $this->testConfig($configID); - if ($result === 0) { - $output->writeln('The configuration is valid and the connection could be established!'); - } elseif ($result === 1) { - $output->writeln('The configuration is invalid. Please have a look at the logs for further details.'); - return 1; - } elseif ($result === 2) { - $output->writeln('The configuration is valid, but the Bind failed. Please check the server settings and credentials.'); - } else { - $output->writeln('Your LDAP server was kidnapped by aliens.'); - } - return 0; + + $message = match ($result) { + static::ESTABLISHED => 'The configuration is valid and the connection could be established!', + static::CONF_INVALID => 'The configuration is invalid. Please have a look at the logs for further details.', + static::BINDFAILURE => 'The configuration is valid, but the bind failed. Please check the server settings and credentials.', + static::SEARCHFAILURE => 'The configuration is valid and the bind passed, but a simple search on the base fails. Please check the server base setting.', + default => 'Your LDAP server was kidnapped by aliens.', + }; + + $output->writeln($message); + + return $result === static::ESTABLISHED + ? self::SUCCESS + : self::FAILURE; } /** - * tests the specified connection - * @param string $configID - * @return int + * Tests the specified connection */ - protected function testConfig($configID) { - $lw = new \OCA\User_LDAP\LDAP(); - $connection = new Connection($lw, $configID); + protected function testConfig(string $configID): int { + $connection = new Connection($this->ldap, $configID); - //ensure validation is run before we attempt the bind + // Ensure validation is run before we attempt the bind $connection->getConfiguration(); if (!$connection->setConfiguration([ 'ldap_configuration_active' => 1, ])) { - return 1; + return static::CONF_INVALID; + } + if (!$connection->bind()) { + return static::BINDFAILURE; } - if ($connection->bind()) { - return 0; + $access = $this->accessFactory->get($connection); + $result = $access->countObjects(1); + if (!is_int($result) || ($result <= 0)) { + return static::SEARCHFAILURE; } - return 2; + return static::ESTABLISHED; } } diff --git a/apps/user_ldap/lib/Command/TestUserSettings.php b/apps/user_ldap/lib/Command/TestUserSettings.php new file mode 100644 index 00000000000..12690158f98 --- /dev/null +++ b/apps/user_ldap/lib/Command/TestUserSettings.php @@ -0,0 +1,248 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +namespace OCA\User_LDAP\Command; + +use OCA\User_LDAP\Group_Proxy; +use OCA\User_LDAP\Helper; +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\User\DeletedUsersIndex; +use OCA\User_LDAP\User_Proxy; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class TestUserSettings extends Command { + public function __construct( + protected User_Proxy $backend, + protected Group_Proxy $groupBackend, + protected Helper $helper, + protected DeletedUsersIndex $dui, + protected UserMapping $mapping, + protected GroupMapping $groupMapping, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('ldap:test-user-settings') + ->setDescription('Runs tests and show information about user related LDAP settings') + ->addArgument( + 'user', + InputArgument::REQUIRED, + 'the user name as used in Nextcloud, or the LDAP DN' + ) + ->addOption( + 'group', + 'g', + InputOption::VALUE_REQUIRED, + 'A group DN to check if the user is a member or not' + ) + ->addOption( + 'clearcache', + null, + InputOption::VALUE_NONE, + 'Clear the cache of the LDAP connection before the beginning of tests' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + try { + $uid = $input->getArgument('user'); + $access = $this->backend->getLDAPAccess($uid); + $connection = $access->getConnection(); + if ($input->getOption('clearcache')) { + $connection->clearCache(); + } + $configPrefix = $connection->getConfigPrefix(); + $knownDn = ''; + if ($access->stringResemblesDN($uid)) { + $knownDn = $uid; + $username = $access->dn2username($uid); + if ($username !== false) { + $uid = $username; + } + } + + $dn = $this->mapping->getDNByName($uid); + if ($dn !== false) { + $output->writeln("User <info>$dn</info> is mapped with account name <info>$uid</info>."); + $uuid = $this->mapping->getUUIDByDN($dn); + $output->writeln("Known UUID is <info>$uuid</info>."); + if ($knownDn === '') { + $knownDn = $dn; + } + } else { + $output->writeln("User <info>$uid</info> is not mapped."); + } + + if ($knownDn === '') { + return self::SUCCESS; + } + + if (!$access->isDNPartOfBase($knownDn, $access->getConnection()->ldapBaseUsers)) { + $output->writeln( + "User <info>$knownDn</info> is not in one of the configured user bases: <info>" + . implode(',', $access->getConnection()->ldapBaseUsers) + . '</info>.' + ); + } + + $output->writeln("Configuration prefix is <info>$configPrefix</info>"); + $output->writeln(''); + + $attributeNames = [ + 'ldapBase', + 'ldapBaseUsers', + 'ldapExpertUsernameAttr', + 'ldapUuidUserAttribute', + 'ldapExpertUUIDUserAttr', + 'ldapQuotaAttribute', + 'ldapEmailAttribute', + 'ldapUserDisplayName', + 'ldapUserDisplayName2', + 'ldapExtStorageHomeAttribute', + 'ldapAttributePhone', + 'ldapAttributeWebsite', + 'ldapAttributeAddress', + 'ldapAttributeTwitter', + 'ldapAttributeFediverse', + 'ldapAttributeOrganisation', + 'ldapAttributeRole', + 'ldapAttributeHeadline', + 'ldapAttributeBiography', + 'ldapAttributeBirthDate', + 'ldapAttributePronouns', + 'ldapGidNumber', + 'hasGidNumber', + ]; + $output->writeln('Attributes set in configuration:'); + foreach ($attributeNames as $attributeName) { + if (($connection->$attributeName !== '') && ($connection->$attributeName !== [])) { + if (\is_string($connection->$attributeName)) { + $output->writeln("- $attributeName: <info>" . $connection->$attributeName . '</info>'); + } else { + $output->writeln("- $attributeName: <info>" . \json_encode($connection->$attributeName) . '</info>'); + } + } + } + + $filter = $connection->ldapUserFilter; + $attrs = $access->userManager->getAttributes(true); + $attrs[] = strtolower($connection->ldapExpertUsernameAttr); + if ($connection->ldapUuidUserAttribute !== 'auto') { + $attrs[] = strtolower($connection->ldapUuidUserAttribute); + } + if ($connection->hasGidNumber) { + $attrs[] = strtolower($connection->ldapGidNumber); + } + $attrs[] = 'memberof'; + $attrs = array_values(array_unique($attrs)); + $attributes = $access->readAttributes($knownDn, $attrs, $filter); + + if ($attributes === false) { + $output->writeln( + "LDAP read on <info>$knownDn</info> with filter <info>$filter</info> failed." + ); + return self::FAILURE; + } + + $output->writeln("Attributes fetched from LDAP using filter <info>$filter</info>:"); + foreach ($attributes as $attribute => $value) { + $output->writeln( + "- $attribute: <info>" . json_encode($value) . '</info>' + ); + } + + $uuid = $access->getUUID($knownDn); + if ($connection->ldapUuidUserAttribute === 'auto') { + $output->writeln('<error>Failed to detect UUID attribute</error>'); + } else { + $output->writeln('Detected UUID attribute: <info>' . $connection->ldapUuidUserAttribute . '</info>'); + } + if ($uuid === false) { + $output->writeln("<error>Failed to find UUID for $knownDn</error>"); + } else { + $output->writeln("UUID for <info>$knownDn</info>: <info>$uuid</info>"); + } + + $groupLdapInstance = $this->groupBackend->getBackend($configPrefix); + + $output->writeln(''); + $output->writeln('Group information:'); + + $attributeNames = [ + 'ldapBaseGroups', + 'ldapDynamicGroupMemberURL', + 'ldapGroupFilter', + 'ldapGroupMemberAssocAttr', + ]; + $output->writeln('Configuration:'); + foreach ($attributeNames as $attributeName) { + if ($connection->$attributeName !== '') { + $output->writeln("- $attributeName: <info>" . $connection->$attributeName . '</info>'); + } + } + + $primaryGroup = $groupLdapInstance->getUserPrimaryGroup($knownDn); + $output->writeln('Primary group: <info>' . ($primaryGroup !== false? $primaryGroup:'') . '</info>'); + + $groupByGid = $groupLdapInstance->getUserGroupByGid($knownDn); + $output->writeln('Group from gidNumber: <info>' . ($groupByGid !== false? $groupByGid:'') . '</info>'); + + $groups = $groupLdapInstance->getUserGroups($uid); + $output->writeln('All known groups: <info>' . json_encode($groups) . '</info>'); + + $memberOfUsed = ((int)$access->connection->hasMemberOfFilterSupport === 1 + && (int)$access->connection->useMemberOfToDetectMembership === 1); + + $output->writeln('MemberOf usage: <info>' . ($memberOfUsed ? 'on' : 'off') . '</info> (' . $access->connection->hasMemberOfFilterSupport . ',' . $access->connection->useMemberOfToDetectMembership . ')'); + + $gid = (string)$input->getOption('group'); + if ($gid === '') { + return self::SUCCESS; + } + + $output->writeln(''); + $output->writeln("Group $gid:"); + $knownGroupDn = ''; + if ($access->stringResemblesDN($gid)) { + $knownGroupDn = $gid; + $groupname = $access->dn2groupname($gid); + if ($groupname !== false) { + $gid = $groupname; + } + } + + $groupDn = $this->groupMapping->getDNByName($gid); + if ($groupDn !== false) { + $output->writeln("Group <info>$groupDn</info> is mapped with name <info>$gid</info>."); + $groupUuid = $this->groupMapping->getUUIDByDN($groupDn); + $output->writeln("Known UUID is <info>$groupUuid</info>."); + if ($knownGroupDn === '') { + $knownGroupDn = $groupDn; + } + } else { + $output->writeln("Group <info>$gid</info> is not mapped."); + } + + $members = $groupLdapInstance->usersInGroup($gid); + $output->writeln('Members: <info>' . json_encode($members) . '</info>'); + + return self::SUCCESS; + + } catch (\Exception $e) { + $output->writeln('<error>' . $e->getMessage() . '</error>'); + return self::FAILURE; + } + } +} diff --git a/apps/user_ldap/lib/Command/UpdateUUID.php b/apps/user_ldap/lib/Command/UpdateUUID.php new file mode 100644 index 00000000000..93dcc37bada --- /dev/null +++ b/apps/user_ldap/lib/Command/UpdateUUID.php @@ -0,0 +1,338 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Command; + +use OCA\User_LDAP\Access; +use OCA\User_LDAP\Group_Proxy; +use OCA\User_LDAP\Mapping\AbstractMapping; +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\User_Proxy; +use Psr\Log\LoggerInterface; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\ProgressBar; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use function sprintf; + +class UuidUpdateReport { + public const UNCHANGED = 0; + public const UNKNOWN = 1; + public const UNREADABLE = 2; + public const UPDATED = 3; + public const UNWRITABLE = 4; + public const UNMAPPED = 5; + + public function __construct( + public string $id, + public string $dn, + public bool $isUser, + public int $state, + public string $oldUuid = '', + public string $newUuid = '', + ) { + } +} + +class UpdateUUID extends Command { + /** @var array<UuidUpdateReport[]> */ + protected array $reports = []; + private bool $dryRun = false; + + public function __construct( + private UserMapping $userMapping, + private GroupMapping $groupMapping, + private User_Proxy $userProxy, + private Group_Proxy $groupProxy, + private LoggerInterface $logger, + ) { + $this->reports = [ + UuidUpdateReport::UPDATED => [], + UuidUpdateReport::UNKNOWN => [], + UuidUpdateReport::UNREADABLE => [], + UuidUpdateReport::UNWRITABLE => [], + UuidUpdateReport::UNMAPPED => [], + ]; + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('ldap:update-uuid') + ->setDescription('Attempts to update UUIDs of user and group entries. By default, the command attempts to update UUIDs that have been invalidated by a migration step.') + ->addOption( + 'all', + null, + InputOption::VALUE_NONE, + 'updates every user and group. All other options are ignored.' + ) + ->addOption( + 'userId', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'a user ID to update' + ) + ->addOption( + 'groupId', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'a group ID to update' + ) + ->addOption( + 'dn', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'a DN to update' + ) + ->addOption( + 'dry-run', + null, + InputOption::VALUE_NONE, + 'UUIDs will not be updated in the database' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $this->dryRun = $input->getOption('dry-run'); + $entriesToUpdate = $this->estimateNumberOfUpdates($input); + $progress = new ProgressBar($output); + $progress->start($entriesToUpdate); + foreach ($this->handleUpdates($input) as $_) { + $progress->advance(); + } + $progress->finish(); + $output->writeln(''); + $this->printReport($output); + return count($this->reports[UuidUpdateReport::UNMAPPED]) === 0 + && count($this->reports[UuidUpdateReport::UNREADABLE]) === 0 + && count($this->reports[UuidUpdateReport::UNWRITABLE]) === 0 + ? self::SUCCESS + : self::FAILURE; + } + + protected function printReport(OutputInterface $output): void { + if ($output->isQuiet()) { + return; + } + + if (count($this->reports[UuidUpdateReport::UPDATED]) === 0) { + $output->writeln('<info>No record was updated.</info>'); + } else { + $output->writeln(sprintf('<info>%d record(s) were updated.</info>', count($this->reports[UuidUpdateReport::UPDATED]))); + if ($output->isVerbose()) { + /** @var UuidUpdateReport $report */ + foreach ($this->reports[UuidUpdateReport::UPDATED] as $report) { + $output->writeln(sprintf(' %s had their old UUID %s updated to %s', $report->id, $report->oldUuid, $report->newUuid)); + } + $output->writeln(''); + } + } + + if (count($this->reports[UuidUpdateReport::UNMAPPED]) > 0) { + $output->writeln(sprintf('<error>%d provided IDs were not mapped. These were:</error>', count($this->reports[UuidUpdateReport::UNMAPPED]))); + /** @var UuidUpdateReport $report */ + foreach ($this->reports[UuidUpdateReport::UNMAPPED] as $report) { + if (!empty($report->id)) { + $output->writeln(sprintf(' %s: %s', + $report->isUser ? 'User' : 'Group', $report->id)); + } elseif (!empty($report->dn)) { + $output->writeln(sprintf(' DN: %s', $report->dn)); + } + } + $output->writeln(''); + } + + if (count($this->reports[UuidUpdateReport::UNKNOWN]) > 0) { + $output->writeln(sprintf('<info>%d provided IDs were unknown on LDAP.</info>', count($this->reports[UuidUpdateReport::UNKNOWN]))); + if ($output->isVerbose()) { + /** @var UuidUpdateReport $report */ + foreach ($this->reports[UuidUpdateReport::UNKNOWN] as $report) { + $output->writeln(sprintf(' %s: %s', $report->isUser ? 'User' : 'Group', $report->id)); + } + $output->writeln(PHP_EOL . 'Old users can be removed along with their data per occ user:delete.' . PHP_EOL); + } + } + + if (count($this->reports[UuidUpdateReport::UNREADABLE]) > 0) { + $output->writeln(sprintf('<error>For %d records, the UUID could not be read. Double-check your configuration.</error>', count($this->reports[UuidUpdateReport::UNREADABLE]))); + if ($output->isVerbose()) { + /** @var UuidUpdateReport $report */ + foreach ($this->reports[UuidUpdateReport::UNREADABLE] as $report) { + $output->writeln(sprintf(' %s: %s', $report->isUser ? 'User' : 'Group', $report->id)); + } + } + } + + if (count($this->reports[UuidUpdateReport::UNWRITABLE]) > 0) { + $output->writeln(sprintf('<error>For %d records, the UUID could not be saved to database. Double-check your configuration.</error>', count($this->reports[UuidUpdateReport::UNWRITABLE]))); + if ($output->isVerbose()) { + /** @var UuidUpdateReport $report */ + foreach ($this->reports[UuidUpdateReport::UNWRITABLE] as $report) { + $output->writeln(sprintf(' %s: %s', $report->isUser ? 'User' : 'Group', $report->id)); + } + } + } + } + + protected function handleUpdates(InputInterface $input): \Generator { + if ($input->getOption('all')) { + foreach ($this->handleMappingBasedUpdates(false) as $_) { + yield; + } + } elseif ($input->getOption('userId') + || $input->getOption('groupId') + || $input->getOption('dn') + ) { + foreach ($this->handleUpdatesByUserId($input->getOption('userId')) as $_) { + yield; + } + foreach ($this->handleUpdatesByGroupId($input->getOption('groupId')) as $_) { + yield; + } + foreach ($this->handleUpdatesByDN($input->getOption('dn')) as $_) { + yield; + } + } else { + foreach ($this->handleMappingBasedUpdates(true) as $_) { + yield; + } + } + } + + protected function handleUpdatesByUserId(array $userIds): \Generator { + foreach ($this->handleUpdatesByEntryId($userIds, $this->userMapping) as $_) { + yield; + } + } + + protected function handleUpdatesByGroupId(array $groupIds): \Generator { + foreach ($this->handleUpdatesByEntryId($groupIds, $this->groupMapping) as $_) { + yield; + } + } + + protected function handleUpdatesByDN(array $dns): \Generator { + $userList = $groupList = []; + while ($dn = array_pop($dns)) { + $uuid = $this->userMapping->getUUIDByDN($dn); + if ($uuid) { + $id = $this->userMapping->getNameByDN($dn); + $userList[] = ['name' => $id, 'uuid' => $uuid]; + continue; + } + $uuid = $this->groupMapping->getUUIDByDN($dn); + if ($uuid) { + $id = $this->groupMapping->getNameByDN($dn); + $groupList[] = ['name' => $id, 'uuid' => $uuid]; + continue; + } + $this->reports[UuidUpdateReport::UNMAPPED][] = new UuidUpdateReport('', $dn, true, UuidUpdateReport::UNMAPPED); + yield; + } + foreach ($this->handleUpdatesByList($this->userMapping, $userList) as $_) { + yield; + } + foreach ($this->handleUpdatesByList($this->groupMapping, $groupList) as $_) { + yield; + } + } + + protected function handleUpdatesByEntryId(array $ids, AbstractMapping $mapping): \Generator { + $isUser = $mapping instanceof UserMapping; + $list = []; + while ($id = array_pop($ids)) { + if (!$dn = $mapping->getDNByName($id)) { + $this->reports[UuidUpdateReport::UNMAPPED][] = new UuidUpdateReport($id, '', $isUser, UuidUpdateReport::UNMAPPED); + yield; + continue; + } + // Since we know it was mapped the UUID is populated + $uuid = $mapping->getUUIDByDN($dn); + $list[] = ['name' => $id, 'uuid' => $uuid]; + } + foreach ($this->handleUpdatesByList($mapping, $list) as $_) { + yield; + } + } + + protected function handleMappingBasedUpdates(bool $invalidatedOnly): \Generator { + $limit = 1000; + /** @var AbstractMapping $mapping */ + foreach ([$this->userMapping, $this->groupMapping] as $mapping) { + $offset = 0; + do { + $list = $mapping->getList($offset, $limit, $invalidatedOnly); + $offset += $limit; + + foreach ($this->handleUpdatesByList($mapping, $list) as $tick) { + yield; // null, for it only advances progress counter + } + } while (count($list) === $limit); + } + } + + protected function handleUpdatesByList(AbstractMapping $mapping, array $list): \Generator { + if ($mapping instanceof UserMapping) { + $isUser = true; + $backendProxy = $this->userProxy; + } else { + $isUser = false; + $backendProxy = $this->groupProxy; + } + + foreach ($list as $row) { + $access = $backendProxy->getLDAPAccess($row['name']); + if ($access instanceof Access + && $dn = $mapping->getDNByName($row['name'])) { + if ($uuid = $access->getUUID($dn, $isUser)) { + if ($uuid !== $row['uuid']) { + if ($this->dryRun || $mapping->setUUIDbyDN($uuid, $dn)) { + $this->reports[UuidUpdateReport::UPDATED][] + = new UuidUpdateReport($row['name'], $dn, $isUser, UuidUpdateReport::UPDATED, $row['uuid'], $uuid); + } else { + $this->reports[UuidUpdateReport::UNWRITABLE][] + = new UuidUpdateReport($row['name'], $dn, $isUser, UuidUpdateReport::UNWRITABLE, $row['uuid'], $uuid); + } + $this->logger->info('UUID of {id} was updated from {from} to {to}', + [ + 'appid' => 'user_ldap', + 'id' => $row['name'], + 'from' => $row['uuid'], + 'to' => $uuid, + ] + ); + } + } else { + $this->reports[UuidUpdateReport::UNREADABLE][] = new UuidUpdateReport($row['name'], $dn, $isUser, UuidUpdateReport::UNREADABLE); + } + } else { + $this->reports[UuidUpdateReport::UNKNOWN][] = new UuidUpdateReport($row['name'], '', $isUser, UuidUpdateReport::UNKNOWN); + } + yield; // null, for it only advances progress counter + } + } + + protected function estimateNumberOfUpdates(InputInterface $input): int { + if ($input->getOption('all')) { + return $this->userMapping->count() + $this->groupMapping->count(); + } elseif ($input->getOption('userId') + || $input->getOption('groupId') + || $input->getOption('dn') + ) { + return count($input->getOption('userId')) + + count($input->getOption('groupId')) + + count($input->getOption('dn')); + } else { + return $this->userMapping->countInvalidated() + $this->groupMapping->countInvalidated(); + } + } +} diff --git a/apps/user_ldap/lib/Configuration.php b/apps/user_ldap/lib/Configuration.php index 134f8551f7d..b4a5b847204 100644 --- a/apps/user_ldap/lib/Configuration.php +++ b/apps/user_ldap/lib/Configuration.php @@ -1,43 +1,89 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Alexander Bergolth <leo@strike.wu.ac.at> - * @author Alex Weirig <alex.weirig@technolink.lu> - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lennart Rosam <hello@takuto.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * @author Xuanwo <xuanwo@yunify.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; +use OCP\IConfig; +use OCP\Server; +use Psr\Log\LoggerInterface; + /** - * @property int ldapPagingSize holds an integer - * @property string ldapUserAvatarRule + * @property string $ldapHost + * @property string $ldapPort + * @property string $ldapBackupHost + * @property string $ldapBackupPort + * @property string $ldapBackgroundHost + * @property string $ldapBackgroundPort + * @property array|'' $ldapBase + * @property array|'' $ldapBaseUsers + * @property array|'' $ldapBaseGroups + * @property string $ldapAgentName + * @property string $ldapAgentPassword + * @property string $ldapTLS + * @property string $turnOffCertCheck + * @property string $ldapIgnoreNamingRules + * @property string $ldapUserDisplayName + * @property string $ldapUserDisplayName2 + * @property string $ldapUserAvatarRule + * @property string $ldapGidNumber + * @property array|'' $ldapUserFilterObjectclass + * @property array|'' $ldapUserFilterGroups + * @property string $ldapUserFilter + * @property string $ldapUserFilterMode + * @property string $ldapGroupFilter + * @property string $ldapGroupFilterMode + * @property array|'' $ldapGroupFilterObjectclass + * @property array|'' $ldapGroupFilterGroups + * @property string $ldapGroupDisplayName + * @property string $ldapGroupMemberAssocAttr + * @property string $ldapLoginFilter + * @property string $ldapLoginFilterMode + * @property string $ldapLoginFilterEmail + * @property string $ldapLoginFilterUsername + * @property array|'' $ldapLoginFilterAttributes + * @property string $ldapQuotaAttribute + * @property string $ldapQuotaDefault + * @property string $ldapEmailAttribute + * @property string $ldapCacheTTL + * @property string $ldapUuidUserAttribute + * @property string $ldapUuidGroupAttribute + * @property string $ldapOverrideMainServer + * @property string $ldapConfigurationActive + * @property array|'' $ldapAttributesForUserSearch + * @property array|'' $ldapAttributesForGroupSearch + * @property string $ldapExperiencedAdmin + * @property string $homeFolderNamingRule + * @property string $hasMemberOfFilterSupport + * @property string $useMemberOfToDetectMembership + * @property string $ldapExpertUsernameAttr + * @property string $ldapExpertUUIDUserAttr + * @property string $ldapExpertUUIDGroupAttr + * @property string $markRemnantsAsDisabled + * @property string $lastJpegPhotoLookup + * @property string $ldapNestedGroups + * @property string $ldapPagingSize + * @property string $turnOnPasswordChange + * @property string $ldapDynamicGroupMemberURL + * @property string $ldapDefaultPPolicyDN + * @property string $ldapExtStorageHomeAttribute + * @property string $ldapMatchingRuleInChainState + * @property string $ldapConnectionTimeout + * @property string $ldapAttributePhone + * @property string $ldapAttributeWebsite + * @property string $ldapAttributeAddress + * @property string $ldapAttributeTwitter + * @property string $ldapAttributeFediverse + * @property string $ldapAttributeOrganisation + * @property string $ldapAttributeRole + * @property string $ldapAttributeHeadline + * @property string $ldapAttributeBiography + * @property string $ldapAdminGroup + * @property string $ldapAttributeBirthDate + * @property string $ldapAttributePronouns */ class Configuration { public const AVATAR_PREFIX_DEFAULT = 'default'; @@ -47,21 +93,25 @@ class Configuration { public const LDAP_SERVER_FEATURE_UNKNOWN = 'unknown'; public const LDAP_SERVER_FEATURE_AVAILABLE = 'available'; public const LDAP_SERVER_FEATURE_UNAVAILABLE = 'unavailable'; - - protected $configPrefix = null; + /** + * @var bool + */ protected $configRead = false; /** - * @var string[] pre-filled with one reference key so that at least one entry is written on save request and - * the config ID is registered + * @var string[] */ - protected $unsavedChanges = ['ldapConfigurationActive' => 'ldapConfigurationActive']; + protected array $unsavedChanges = []; - //settings + /** + * @var array<string, mixed> settings + */ protected $config = [ 'ldapHost' => null, 'ldapPort' => null, 'ldapBackupHost' => null, 'ldapBackupPort' => null, + 'ldapBackgroundHost' => null, + 'ldapBackgroundPort' => null, 'ldapBase' => null, 'ldapBaseUsers' => null, 'ldapBaseGroups' => null, @@ -106,6 +156,7 @@ class Configuration { 'ldapExpertUsernameAttr' => null, 'ldapExpertUUIDUserAttr' => null, 'ldapExpertUUIDGroupAttr' => null, + 'markRemnantsAsDisabled' => false, 'lastJpegPhotoLookup' => null, 'ldapNestedGroups' => false, 'ldapPagingSize' => null, @@ -114,14 +165,26 @@ class Configuration { 'ldapDefaultPPolicyDN' => null, 'ldapExtStorageHomeAttribute' => null, 'ldapMatchingRuleInChainState' => self::LDAP_SERVER_FEATURE_UNKNOWN, + 'ldapConnectionTimeout' => 15, + 'ldapAttributePhone' => null, + 'ldapAttributeWebsite' => null, + 'ldapAttributeAddress' => null, + 'ldapAttributeTwitter' => null, + 'ldapAttributeFediverse' => null, + 'ldapAttributeOrganisation' => null, + 'ldapAttributeRole' => null, + 'ldapAttributeHeadline' => null, + 'ldapAttributeBiography' => null, + 'ldapAdminGroup' => '', + 'ldapAttributeBirthDate' => null, + 'ldapAttributeAnniversaryDate' => null, + 'ldapAttributePronouns' => null, ]; - /** - * @param string $configPrefix - * @param bool $autoRead - */ - public function __construct($configPrefix, $autoRead = true) { - $this->configPrefix = $configPrefix; + public function __construct( + protected string $configPrefix, + bool $autoRead = true, + ) { if ($autoRead) { $this->readConfiguration(); } @@ -146,10 +209,7 @@ class Configuration { $this->setConfiguration([$name => $value]); } - /** - * @return array - */ - public function getConfiguration() { + public function getConfiguration(): array { return $this->config; } @@ -158,18 +218,13 @@ class Configuration { * from configuration. It does not save the configuration! To do so, you * must call saveConfiguration afterwards. * @param array $config array that holds the config parameters in an associated - * array + * array * @param array &$applied optional; array where the set fields will be given to - * @return false|null */ - public function setConfiguration($config, &$applied = null) { - if (!is_array($config)) { - return false; - } - + public function setConfiguration(array $config, ?array &$applied = null): void { $cta = $this->getConfigTranslationArray(); foreach ($config as $inputKey => $val) { - if (strpos($inputKey, '_') !== false && array_key_exists($inputKey, $cta)) { + if (str_contains($inputKey, '_') && array_key_exists($inputKey, $cta)) { $key = $cta[$inputKey]; } elseif (array_key_exists($inputKey, $this->config)) { $key = $inputKey; @@ -184,8 +239,8 @@ class Configuration { break; case 'homeFolderNamingRule': $trimmedVal = trim($val); - if ($trimmedVal !== '' && strpos($val, 'attr:') === false) { - $val = 'attr:'.$trimmedVal; + if ($trimmedVal !== '' && !str_contains($val, 'attr:')) { + $val = 'attr:' . $trimmedVal; } break; case 'ldapBase': @@ -208,11 +263,10 @@ class Configuration { } $this->unsavedChanges[$key] = $key; } - return null; } - public function readConfiguration() { - if (!$this->configRead && !is_null($this->configPrefix)) { + public function readConfiguration(): void { + if (!$this->configRead) { $cta = array_flip($this->getConfigTranslationArray()); foreach ($this->config as $key => $val) { if (!isset($cta[$key])) { @@ -242,6 +296,28 @@ class Configuration { break; case 'ldapUserDisplayName2': case 'ldapGroupDisplayName': + case 'ldapGidNumber': + case 'ldapGroupMemberAssocAttr': + case 'ldapQuotaAttribute': + case 'ldapEmailAttribute': + case 'ldapUuidUserAttribute': + case 'ldapUuidGroupAttribute': + case 'ldapExpertUsernameAttr': + case 'ldapExpertUUIDUserAttr': + case 'ldapExpertUUIDGroupAttr': + case 'ldapExtStorageHomeAttribute': + case 'ldapAttributePhone': + case 'ldapAttributeWebsite': + case 'ldapAttributeAddress': + case 'ldapAttributeTwitter': + case 'ldapAttributeFediverse': + case 'ldapAttributeOrganisation': + case 'ldapAttributeRole': + case 'ldapAttributeHeadline': + case 'ldapAttributeBiography': + case 'ldapAttributeBirthDate': + case 'ldapAttributeAnniversaryDate': + case 'ldapAttributePronouns': $readMethod = 'getLcValue'; break; case 'ldapUserDisplayName': @@ -261,8 +337,9 @@ class Configuration { /** * saves the current config changes in the database */ - public function saveConfiguration() { + public function saveConfiguration(): void { $cta = array_flip($this->getConfigTranslationArray()); + $changed = false; foreach ($this->unsavedChanges as $key) { $value = $this->config[$key]; switch ($key) { @@ -283,7 +360,7 @@ class Configuration { $value = implode("\n", $value); } break; - //following options are not stored but detected, skip them + //following options are not stored but detected, skip them case 'ldapIgnoreNamingRules': case 'ldapUuidUserAttribute': case 'ldapUuidGroupAttribute': @@ -292,9 +369,12 @@ class Configuration { if (is_null($value)) { $value = ''; } + $changed = true; $this->saveValue($cta[$key], $value); } - $this->saveValue('_lastChange', time()); + if ($changed) { + $this->saveValue('_lastChange', (string)time()); + } $this->unsavedChanges = []; } @@ -319,7 +399,7 @@ class Configuration { * @param string $varName name of config-key * @param array|string $value to set */ - protected function setMultiLine($varName, $value) { + protected function setMultiLine(string $varName, $value): void { if (empty($value)) { $value = ''; } elseif (!is_array($value)) { @@ -350,43 +430,27 @@ class Configuration { $this->setRawValue($varName, $finalValue); } - /** - * @param string $varName - * @return string - */ - protected function getPwd($varName) { + protected function getPwd(string $varName): string { return base64_decode($this->getValue($varName)); } - /** - * @param string $varName - * @return string - */ - protected function getLcValue($varName) { + protected function getLcValue(string $varName): string { return mb_strtolower($this->getValue($varName), 'UTF-8'); } - /** - * @param string $varName - * @return string - */ - protected function getSystemValue($varName) { + protected function getSystemValue(string $varName): string { //FIXME: if another system value is added, softcode the default value - return \OC::$server->getConfig()->getSystemValue($varName, false); + return Server::get(IConfig::class)->getSystemValue($varName, false); } - /** - * @param string $varName - * @return string - */ - protected function getValue($varName) { + protected function getValue(string $varName): string { static $defaults; if (is_null($defaults)) { $defaults = $this->getDefaults(); } - return \OC::$server->getConfig()->getAppValue('user_ldap', - $this->configPrefix.$varName, - $defaults[$varName]); + return Server::get(IConfig::class)->getAppValue('user_ldap', + $this->configPrefix . $varName, + $defaults[$varName]); } /** @@ -395,7 +459,7 @@ class Configuration { * @param string $varName name of config key * @param mixed $value to set */ - protected function setValue($varName, $value) { + protected function setValue(string $varName, $value): void { if (is_string($value)) { $value = trim($value); } @@ -408,19 +472,14 @@ class Configuration { * @param string $varName name of config key * @param mixed $value to set */ - protected function setRawValue($varName, $value) { + protected function setRawValue(string $varName, $value): void { $this->config[$varName] = $value; } - /** - * @param string $varName - * @param string $value - * @return bool - */ - protected function saveValue($varName, $value) { - \OC::$server->getConfig()->setAppValue( + protected function saveValue(string $varName, string $value): bool { + Server::get(IConfig::class)->setAppValue( 'user_ldap', - $this->configPrefix.$varName, + $this->configPrefix . $varName, $value ); return true; @@ -428,14 +487,16 @@ class Configuration { /** * @return array an associative array with the default values. Keys are correspond - * to config-value entries in the database table + * to config-value entries in the database table */ - public function getDefaults() { + public function getDefaults(): array { return [ 'ldap_host' => '', 'ldap_port' => '', 'ldap_backup_host' => '', 'ldap_backup_port' => '', + 'ldap_background_host' => '', + 'ldap_background_port' => '', 'ldap_override_main_server' => '', 'ldap_dn' => '', 'ldap_agent_password' => '', @@ -477,6 +538,7 @@ class Configuration { 'ldap_expert_uuid_group_attr' => '', 'has_memberof_filter_support' => 0, 'use_memberof_to_detect_membership' => 1, + 'ldap_mark_remnants_as_disabled' => 0, 'last_jpegPhoto_lookup' => 0, 'ldap_nested_groups' => 0, 'ldap_paging_size' => 500, @@ -487,19 +549,35 @@ class Configuration { 'ldap_user_avatar_rule' => 'default', 'ldap_ext_storage_home_attribute' => '', 'ldap_matching_rule_in_chain_state' => self::LDAP_SERVER_FEATURE_UNKNOWN, + 'ldap_connection_timeout' => 15, + 'ldap_attr_phone' => '', + 'ldap_attr_website' => '', + 'ldap_attr_address' => '', + 'ldap_attr_twitter' => '', + 'ldap_attr_fediverse' => '', + 'ldap_attr_organisation' => '', + 'ldap_attr_role' => '', + 'ldap_attr_headline' => '', + 'ldap_attr_biography' => '', + 'ldap_admin_group' => '', + 'ldap_attr_birthdate' => '', + 'ldap_attr_anniversarydate' => '', + 'ldap_attr_pronouns' => '', ]; } /** * @return array that maps internal variable names to database fields */ - public function getConfigTranslationArray() { + public function getConfigTranslationArray(): array { //TODO: merge them into one representation static $array = [ 'ldap_host' => 'ldapHost', 'ldap_port' => 'ldapPort', 'ldap_backup_host' => 'ldapBackupHost', 'ldap_backup_port' => 'ldapBackupPort', + 'ldap_background_host' => 'ldapBackgroundHost', + 'ldap_background_port' => 'ldapBackgroundPort', 'ldap_override_main_server' => 'ldapOverrideMainServer', 'ldap_dn' => 'ldapAgentName', 'ldap_agent_password' => 'ldapAgentPassword', @@ -540,6 +618,7 @@ class Configuration { 'ldap_expert_uuid_group_attr' => 'ldapExpertUUIDGroupAttr', 'has_memberof_filter_support' => 'hasMemberOfFilterSupport', 'use_memberof_to_detect_membership' => 'useMemberOfToDetectMembership', + 'ldap_mark_remnants_as_disabled' => 'markRemnantsAsDisabled', 'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup', 'ldap_nested_groups' => 'ldapNestedGroups', 'ldap_paging_size' => 'ldapPagingSize', @@ -550,30 +629,42 @@ class Configuration { 'ldap_ext_storage_home_attribute' => 'ldapExtStorageHomeAttribute', 'ldap_matching_rule_in_chain_state' => 'ldapMatchingRuleInChainState', 'ldapIgnoreNamingRules' => 'ldapIgnoreNamingRules', // sysconfig + 'ldap_connection_timeout' => 'ldapConnectionTimeout', + 'ldap_attr_phone' => 'ldapAttributePhone', + 'ldap_attr_website' => 'ldapAttributeWebsite', + 'ldap_attr_address' => 'ldapAttributeAddress', + 'ldap_attr_twitter' => 'ldapAttributeTwitter', + 'ldap_attr_fediverse' => 'ldapAttributeFediverse', + 'ldap_attr_organisation' => 'ldapAttributeOrganisation', + 'ldap_attr_role' => 'ldapAttributeRole', + 'ldap_attr_headline' => 'ldapAttributeHeadline', + 'ldap_attr_biography' => 'ldapAttributeBiography', + 'ldap_admin_group' => 'ldapAdminGroup', + 'ldap_attr_birthdate' => 'ldapAttributeBirthDate', + 'ldap_attr_anniversarydate' => 'ldapAttributeAnniversaryDate', + 'ldap_attr_pronouns' => 'ldapAttributePronouns', ]; return $array; } /** - * @param string $rule - * @return array * @throws \RuntimeException */ - public function resolveRule($rule) { + public function resolveRule(string $rule): array { if ($rule === 'avatar') { return $this->getAvatarAttributes(); } throw new \RuntimeException('Invalid rule'); } - public function getAvatarAttributes() { + public function getAvatarAttributes(): array { $value = $this->ldapUserAvatarRule ?: self::AVATAR_PREFIX_DEFAULT; $defaultAttributes = ['jpegphoto', 'thumbnailphoto']; if ($value === self::AVATAR_PREFIX_NONE) { return []; } - if (strpos($value, self::AVATAR_PREFIX_DATA_ATTRIBUTE) === 0) { + if (str_starts_with($value, self::AVATAR_PREFIX_DATA_ATTRIBUTE)) { $attribute = trim(substr($value, strlen(self::AVATAR_PREFIX_DATA_ATTRIBUTE))); if ($attribute === '') { return $defaultAttributes; @@ -581,8 +672,16 @@ class Configuration { return [strtolower($attribute)]; } if ($value !== self::AVATAR_PREFIX_DEFAULT) { - \OC::$server->getLogger()->warning('Invalid config value to ldapUserAvatarRule; falling back to default.'); + Server::get(LoggerInterface::class)->warning('Invalid config value to ldapUserAvatarRule; falling back to default.'); } return $defaultAttributes; } + + /** + * Returns TRUE if the ldapHost variable starts with 'ldapi://' + */ + public function usesLdapi(): bool { + $host = $this->config['ldapHost']; + return is_string($host) && (substr($host, 0, strlen('ldapi://')) === 'ldapi://'); + } } diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index 9a99b94689f..336179ac341 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -1,86 +1,106 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Jarkko Lehtoranta <devel@jlranta.com> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Julius Härtl <jus@bitgrid.net> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author root <root@localhost.localdomain> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * @author Xuanwo <xuanwo@yunify.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; use OC\ServerNotAvailableException; -use OCP\ILogger; +use OCA\User_LDAP\Exceptions\ConfigurationIssueException; +use OCP\ICache; +use OCP\ICacheFactory; +use OCP\IL10N; +use OCP\Server; +use OCP\Util; +use Psr\Log\LoggerInterface; /** - * magic properties (incomplete) + * magic properties * responsible for LDAP connections in context with the provided configuration * - * @property string ldapHost - * @property string ldapPort holds the port number - * @property string ldapUserFilter - * @property string ldapUserDisplayName - * @property string ldapUserDisplayName2 - * @property string ldapUserAvatarRule - * @property boolean turnOnPasswordChange - * @property string[] ldapBaseUsers - * @property int|null ldapPagingSize holds an integer - * @property bool|mixed|void ldapGroupMemberAssocAttr - * @property string ldapUuidUserAttribute - * @property string ldapUuidGroupAttribute - * @property string ldapExpertUUIDUserAttr - * @property string ldapExpertUUIDGroupAttr - * @property string ldapQuotaAttribute - * @property string ldapQuotaDefault - * @property string ldapEmailAttribute - * @property string ldapExtStorageHomeAttribute - * @property string homeFolderNamingRule - * @property bool|string ldapNestedGroups - * @property string[] ldapBaseGroups - * @property string ldapGroupFilter - * @property string ldapGroupDisplayName - * @property string ldapLoginFilter - * @property string ldapDynamicGroupMemberURL - * @property string ldapGidNumber - * @property int hasMemberOfFilterSupport - * @property int useMemberOfToDetectMembership - * @property string ldapMatchingRuleInChainState + * @property string $ldapHost + * @property string $ldapPort + * @property string $ldapBackupHost + * @property string $ldapBackupPort + * @property string $ldapBackgroundHost + * @property string $ldapBackgroundPort + * @property array|'' $ldapBase + * @property array|'' $ldapBaseUsers + * @property array|'' $ldapBaseGroups + * @property string $ldapAgentName + * @property string $ldapAgentPassword + * @property string $ldapTLS + * @property string $turnOffCertCheck + * @property string $ldapIgnoreNamingRules + * @property string $ldapUserDisplayName + * @property string $ldapUserDisplayName2 + * @property string $ldapUserAvatarRule + * @property string $ldapGidNumber + * @property array|'' $ldapUserFilterObjectclass + * @property array|'' $ldapUserFilterGroups + * @property string $ldapUserFilter + * @property string $ldapUserFilterMode + * @property string $ldapGroupFilter + * @property string $ldapGroupFilterMode + * @property array|'' $ldapGroupFilterObjectclass + * @property array|'' $ldapGroupFilterGroups + * @property string $ldapGroupDisplayName + * @property string $ldapGroupMemberAssocAttr + * @property string $ldapLoginFilter + * @property string $ldapLoginFilterMode + * @property string $ldapLoginFilterEmail + * @property string $ldapLoginFilterUsername + * @property array|'' $ldapLoginFilterAttributes + * @property string $ldapQuotaAttribute + * @property string $ldapQuotaDefault + * @property string $ldapEmailAttribute + * @property string $ldapCacheTTL + * @property string $ldapUuidUserAttribute + * @property string $ldapUuidGroupAttribute + * @property string $ldapOverrideMainServer + * @property string $ldapConfigurationActive + * @property array|'' $ldapAttributesForUserSearch + * @property array|'' $ldapAttributesForGroupSearch + * @property string $ldapExperiencedAdmin + * @property string $homeFolderNamingRule + * @property string $hasMemberOfFilterSupport + * @property string $useMemberOfToDetectMembership + * @property string $ldapExpertUsernameAttr + * @property string $ldapExpertUUIDUserAttr + * @property string $ldapExpertUUIDGroupAttr + * @property string $markRemnantsAsDisabled + * @property string $lastJpegPhotoLookup + * @property string $ldapNestedGroups + * @property string $ldapPagingSize + * @property string $turnOnPasswordChange + * @property string $ldapDynamicGroupMemberURL + * @property string $ldapDefaultPPolicyDN + * @property string $ldapExtStorageHomeAttribute + * @property string $ldapMatchingRuleInChainState + * @property string $ldapConnectionTimeout + * @property string $ldapAttributePhone + * @property string $ldapAttributeWebsite + * @property string $ldapAttributeAddress + * @property string $ldapAttributeTwitter + * @property string $ldapAttributeFediverse + * @property string $ldapAttributeOrganisation + * @property string $ldapAttributeRole + * @property string $ldapAttributeHeadline + * @property string $ldapAttributeBiography + * @property string $ldapAdminGroup + * @property string $ldapAttributeBirthDate + * @property string $ldapAttributePronouns */ class Connection extends LDAPUtility { - private $ldapConnectionRes = null; - private $configPrefix; - private $configID; - private $configured = false; - //whether connection should be kept on __destruct - private $dontDestruct = false; + private ?\LDAP\Connection $ldapConnectionRes = null; + private bool $configured = false; + + /** + * @var bool whether connection should be kept on __destruct + */ + private bool $dontDestruct = false; /** * @var bool runtime flag that indicates whether supported primary groups are available @@ -92,37 +112,53 @@ class Connection extends LDAPUtility { */ public $hasGidNumber = true; - //cache handler - protected $cache; + /** + * @var ICache|null + */ + protected $cache = null; - /** @var Configuration settings handler **/ + /** @var Configuration settings handler * */ protected $configuration; + /** + * @var bool + */ protected $doNotValidate = false; + /** + * @var bool + */ protected $ignoreValidation = false; + /** + * @var array{sum?: string, result?: bool} + */ protected $bindResult = []; + protected LoggerInterface $logger; + private IL10N $l10n; + /** * Constructor - * @param ILDAPWrapper $ldap * @param string $configPrefix a string with the prefix for the configkey column (appconfig table) * @param string|null $configID a string with the value for the appid column (appconfig table) or null for on-the-fly connections */ - public function __construct(ILDAPWrapper $ldap, $configPrefix = '', $configID = 'user_ldap') { + public function __construct( + ILDAPWrapper $ldap, + private string $configPrefix = '', + private ?string $configID = 'user_ldap', + ) { parent::__construct($ldap); - $this->configPrefix = $configPrefix; - $this->configID = $configID; - $this->configuration = new Configuration($configPrefix, - !is_null($configID)); - $memcache = \OC::$server->getMemCacheFactory(); + $this->configuration = new Configuration($this->configPrefix, !is_null($this->configID)); + $memcache = Server::get(ICacheFactory::class); if ($memcache->isAvailable()) { $this->cache = $memcache->createDistributed(); } - $helper = new Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $helper = Server::get(Helper::class); $this->doNotValidate = !in_array($this->configPrefix, $helper->getServerConfigurationPrefixes()); + $this->logger = Server::get(LoggerInterface::class); + $this->l10n = Util::getL10N('user_ldap'); } public function __destruct() { @@ -137,7 +173,7 @@ class Connection extends LDAPUtility { */ public function __clone() { $this->configuration = new Configuration($this->configPrefix, - !is_null($this->configID)); + !is_null($this->configID)); if (count($this->bindResult) !== 0 && $this->bindResult['result'] === true) { $this->bindResult = []; } @@ -199,17 +235,17 @@ class Connection extends LDAPUtility { } /** - * Returns the LDAP handler + * @return \LDAP\Connection The LDAP resource */ - public function getConnectionResource() { + public function getConnectionResource(): \LDAP\Connection { if (!$this->ldapConnectionRes) { $this->init(); - } elseif (!$this->ldap->isResource($this->ldapConnectionRes)) { - $this->ldapConnectionRes = null; - $this->establishConnection(); } if (is_null($this->ldapConnectionRes)) { - \OCP\Util::writeLog('user_ldap', 'No LDAP Connection to server ' . $this->configuration->ldapHost, ILogger::ERROR); + $this->logger->error( + 'No LDAP Connection to server ' . $this->configuration->ldapHost, + ['app' => 'user_ldap'] + ); throw new ServerNotAvailableException('Connection to LDAP server could not be established'); } return $this->ldapConnectionRes; @@ -218,7 +254,7 @@ class Connection extends LDAPUtility { /** * resets the connection resource */ - public function resetConnectionResource() { + public function resetConnectionResource(): void { if (!is_null($this->ldapConnectionRes)) { @$this->ldap->unbind($this->ldapConnectionRes); $this->ldapConnectionRes = null; @@ -228,14 +264,13 @@ class Connection extends LDAPUtility { /** * @param string|null $key - * @return string */ - private function getCacheKey($key) { - $prefix = 'LDAP-'.$this->configID.'-'.$this->configPrefix.'-'; + private function getCacheKey($key): string { + $prefix = 'LDAP-' . $this->configID . '-' . $this->configPrefix . '-'; if (is_null($key)) { return $prefix; } - return $prefix.hash('sha256', $key); + return $prefix . hash('sha256', $key); } /** @@ -251,27 +286,30 @@ class Connection extends LDAPUtility { } $key = $this->getCacheKey($key); - return json_decode(base64_decode($this->cache->get($key)), true); + return json_decode(base64_decode($this->cache->get($key) ?? ''), true); + } + + public function getConfigPrefix(): string { + return $this->configPrefix; } /** * @param string $key * @param mixed $value - * - * @return string */ - public function writeToCache($key, $value) { + public function writeToCache($key, $value, ?int $ttlOverride = null): void { if (!$this->configured) { $this->readConfiguration(); } if (is_null($this->cache) || !$this->configuration->ldapCacheTTL || !$this->configuration->ldapConfigurationActive) { - return null; + return; } $key = $this->getCacheKey($key); $value = base64_encode(json_encode($value)); - $this->cache->set($key, $value, $this->configuration->ldapCacheTTL); + $ttl = $ttlOverride ?? $this->configuration->ldapCacheTTL; + $this->cache->set($key, $value, $ttl); } public function clearCache() { @@ -283,10 +321,9 @@ class Connection extends LDAPUtility { /** * Caches the general LDAP configuration. * @param bool $force optional. true, if the re-read should be forced. defaults - * to false. - * @return null + * to false. */ - private function readConfiguration($force = false) { + private function readConfiguration(bool $force = false): void { if ((!$this->configured || $force) && !is_null($this->configID)) { $this->configuration->readConfiguration(); $this->configured = $this->validateConfiguration(); @@ -297,16 +334,17 @@ class Connection extends LDAPUtility { * set LDAP configuration with values delivered by an array, not read from configuration * @param array $config array that holds the config parameters in an associated array * @param array &$setParameters optional; array where the set fields will be given to - * @return boolean true if config validates, false otherwise. Check with $setParameters for detailed success on single parameters + * @param bool $throw if true, throw ConfigurationIssueException with details instead of returning false + * @return bool true if config validates, false otherwise. Check with $setParameters for detailed success on single parameters */ - public function setConfiguration($config, &$setParameters = null) { + public function setConfiguration(array $config, ?array &$setParameters = null, bool $throw = false): bool { if (is_null($setParameters)) { $setParameters = []; } $this->doNotValidate = false; $this->configuration->setConfiguration($config, $setParameters); if (count($setParameters) > 0) { - $this->configured = $this->validateConfiguration(); + $this->configured = $this->validateConfiguration($throw); } @@ -335,7 +373,7 @@ class Connection extends LDAPUtility { foreach ($cta as $dbkey => $configkey) { switch ($configkey) { case 'homeFolderNamingRule': - if (strpos($config[$configkey], 'attr:') === 0) { + if (str_starts_with($config[$configkey], 'attr:')) { $result[$dbkey] = substr($config[$configkey], 5); } else { $result[$dbkey] = ''; @@ -358,7 +396,7 @@ class Connection extends LDAPUtility { return $result; } - private function doSoftValidation() { + private function doSoftValidation(): void { //if User or Group Base are not set, take over Base DN setting foreach (['ldapBaseUsers', 'ldapBaseGroups'] as $keyBase) { $val = $this->configuration->$keyBase; @@ -368,30 +406,28 @@ class Connection extends LDAPUtility { } foreach (['ldapExpertUUIDUserAttr' => 'ldapUuidUserAttribute', - 'ldapExpertUUIDGroupAttr' => 'ldapUuidGroupAttribute'] - as $expertSetting => $effectiveSetting) { + 'ldapExpertUUIDGroupAttr' => 'ldapUuidGroupAttribute'] as $expertSetting => $effectiveSetting) { $uuidOverride = $this->configuration->$expertSetting; if (!empty($uuidOverride)) { $this->configuration->$effectiveSetting = $uuidOverride; } else { $uuidAttributes = Access::UUID_ATTRIBUTES; array_unshift($uuidAttributes, 'auto'); - if (!in_array($this->configuration->$effectiveSetting, - $uuidAttributes) - && (!is_null($this->configID))) { + if (!in_array($this->configuration->$effectiveSetting, $uuidAttributes) + && !is_null($this->configID)) { $this->configuration->$effectiveSetting = 'auto'; $this->configuration->saveConfiguration(); - \OCP\Util::writeLog('user_ldap', - 'Illegal value for the '. - $effectiveSetting.', '.'reset to '. - 'autodetect.', ILogger::INFO); + $this->logger->info( + 'Illegal value for the ' . $effectiveSetting . ', reset to autodetect.', + ['app' => 'user_ldap'] + ); } } } $backupPort = (int)$this->configuration->ldapBackupPort; if ($backupPort <= 0) { - $this->configuration->backupPort = $this->configuration->ldapPort; + $this->configuration->ldapBackupPort = $this->configuration->ldapPort; } //make sure empty search attributes are saved as simple, empty array @@ -404,28 +440,29 @@ class Connection extends LDAPUtility { } } - if ((stripos($this->configuration->ldapHost, 'ldaps://') === 0) + if ((stripos((string)$this->configuration->ldapHost, 'ldaps://') === 0) && $this->configuration->ldapTLS) { - $this->configuration->ldapTLS = false; - \OCP\Util::writeLog( - 'user_ldap', + $this->configuration->ldapTLS = (string)false; + $this->logger->info( 'LDAPS (already using secure connection) and TLS do not work together. Switched off TLS.', - ILogger::INFO + ['app' => 'user_ldap'] ); } } /** - * @return bool + * @throws ConfigurationIssueException */ - private function doCriticalValidation() { - $configurationOK = true; - $errorStr = 'Configuration Error (prefix '. - (string)$this->configPrefix .'): '; - + private function doCriticalValidation(): void { //options that shall not be empty - $options = ['ldapHost', 'ldapPort', 'ldapUserDisplayName', + $options = ['ldapHost', 'ldapUserDisplayName', 'ldapGroupDisplayName', 'ldapLoginFilter']; + + //ldapPort should not be empty either unless ldapHost is pointing to a socket + if (!$this->configuration->usesLdapi()) { + $options[] = 'ldapPort'; + } + foreach ($options as $key) { $val = $this->configuration->$key; if (empty($val)) { @@ -449,11 +486,9 @@ class Connection extends LDAPUtility { $subj = $key; break; } - $configurationOK = false; - \OCP\Util::writeLog( - 'user_ldap', - $errorStr.'No '.$subj.' given!', - ILogger::WARN + throw new ConfigurationIssueException( + 'No ' . $subj . ' given!', + $this->l10n->t('Mandatory field "%s" left empty', $subj), ); } } @@ -461,49 +496,76 @@ class Connection extends LDAPUtility { //combinations $agent = $this->configuration->ldapAgentName; $pwd = $this->configuration->ldapAgentPassword; - if ( - ($agent === '' && $pwd !== '') - || ($agent !== '' && $pwd === '') - ) { - \OCP\Util::writeLog( - 'user_ldap', - $errorStr.'either no password is given for the user ' . - 'agent or a password is given, but not an LDAP agent.', - ILogger::WARN); - $configurationOK = false; + if ($agent === '' && $pwd !== '') { + throw new ConfigurationIssueException( + 'A password is given, but not an LDAP agent', + $this->l10n->t('A password is given, but not an LDAP agent'), + ); + } + if ($agent !== '' && $pwd === '') { + throw new ConfigurationIssueException( + 'No password is given for the user agent', + $this->l10n->t('No password is given for the user agent'), + ); } $base = $this->configuration->ldapBase; $baseUsers = $this->configuration->ldapBaseUsers; $baseGroups = $this->configuration->ldapBaseGroups; - if (empty($base) && empty($baseUsers) && empty($baseGroups)) { - \OCP\Util::writeLog( - 'user_ldap', - $errorStr.'Not a single Base DN given.', - ILogger::WARN + if (empty($base)) { + throw new ConfigurationIssueException( + 'Not a single Base DN given', + $this->l10n->t('No LDAP base DN was given'), ); - $configurationOK = false; } - if (mb_strpos($this->configuration->ldapLoginFilter, '%uid', 0, 'UTF-8') - === false) { - \OCP\Util::writeLog( - 'user_ldap', - $errorStr.'login filter does not contain %uid place holder.', - ILogger::WARN + if (!empty($baseUsers) && !$this->checkBasesAreValid($baseUsers, $base)) { + throw new ConfigurationIssueException( + 'User base is not in root base', + $this->l10n->t('User base DN is not a subnode of global base DN'), ); - $configurationOK = false; } - return $configurationOK; + if (!empty($baseGroups) && !$this->checkBasesAreValid($baseGroups, $base)) { + throw new ConfigurationIssueException( + 'Group base is not in root base', + $this->l10n->t('Group base DN is not a subnode of global base DN'), + ); + } + + if (mb_strpos((string)$this->configuration->ldapLoginFilter, '%uid', 0, 'UTF-8') === false) { + throw new ConfigurationIssueException( + 'Login filter does not contain %uid placeholder.', + $this->l10n->t('Login filter does not contain %s placeholder.', ['%uid']), + ); + } + } + + /** + * Checks that all bases are subnodes of one of the root bases + */ + private function checkBasesAreValid(array $bases, array $rootBases): bool { + foreach ($bases as $base) { + $ok = false; + foreach ($rootBases as $rootBase) { + if (str_ends_with($base, $rootBase)) { + $ok = true; + break; + } + } + if (!$ok) { + return false; + } + } + return true; } /** * Validates the user specified configuration * @return bool true if configuration seems OK, false otherwise */ - private function validateConfiguration() { + private function validateConfiguration(bool $throw = false): bool { if ($this->doNotValidate) { //don't do a validation if it is a new configuration with pure //default values. Will be allowed on changes via __set or @@ -517,7 +579,19 @@ class Connection extends LDAPUtility { //second step: critical checks. If left empty or filled wrong, mark as //not configured and give a warning. - return $this->doCriticalValidation(); + try { + $this->doCriticalValidation(); + return true; + } catch (ConfigurationIssueException $e) { + if ($throw) { + throw $e; + } + $this->logger->warning( + 'Configuration Error (prefix ' . $this->configPrefix . '): ' . $e->getMessage(), + ['exception' => $e] + ); + return false; + } } @@ -526,7 +600,7 @@ class Connection extends LDAPUtility { * * @throws ServerNotAvailableException */ - private function establishConnection() { + private function establishConnection(): ?bool { if (!$this->configuration->ldapConfigurationActive) { return null; } @@ -535,67 +609,64 @@ class Connection extends LDAPUtility { return false; } if (!$this->ignoreValidation && !$this->configured) { - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->warning( 'Configuration is invalid, cannot connect', - ILogger::WARN + ['app' => 'user_ldap'] ); return false; } if (!$this->ldapConnectionRes) { if (!$this->ldap->areLDAPFunctionsAvailable()) { $phpLDAPinstalled = false; - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->error( 'function ldap_connect is not available. Make sure that the PHP ldap module is installed.', - ILogger::ERROR + ['app' => 'user_ldap'] ); return false; } - if ($this->configuration->turnOffCertCheck) { - if (putenv('LDAPTLS_REQCERT=never')) { - \OCP\Util::writeLog('user_ldap', - 'Turned off SSL certificate validation successfully.', - ILogger::DEBUG); - } else { - \OCP\Util::writeLog( - 'user_ldap', - 'Could not turn off SSL certificate validation.', - ILogger::WARN - ); - } - } - $isOverrideMainServer = ($this->configuration->ldapOverrideMainServer - || $this->getFromCache('overrideMainServer')); - $isBackupHost = (trim($this->configuration->ldapBackupHost) !== ""); + $hasBackupHost = (trim($this->configuration->ldapBackupHost ?? '') !== ''); + $hasBackgroundHost = (trim($this->configuration->ldapBackgroundHost ?? '') !== ''); + $useBackgroundHost = (\OC::$CLI && $hasBackgroundHost); + $overrideCacheKey = ($useBackgroundHost ? 'overrideBackgroundServer' : 'overrideMainServer'); + $forceBackupHost = ($this->configuration->ldapOverrideMainServer || $this->getFromCache($overrideCacheKey)); $bindStatus = false; - try { - if (!$isOverrideMainServer) { - $this->doConnect($this->configuration->ldapHost, - $this->configuration->ldapPort); + if (!$forceBackupHost) { + try { + $host = $this->configuration->ldapHost ?? ''; + $port = $this->configuration->ldapPort ?? ''; + if ($useBackgroundHost) { + $host = $this->configuration->ldapBackgroundHost ?? ''; + $port = $this->configuration->ldapBackgroundPort ?? ''; + } + $this->doConnect($host, $port); return $this->bind(); + } catch (ServerNotAvailableException $e) { + if (!$hasBackupHost) { + throw $e; + } } - } catch (ServerNotAvailableException $e) { - if (!$isBackupHost) { - throw $e; - } + $this->logger->warning( + 'Main LDAP not reachable, connecting to backup: {msg}', + [ + 'app' => 'user_ldap', + 'msg' => $e->getMessage(), + 'exception' => $e, + ] + ); } - //if LDAP server is not reachable, try the Backup (Replica!) Server - if ($isBackupHost || $isOverrideMainServer) { - $this->doConnect($this->configuration->ldapBackupHost, - $this->configuration->ldapBackupPort); - $this->bindResult = []; - $bindStatus = $this->bind(); - $error = $this->ldap->isResource($this->ldapConnectionRes) ? - $this->ldap->errno($this->ldapConnectionRes) : -1; - if ($bindStatus && $error === 0 && !$this->getFromCache('overrideMainServer')) { - //when bind to backup server succeeded and failed to main server, - //skip contacting him until next cache refresh - $this->writeToCache('overrideMainServer', true); - } + // if LDAP server is not reachable, try the Backup (Replica!) Server + $this->doConnect($this->configuration->ldapBackupHost ?? '', $this->configuration->ldapBackupPort ?? ''); + $this->bindResult = []; + $bindStatus = $this->bind(); + $error = $this->ldap->isResource($this->ldapConnectionRes) + ? $this->ldap->errno($this->ldapConnectionRes) : -1; + if ($bindStatus && $error === 0 && !$forceBackupHost) { + //when bind to backup server succeeded and failed to main server, + //skip contacting it for 15min + $this->writeToCache($overrideCacheKey, true, 60 * 15); } return $bindStatus; @@ -606,15 +677,18 @@ class Connection extends LDAPUtility { /** * @param string $host * @param string $port - * @return bool * @throws \OC\ServerNotAvailableException */ - private function doConnect($host, $port) { + private function doConnect($host, $port): bool { if ($host === '') { return false; } - $this->ldapConnectionRes = $this->ldap->connect($host, $port); + $this->ldapConnectionRes = $this->ldap->connect($host, $port) ?: null; + + if ($this->ldapConnectionRes === null) { + throw new ServerNotAvailableException('Connection failed'); + } if (!$this->ldap->setOption($this->ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) { throw new ServerNotAvailableException('Could not set required LDAP Protocol version.'); @@ -624,7 +698,25 @@ class Connection extends LDAPUtility { throw new ServerNotAvailableException('Could not disable LDAP referrals.'); } + if (!$this->ldap->setOption($this->ldapConnectionRes, LDAP_OPT_NETWORK_TIMEOUT, $this->configuration->ldapConnectionTimeout)) { + throw new ServerNotAvailableException('Could not set network timeout'); + } + if ($this->configuration->ldapTLS) { + if ($this->configuration->turnOffCertCheck) { + if ($this->ldap->setOption($this->ldapConnectionRes, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER)) { + $this->logger->debug( + 'Turned off SSL certificate validation successfully.', + ['app' => 'user_ldap'] + ); + } else { + $this->logger->warning( + 'Could not turn off SSL certificate validation.', + ['app' => 'user_ldap'] + ); + } + } + if (!$this->ldap->startTls($this->ldapConnectionRes)) { throw new ServerNotAvailableException('Start TLS failed, when connecting to LDAP host ' . $host . '.'); } @@ -647,11 +739,7 @@ class Connection extends LDAPUtility { if ( count($this->bindResult) !== 0 - && $this->bindResult['dn'] === $this->configuration->ldapAgentName - && \OC::$server->getHasher()->verify( - $this->configPrefix . $this->configuration->ldapAgentPassword, - $this->bindResult['hash'] - ) + && $this->bindResult['sum'] === md5($this->configuration->ldapAgentName . $this->configPrefix . $this->configuration->ldapAgentPassword) ) { // don't attempt to bind again with the same data as before // bind might have been invoked via getConnectionResource(), @@ -660,25 +748,28 @@ class Connection extends LDAPUtility { } $ldapLogin = @$this->ldap->bind($cr, - $this->configuration->ldapAgentName, - $this->configuration->ldapAgentPassword); + $this->configuration->ldapAgentName, + $this->configuration->ldapAgentPassword); $this->bindResult = [ - 'dn' => $this->configuration->ldapAgentName, - 'hash' => \OC::$server->getHasher()->hash($this->configPrefix . $this->configuration->ldapAgentPassword), + 'sum' => md5($this->configuration->ldapAgentName . $this->configPrefix . $this->configuration->ldapAgentPassword), 'result' => $ldapLogin, ]; if (!$ldapLogin) { $errno = $this->ldap->errno($cr); - \OCP\Util::writeLog('user_ldap', + $this->logger->warning( 'Bind failed: ' . $errno . ': ' . $this->ldap->error($cr), - ILogger::WARN); + ['app' => 'user_ldap'] + ); - // Set to failure mode, if LDAP error code is not LDAP_SUCCESS or LDAP_INVALID_CREDENTIALS - // or (needed for Apple Open Directory:) LDAP_INSUFFICIENT_ACCESS - if ($errno !== 0 && $errno !== 49 && $errno !== 50) { + // Set to failure mode, if LDAP error code is not one of + // - LDAP_SUCCESS (0) + // - LDAP_INVALID_CREDENTIALS (49) + // - LDAP_INSUFFICIENT_ACCESS (50, spotted Apple Open Directory) + // - LDAP_UNWILLING_TO_PERFORM (53, spotted eDirectory) + if (!in_array($errno, [0, 49, 50, 53], true)) { $this->ldapConnectionRes = null; } diff --git a/apps/user_ldap/lib/ConnectionFactory.php b/apps/user_ldap/lib/ConnectionFactory.php index 48275ff8c3c..dd0ad31920a 100644 --- a/apps/user_ldap/lib/ConnectionFactory.php +++ b/apps/user_ldap/lib/ConnectionFactory.php @@ -1,34 +1,15 @@ <?php + /** - * @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; class ConnectionFactory { - /** @var ILDAPWrapper */ - private $ldap; - - public function __construct(ILDAPWrapper $ldap) { - $this->ldap = $ldap; + public function __construct( + private ILDAPWrapper $ldap, + ) { } public function get($prefix) { diff --git a/apps/user_ldap/lib/Controller/ConfigAPIController.php b/apps/user_ldap/lib/Controller/ConfigAPIController.php index b96aee291d5..d98e6d41b52 100644 --- a/apps/user_ldap/lib/Controller/ConfigAPIController.php +++ b/apps/user_ldap/lib/Controller/ConfigAPIController.php @@ -1,27 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Controller; use OC\CapabilitiesManager; @@ -30,36 +12,31 @@ use OC\Security\IdentityProof\Manager; use OCA\User_LDAP\Configuration; use OCA\User_LDAP\ConnectionFactory; use OCA\User_LDAP\Helper; +use OCA\User_LDAP\Settings\Admin; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSBadRequestException; use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCS\OCSNotFoundException; -use OCP\ILogger; use OCP\IRequest; use OCP\IUserManager; use OCP\IUserSession; +use OCP\ServerVersion; +use Psr\Log\LoggerInterface; class ConfigAPIController extends OCSController { - - /** @var Helper */ - private $ldapHelper; - - /** @var ILogger */ - private $logger; - - /** @var ConnectionFactory */ - private $connectionFactory; - public function __construct( - $appName, + string $appName, IRequest $request, CapabilitiesManager $capabilitiesManager, IUserSession $userSession, IUserManager $userManager, Manager $keyManager, - Helper $ldapHelper, - ILogger $logger, - ConnectionFactory $connectionFactory + ServerVersion $serverVersion, + private Helper $ldapHelper, + private LoggerInterface $logger, + private ConnectionFactory $connectionFactory, ) { parent::__construct( $appName, @@ -67,87 +44,44 @@ class ConfigAPIController extends OCSController { $capabilitiesManager, $userSession, $userManager, - $keyManager + $keyManager, + $serverVersion, ); - - - $this->ldapHelper = $ldapHelper; - $this->logger = $logger; - $this->connectionFactory = $connectionFactory; } /** - * creates a new (empty) configuration and returns the resulting prefix - * - * Example: curl -X POST -H "OCS-APIREQUEST: true" -u $admin:$password \ - * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config - * - * results in: - * - * <?xml version="1.0"?> - * <ocs> - * <meta> - * <status>ok</status> - * <statuscode>200</statuscode> - * <message>OK</message> - * </meta> - * <data> - * <configID>s40</configID> - * </data> - * </ocs> - * - * Failing example: if an exception is thrown (e.g. Database connection lost) - * the detailed error will be logged. The output will then look like: - * - * <?xml version="1.0"?> - * <ocs> - * <meta> - * <status>failure</status> - * <statuscode>999</statuscode> - * <message>An issue occurred when creating the new config.</message> - * </meta> - * <data/> - * </ocs> + * Create a new (empty) configuration and return the resulting prefix * - * For JSON output provide the format=json parameter - * - * @return DataResponse + * @return DataResponse<Http::STATUS_OK, array{configID: string}, array{}> * @throws OCSException + * + * 200: Config created successfully */ + #[AuthorizedAdminSetting(settings: Admin::class)] public function create() { try { $configPrefix = $this->ldapHelper->getNextServerConfigurationPrefix(); $configHolder = new Configuration($configPrefix); + $configHolder->ldapConfigurationActive = false; $configHolder->saveConfiguration(); } catch (\Exception $e) { - $this->logger->logException($e); + $this->logger->error($e->getMessage(), ['exception' => $e]); throw new OCSException('An issue occurred when creating the new config.'); } return new DataResponse(['configID' => $configPrefix]); } /** - * Deletes a LDAP configuration, if present. - * - * Example: - * curl -X DELETE -H "OCS-APIREQUEST: true" -u $admin:$password \ - * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60 - * - * <?xml version="1.0"?> - * <ocs> - * <meta> - * <status>ok</status> - * <statuscode>200</statuscode> - * <message>OK</message> - * </meta> - * <data/> - * </ocs> + * Delete a LDAP configuration * - * @param string $configID - * @return DataResponse - * @throws OCSBadRequestException + * @param string $configID ID of the config + * @return DataResponse<Http::STATUS_OK, list<empty>, array{}> * @throws OCSException + * @throws OCSNotFoundException Config not found + * + * 200: Config deleted successfully */ + #[AuthorizedAdminSetting(settings: Admin::class)] public function delete($configID) { try { $this->ensureConfigIDExists($configID); @@ -157,7 +91,7 @@ class ConfigAPIController extends OCSController { } catch (OCSException $e) { throw $e; } catch (\Exception $e) { - $this->logger->logException($e); + $this->logger->error($e->getMessage(), ['exception' => $e]); throw new OCSException('An issue occurred when deleting the config.'); } @@ -165,28 +99,18 @@ class ConfigAPIController extends OCSController { } /** - * modifies a configuration + * Modify a configuration * - * Example: - * curl -X PUT -d "configData[ldapHost]=ldaps://my.ldap.server&configData[ldapPort]=636" \ - * -H "OCS-APIREQUEST: true" -u $admin:$password \ - * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60 - * - * <?xml version="1.0"?> - * <ocs> - * <meta> - * <status>ok</status> - * <statuscode>200</statuscode> - * <message>OK</message> - * </meta> - * <data/> - * </ocs> - * - * @param string $configID - * @param array $configData - * @return DataResponse + * @param string $configID ID of the config + * @param array<string, mixed> $configData New config + * @return DataResponse<Http::STATUS_OK, list<empty>, array{}> * @throws OCSException + * @throws OCSBadRequestException Modifying config is not possible + * @throws OCSNotFoundException Config not found + * + * 200: Config returned */ + #[AuthorizedAdminSetting(settings: Admin::class)] public function modify($configID, $configData) { try { $this->ensureConfigIDExists($configID); @@ -209,7 +133,7 @@ class ConfigAPIController extends OCSController { } catch (OCSException $e) { throw $e; } catch (\Exception $e) { - $this->logger->logException($e); + $this->logger->error($e->getMessage(), ['exception' => $e]); throw new OCSException('An issue occurred when modifying the config.'); } @@ -217,8 +141,9 @@ class ConfigAPIController extends OCSController { } /** - * retrieves a configuration + * Get a configuration * + * Output can look like this: * <?xml version="1.0"?> * <ocs> * <meta> @@ -281,18 +206,22 @@ class ConfigAPIController extends OCSController { * </data> * </ocs> * - * @param string $configID - * @param bool|string $showPassword - * @return DataResponse + * @param string $configID ID of the config + * @param bool $showPassword Whether to show the password + * @return DataResponse<Http::STATUS_OK, array<string, mixed>, array{}> * @throws OCSException + * @throws OCSNotFoundException Config not found + * + * 200: Config returned */ + #[AuthorizedAdminSetting(settings: Admin::class)] public function show($configID, $showPassword = false) { try { $this->ensureConfigIDExists($configID); $config = new Configuration($configID); $data = $config->getConfiguration(); - if (!(int)$showPassword) { + if (!$showPassword) { $data['ldapAgentPassword'] = '***'; } foreach ($data as $key => $value) { @@ -304,7 +233,7 @@ class ConfigAPIController extends OCSController { } catch (OCSException $e) { throw $e; } catch (\Exception $e) { - $this->logger->logException($e); + $this->logger->error($e->getMessage(), ['exception' => $e]); throw new OCSException('An issue occurred when modifying the config.'); } @@ -312,12 +241,13 @@ class ConfigAPIController extends OCSController { } /** - * if the given config ID is not available, an exception is thrown + * If the given config ID is not available, an exception is thrown * * @param string $configID * @throws OCSNotFoundException */ - private function ensureConfigIDExists($configID) { + #[AuthorizedAdminSetting(settings: Admin::class)] + private function ensureConfigIDExists($configID): void { $prefixes = $this->ldapHelper->getServerConfigurationPrefixes(); if (!in_array($configID, $prefixes, true)) { throw new OCSNotFoundException('Config ID not found'); diff --git a/apps/user_ldap/lib/Controller/RenewPasswordController.php b/apps/user_ldap/lib/Controller/RenewPasswordController.php index 715ca1a170c..8389a362b8f 100644 --- a/apps/user_ldap/lib/Controller/RenewPasswordController.php +++ b/apps/user_ldap/lib/Controller/RenewPasswordController.php @@ -1,33 +1,19 @@ <?php + /** - * @copyright Copyright (c) 2017 Roger Szabo <roger.szabo@web.de> - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Roger Szabo <roger.szabo@web.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Controller; -use OC\HintException; use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\Attribute\NoCSRFRequired; +use OCP\AppFramework\Http\Attribute\OpenAPI; +use OCP\AppFramework\Http\Attribute\PublicPage; +use OCP\AppFramework\Http\Attribute\UseSession; use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Http\TemplateResponse; +use OCP\HintException; use OCP\IConfig; use OCP\IL10N; use OCP\IRequest; @@ -36,18 +22,8 @@ use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserManager; +#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class RenewPasswordController extends Controller { - /** @var IUserManager */ - private $userManager; - /** @var IConfig */ - private $config; - /** @var IL10N */ - protected $l10n; - /** @var ISession */ - private $session; - /** @var IURLGenerator */ - private $urlGenerator; - /** * @param string $appName * @param IRequest $request @@ -55,35 +31,35 @@ class RenewPasswordController extends Controller { * @param IConfig $config * @param IURLGenerator $urlGenerator */ - public function __construct($appName, IRequest $request, IUserManager $userManager, - IConfig $config, IL10N $l10n, ISession $session, IURLGenerator $urlGenerator) { + public function __construct( + $appName, + IRequest $request, + private IUserManager $userManager, + private IConfig $config, + protected IL10N $l10n, + private ISession $session, + private IURLGenerator $urlGenerator, + ) { parent::__construct($appName, $request); - $this->userManager = $userManager; - $this->config = $config; - $this->l10n = $l10n; - $this->session = $session; - $this->urlGenerator = $urlGenerator; } /** - * @PublicPage - * @NoCSRFRequired - * * @return RedirectResponse */ + #[PublicPage] + #[NoCSRFRequired] public function cancel() { return new RedirectResponse($this->urlGenerator->linkToRouteAbsolute('core.login.showLoginForm')); } /** - * @PublicPage - * @NoCSRFRequired - * @UseSession - * * @param string $user * * @return TemplateResponse|RedirectResponse */ + #[PublicPage] + #[NoCSRFRequired] + #[UseSession] public function showRenewPasswordForm($user) { if ($this->config->getUserValue($user, 'user_ldap', 'needsPasswordReset') !== 'true') { return new RedirectResponse($this->urlGenerator->linkToRouteAbsolute('core.login.showLoginForm')); @@ -93,7 +69,7 @@ class RenewPasswordController extends Controller { $errors = []; $messages = []; if (is_array($renewPasswordMessages)) { - list($errors, $messages) = $renewPasswordMessages; + [$errors, $messages] = $renewPasswordMessages; } $this->session->remove('renewPasswordMessages'); foreach ($errors as $value) { @@ -119,15 +95,14 @@ class RenewPasswordController extends Controller { } /** - * @PublicPage - * @UseSession - * * @param string $user * @param string $oldPassword * @param string $newPassword * * @return RedirectResponse */ + #[PublicPage] + #[UseSession] public function tryRenewPassword($user, $oldPassword, $newPassword) { if ($this->config->getUserValue($user, 'user_ldap', 'needsPasswordReset') !== 'true') { return new RedirectResponse($this->urlGenerator->linkToRouteAbsolute('core.login.showLoginForm')); @@ -140,11 +115,11 @@ class RenewPasswordController extends Controller { ]); return new RedirectResponse($this->urlGenerator->linkToRoute('user_ldap.renewPassword.showRenewPasswordForm', $args)); } - + try { if (!is_null($newPassword) && \OC_User::setPassword($user, $newPassword)) { $this->session->set('loginMessages', [ - [], [$this->l10n->t("Please login with the new password")] + [], [$this->l10n->t('Please login with the new password')] ]); $this->config->setUserValue($user, 'user_ldap', 'needsPasswordReset', 'false'); return new RedirectResponse($this->urlGenerator->linkToRoute('core.login.showLoginForm', $args)); @@ -163,12 +138,11 @@ class RenewPasswordController extends Controller { } /** - * @PublicPage - * @NoCSRFRequired - * @UseSession - * * @return RedirectResponse */ + #[PublicPage] + #[NoCSRFRequired] + #[UseSession] public function showLoginFormInvalidPassword($user) { $args = !is_null($user) ? ['user' => $user] : []; $this->session->set('loginMessages', [ diff --git a/apps/user_ldap/lib/DataCollector/LdapDataCollector.php b/apps/user_ldap/lib/DataCollector/LdapDataCollector.php new file mode 100644 index 00000000000..2f74a628a32 --- /dev/null +++ b/apps/user_ldap/lib/DataCollector/LdapDataCollector.php @@ -0,0 +1,36 @@ +<?php + +declare(strict_types = 1); +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\DataCollector; + +use OC\AppFramework\Http\Request; +use OCP\AppFramework\Http\Response; +use OCP\DataCollector\AbstractDataCollector; + +class LdapDataCollector extends AbstractDataCollector { + public function startLdapRequest(string $query, array $args, array $backtrace): void { + $this->data[] = [ + 'start' => microtime(true), + 'query' => $query, + 'args' => $args, + 'end' => microtime(true), + 'backtrace' => $backtrace, + ]; + } + + public function stopLastLdapRequest(): void { + $this->data[count($this->data) - 1]['end'] = microtime(true); + } + + public function getName(): string { + return 'ldap'; + } + + public function collect(Request $request, Response $response, ?\Throwable $exception = null): void { + } +} diff --git a/apps/user_ldap/lib/Db/GroupMembership.php b/apps/user_ldap/lib/Db/GroupMembership.php new file mode 100644 index 00000000000..6141f1b18c9 --- /dev/null +++ b/apps/user_ldap/lib/Db/GroupMembership.php @@ -0,0 +1,31 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Db; + +use OCP\AppFramework\Db\Entity; + +/** + * @method void setUserid(string $userid) + * @method string getUserid() + * @method void setGroupid(string $groupid) + * @method string getGroupid() + */ +class GroupMembership extends Entity { + /** @var string */ + protected $groupid; + + /** @var string */ + protected $userid; + + public function __construct() { + $this->addType('groupid', 'string'); + $this->addType('userid', 'string'); + } +} diff --git a/apps/user_ldap/lib/Db/GroupMembershipMapper.php b/apps/user_ldap/lib/Db/GroupMembershipMapper.php new file mode 100644 index 00000000000..b3d6c31dda6 --- /dev/null +++ b/apps/user_ldap/lib/Db/GroupMembershipMapper.php @@ -0,0 +1,72 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Db; + +use OCP\AppFramework\Db\QBMapper; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; + +/** + * @template-extends QBMapper<GroupMembership> + */ +class GroupMembershipMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'ldap_group_membership', GroupMembership::class); + } + + /** + * @return string[] + */ + public function getKnownGroups(): array { + $query = $this->db->getQueryBuilder(); + $result = $query->selectDistinct('groupid') + ->from($this->getTableName()) + ->executeQuery(); + + $groups = array_column($result->fetchAll(), 'groupid'); + $result->closeCursor(); + return $groups; + } + + /** + * @return GroupMembership[] + */ + public function findGroupMemberships(string $groupid): array { + $qb = $this->db->getQueryBuilder(); + $select = $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('groupid', $qb->createNamedParameter($groupid))); + + return $this->findEntities($select); + } + + /** + * @return GroupMembership[] + */ + public function findGroupMembershipsForUser(string $userid): array { + $qb = $this->db->getQueryBuilder(); + $select = $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('userid', $qb->createNamedParameter($userid))); + + return $this->findEntities($select); + } + + public function deleteGroups(array $removedGroups): void { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->in('groupid', $query->createParameter('groupids'))); + + foreach (array_chunk($removedGroups, 1000) as $removedGroupsChunk) { + $query->setParameter('groupids', $removedGroupsChunk, IQueryBuilder::PARAM_STR_ARRAY); + $query->executeStatement(); + } + } +} diff --git a/apps/user_ldap/lib/Events/GroupBackendRegistered.php b/apps/user_ldap/lib/Events/GroupBackendRegistered.php index 6f620cb4e57..a94c239c1b3 100644 --- a/apps/user_ldap/lib/Events/GroupBackendRegistered.php +++ b/apps/user_ldap/lib/Events/GroupBackendRegistered.php @@ -3,28 +3,9 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Events; use OCA\User_LDAP\GroupPluginManager; @@ -38,14 +19,10 @@ use OCP\EventDispatcher\Event; */ class GroupBackendRegistered extends Event { - /** @var GroupPluginManager */ - private $pluginManager; - /** @var IGroupLDAP */ - private $backend; - - public function __construct(IGroupLDAP $backend, GroupPluginManager $pluginManager) { - $this->pluginManager = $pluginManager; - $this->backend = $backend; + public function __construct( + private IGroupLDAP $backend, + private GroupPluginManager $pluginManager, + ) { } public function getBackend(): IGroupLDAP { diff --git a/apps/user_ldap/lib/Events/UserBackendRegistered.php b/apps/user_ldap/lib/Events/UserBackendRegistered.php index 07b6060cb2b..a26e23f8f83 100644 --- a/apps/user_ldap/lib/Events/UserBackendRegistered.php +++ b/apps/user_ldap/lib/Events/UserBackendRegistered.php @@ -3,28 +3,9 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Events; use OCA\User_LDAP\IUserLDAP; @@ -38,14 +19,10 @@ use OCP\EventDispatcher\Event; */ class UserBackendRegistered extends Event { - /** @var IUserLDAP */ - private $backend; - /** @var UserPluginManager */ - private $pluginManager; - - public function __construct(IUserLDAP $backend, UserPluginManager $pluginManager) { - $this->backend = $backend; - $this->pluginManager = $pluginManager; + public function __construct( + private IUserLDAP $backend, + private UserPluginManager $pluginManager, + ) { } public function getBackend(): IUserLDAP { diff --git a/apps/user_ldap/lib/Exceptions/AttributeNotSet.php b/apps/user_ldap/lib/Exceptions/AttributeNotSet.php index faa617efd13..4d6053eda66 100644 --- a/apps/user_ldap/lib/Exceptions/AttributeNotSet.php +++ b/apps/user_ldap/lib/Exceptions/AttributeNotSet.php @@ -1,27 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Exceptions; class AttributeNotSet extends \RuntimeException { diff --git a/apps/user_ldap/lib/Exceptions/ConfigurationIssueException.php b/apps/user_ldap/lib/Exceptions/ConfigurationIssueException.php new file mode 100644 index 00000000000..efeb426b13d --- /dev/null +++ b/apps/user_ldap/lib/Exceptions/ConfigurationIssueException.php @@ -0,0 +1,15 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Exceptions; + +use OCP\HintException; + +class ConfigurationIssueException extends HintException { +} diff --git a/apps/user_ldap/lib/Exceptions/ConstraintViolationException.php b/apps/user_ldap/lib/Exceptions/ConstraintViolationException.php index 46cae91e2c7..d0d384c31de 100644 --- a/apps/user_ldap/lib/Exceptions/ConstraintViolationException.php +++ b/apps/user_ldap/lib/Exceptions/ConstraintViolationException.php @@ -1,27 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2017 Roger Szabo <roger.szabo@web.de> - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Roger Szabo <roger.szabo@web.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Exceptions; class ConstraintViolationException extends \Exception { diff --git a/apps/user_ldap/lib/Exceptions/NoMoreResults.php b/apps/user_ldap/lib/Exceptions/NoMoreResults.php new file mode 100644 index 00000000000..b5621d86eb6 --- /dev/null +++ b/apps/user_ldap/lib/Exceptions/NoMoreResults.php @@ -0,0 +1,12 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\User_LDAP\Exceptions; + +class NoMoreResults extends \Exception { +} diff --git a/apps/user_ldap/lib/Exceptions/NotOnLDAP.php b/apps/user_ldap/lib/Exceptions/NotOnLDAP.php index bd59d4956c2..cd74e918829 100644 --- a/apps/user_ldap/lib/Exceptions/NotOnLDAP.php +++ b/apps/user_ldap/lib/Exceptions/NotOnLDAP.php @@ -1,27 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Exceptions; class NotOnLDAP extends \Exception { diff --git a/apps/user_ldap/lib/FilesystemHelper.php b/apps/user_ldap/lib/FilesystemHelper.php deleted file mode 100644 index 6a52afcdec1..00000000000 --- a/apps/user_ldap/lib/FilesystemHelper.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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\User_LDAP; - -/** - * @brief wraps around static Nextcloud core methods - */ -class FilesystemHelper { - - /** - * @brief states whether the filesystem was loaded - * @return bool - */ - public function isLoaded() { - return \OC\Files\Filesystem::$loaded; - } - - /** - * @brief initializes the filesystem for the given user - * @param string $uid the Nextcloud username of the user - */ - public function setup($uid) { - \OC_Util::setupFS($uid); - } -} diff --git a/apps/user_ldap/lib/GroupPluginManager.php b/apps/user_ldap/lib/GroupPluginManager.php index 56c4aab9f3b..9e8ae6805a4 100644 --- a/apps/user_ldap/lib/GroupPluginManager.php +++ b/apps/user_ldap/lib/GroupPluginManager.php @@ -1,35 +1,20 @@ <?php + /** - * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br) - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; use OCP\GroupInterface; +use OCP\Server; +use Psr\Log\LoggerInterface; class GroupPluginManager { - private $respondToActions = 0; + private int $respondToActions = 0; - private $which = [ + /** @var array<int, ?ILDAPGroupPlugin> */ + private array $which = [ GroupInterface::CREATE_GROUP => null, GroupInterface::DELETE_GROUP => null, GroupInterface::ADD_TO_GROUP => null, @@ -38,6 +23,8 @@ class GroupPluginManager { GroupInterface::GROUP_DETAILS => null ]; + private bool $suppressDeletion = false; + /** * @return int All implemented actions */ @@ -56,7 +43,7 @@ class GroupPluginManager { foreach ($this->which as $action => $v) { if ((bool)($respondToActions & $action)) { $this->which[$action] = $plugin; - \OC::$server->getLogger()->debug("Registered action ".$action." to plugin ".get_class($plugin), ['app' => 'user_ldap']); + Server::get(LoggerInterface::class)->debug('Registered action ' . $action . ' to plugin ' . get_class($plugin), ['app' => 'user_ldap']); } } } @@ -85,16 +72,31 @@ class GroupPluginManager { throw new \Exception('No plugin implements createGroup in this LDAP Backend.'); } + public function canDeleteGroup(): bool { + return !$this->suppressDeletion && $this->implementsActions(GroupInterface::DELETE_GROUP); + } + + /** + * @return bool – the value before the change + */ + public function setSuppressDeletion(bool $value): bool { + $old = $this->suppressDeletion; + $this->suppressDeletion = $value; + return $old; + } + /** * Delete a group - * @param string $gid Group Id of the group to delete - * @return bool + * * @throws \Exception */ - public function deleteGroup($gid) { + public function deleteGroup(string $gid): bool { $plugin = $this->which[GroupInterface::DELETE_GROUP]; if ($plugin) { + if ($this->suppressDeletion) { + return false; + } return $plugin->deleteGroup($gid); } throw new \Exception('No plugin implements deleteGroup in this LDAP Backend.'); @@ -147,7 +149,7 @@ class GroupPluginManager { $plugin = $this->which[GroupInterface::COUNT_USERS]; if ($plugin) { - return $plugin->countUsersInGroup($gid,$search); + return $plugin->countUsersInGroup($gid, $search); } throw new \Exception('No plugin implements countUsersInGroup in this LDAP Backend.'); } diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php index c84f22bdd30..271cc96afbd 100644 --- a/apps/user_ldap/lib/Group_LDAP.php +++ b/apps/user_ldap/lib/Group_LDAP.php @@ -1,78 +1,49 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Alexander Bergolth <leo@strike.wu.ac.at> - * @author Alex Weirig <alex.weirig@technolink.lu> - * @author alexweirig <alex.weirig@technolink.lu> - * @author Andreas Fischer <bantu@owncloud.com> - * @author Andreas Pflug <dev@admin4.org> - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Clement Wong <git@clement.hk> - * @author Frédéric Fortier <frederic.fortier@oronospolytechnique.com> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Nicolas Grekas <nicolas.grekas@gmail.com> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roland Tapken <roland@bitarbeiter.net> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Tobias Perschon <tobias@perschon.at> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * @author Xuanwo <xuanwo@yunify.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; -use Closure; use Exception; -use OC; -use OC\Cache\CappedMemoryCache; use OC\ServerNotAvailableException; +use OCA\User_LDAP\User\OfflineUser; +use OCP\Cache\CappedMemoryCache; +use OCP\Group\Backend\ABackend; +use OCP\Group\Backend\IDeleteGroupBackend; use OCP\Group\Backend\IGetDisplayNameBackend; +use OCP\Group\Backend\IIsAdminBackend; use OCP\GroupInterface; -use OCP\ILogger; - -class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, IGetDisplayNameBackend { - protected $enabled = false; - - /** @var string[][] $cachedGroupMembers array of users with gid as key */ - protected $cachedGroupMembers; - /** @var string[] $cachedGroupsByMember array of groups with uid as key */ - protected $cachedGroupsByMember; - /** @var string[] $cachedNestedGroups array of groups with gid (DN) as key */ - protected $cachedNestedGroups; - /** @var GroupPluginManager */ - protected $groupPluginManager; - /** @var ILogger */ - protected $logger; +use OCP\IConfig; +use OCP\IUserManager; +use OCP\Server; +use Psr\Log\LoggerInterface; +use function json_decode; + +class Group_LDAP extends ABackend implements GroupInterface, IGroupLDAP, IGetDisplayNameBackend, IDeleteGroupBackend, IIsAdminBackend { + protected bool $enabled = false; + + /** @var CappedMemoryCache<string[]> $cachedGroupMembers array of user DN with gid as key */ + protected CappedMemoryCache $cachedGroupMembers; + /** @var CappedMemoryCache<array[]> $cachedGroupsByMember array of groups with user DN as key */ + protected CappedMemoryCache $cachedGroupsByMember; + /** @var CappedMemoryCache<string[]> $cachedNestedGroups array of groups with gid (DN) as key */ + protected CappedMemoryCache $cachedNestedGroups; + protected LoggerInterface $logger; /** * @var string $ldapGroupMemberAssocAttr contains the LDAP setting (in lower case) with the same name */ - protected $ldapGroupMemberAssocAttr; - - public function __construct(Access $access, GroupPluginManager $groupPluginManager) { - parent::__construct($access); + protected string $ldapGroupMemberAssocAttr; + + public function __construct( + protected Access $access, + protected GroupPluginManager $groupPluginManager, + private IConfig $config, + private IUserManager $ncUserManager, + ) { $filter = $this->access->connection->ldapGroupFilter; $gAssoc = $this->access->connection->ldapGroupMemberAssocAttr; if (!empty($filter) && !empty($gAssoc)) { @@ -82,21 +53,19 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $this->cachedGroupMembers = new CappedMemoryCache(); $this->cachedGroupsByMember = new CappedMemoryCache(); $this->cachedNestedGroups = new CappedMemoryCache(); - $this->groupPluginManager = $groupPluginManager; - $this->logger = OC::$server->getLogger(); - $this->ldapGroupMemberAssocAttr = strtolower($gAssoc); + $this->logger = Server::get(LoggerInterface::class); + $this->ldapGroupMemberAssocAttr = strtolower((string)$gAssoc); } /** - * is user in group? + * Check if user is in group * * @param string $uid uid of the user * @param string $gid gid of the group - * @return bool * @throws Exception * @throws ServerNotAvailableException */ - public function inGroup($uid, $gid) { + public function inGroup($uid, $gid): bool { if (!$this->enabled) { return false; } @@ -203,7 +172,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I * @throws ServerNotAvailableException */ public function getDynamicGroupMembers(string $dnGroup): array { - $dynamicGroupMemberURL = strtolower($this->access->connection->ldapDynamicGroupMemberURL); + $dynamicGroupMemberURL = strtolower((string)$this->access->connection->ldapDynamicGroupMemberURL); if (empty($dynamicGroupMemberURL)) { return []; @@ -240,16 +209,17 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** + * Get group members from dn. + * @psalm-param array<string, bool> $seen List of DN that have already been processed. * @throws ServerNotAvailableException */ - private function _groupMembers(string $dnGroup, ?array &$seen = null): array { - if ($seen === null) { - $seen = []; - } - $allMembers = []; - if (array_key_exists($dnGroup, $seen)) { + private function _groupMembers(string $dnGroup, array $seen = [], bool &$recursive = false): array { + if (isset($seen[$dnGroup])) { + $recursive = true; return []; } + $seen[$dnGroup] = true; + // used extensively in cron job, caching makes sense for nested groups $cacheKey = '_groupMembers' . $dnGroup; $groupMembers = $this->access->connection->getFromCache($cacheKey); @@ -263,7 +233,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I && $this->access->connection->ldapMatchingRuleInChainState !== Configuration::LDAP_SERVER_FEATURE_UNAVAILABLE ) { $attemptedLdapMatchingRuleInChain = true; - // compatibility hack with servers supporting :1.2.840.113556.1.4.1941:, and others) + // Use matching rule 1.2.840.113556.1.4.1941 if available (LDAP_MATCHING_RULE_IN_CHAIN) $filter = $this->access->combineFilterWithAnd([ $this->access->connection->ldapUserFilter, $this->access->connection->ldapUserDisplayName . '=*', @@ -278,27 +248,50 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I return $carry; }, []); if ($this->access->connection->ldapMatchingRuleInChainState === Configuration::LDAP_SERVER_FEATURE_AVAILABLE) { + $this->access->connection->writeToCache($cacheKey, $result); return $result; } elseif (!empty($memberRecords)) { $this->access->connection->ldapMatchingRuleInChainState = Configuration::LDAP_SERVER_FEATURE_AVAILABLE; $this->access->connection->saveConfiguration(); + $this->access->connection->writeToCache($cacheKey, $result); return $result; } // when feature availability is unknown, and the result is empty, continue and test with original approach } - $seen[$dnGroup] = 1; + $allMembers = []; $members = $this->access->readAttribute($dnGroup, $this->access->connection->ldapGroupMemberAssocAttr); if (is_array($members)) { - $fetcher = function ($memberDN, &$seen) { - return $this->_groupMembers($memberDN, $seen); - }; - $allMembers = $this->walkNestedGroups($dnGroup, $fetcher, $members); + if ((int)$this->access->connection->ldapNestedGroups === 1) { + while ($recordDn = array_shift($members)) { + $nestedMembers = $this->_groupMembers($recordDn, $seen, $recursive); + if (!empty($nestedMembers)) { + // Group, queue its members for processing + $members = array_merge($members, $nestedMembers); + } else { + // User (or empty group, or previously seen group), add it to the member list + $allMembers[] = $recordDn; + } + } + } else { + $allMembers = $members; + } } $allMembers += $this->getDynamicGroupMembers($dnGroup); - $this->access->connection->writeToCache($cacheKey, $allMembers); + $allMembers = array_unique($allMembers); + + // A group cannot be a member of itself + $index = array_search($dnGroup, $allMembers, true); + if ($index !== false) { + unset($allMembers[$index]); + } + + if (!$recursive) { + $this->access->connection->writeToCache($cacheKey, $allMembers); + } + if (isset($attemptedLdapMatchingRuleInChain) && $this->access->connection->ldapMatchingRuleInChainState === Configuration::LDAP_SERVER_FEATURE_UNKNOWN && !empty($allMembers) @@ -306,73 +299,47 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $this->access->connection->ldapMatchingRuleInChainState = Configuration::LDAP_SERVER_FEATURE_UNAVAILABLE; $this->access->connection->saveConfiguration(); } + return $allMembers; } /** + * @return string[] * @throws ServerNotAvailableException */ - private function _getGroupDNsFromMemberOf(string $dn): array { - $groups = $this->access->readAttribute($dn, 'memberOf'); - if (!is_array($groups)) { + private function _getGroupDNsFromMemberOf(string $dn, array &$seen = []): array { + if (isset($seen[$dn])) { return []; } + $seen[$dn] = true; - $fetcher = function ($groupDN) { - if (isset($this->cachedNestedGroups[$groupDN])) { - $nestedGroups = $this->cachedNestedGroups[$groupDN]; - } else { - $nestedGroups = $this->access->readAttribute($groupDN, 'memberOf'); - if (!is_array($nestedGroups)) { - $nestedGroups = []; - } - $this->cachedNestedGroups[$groupDN] = $nestedGroups; - } - return $nestedGroups; - }; - - $groups = $this->walkNestedGroups($dn, $fetcher, $groups); - return $this->filterValidGroups($groups); - } - - private function walkNestedGroups(string $dn, Closure $fetcher, array $list): array { - $nesting = (int)$this->access->connection->ldapNestedGroups; - // depending on the input, we either have a list of DNs or a list of LDAP records - // also, the output expects either DNs or records. Testing the first element should suffice. - $recordMode = is_array($list) && isset($list[0]) && is_array($list[0]) && isset($list[0]['dn'][0]); - - if ($nesting !== 1) { - if ($recordMode) { - // the keys are numeric, but should hold the DN - return array_reduce($list, function ($transformed, $record) use ($dn) { - if ($record['dn'][0] != $dn) { - $transformed[$record['dn'][0]] = $record; - } - return $transformed; - }, []); - } - return $list; + if (isset($this->cachedNestedGroups[$dn])) { + return $this->cachedNestedGroups[$dn]; } - $seen = []; - while ($record = array_shift($list)) { - $recordDN = $recordMode ? $record['dn'][0] : $record; - if ($recordDN === $dn || array_key_exists($recordDN, $seen)) { - // Prevent loops - continue; + $allGroups = []; + $groups = $this->access->readAttribute($dn, 'memberOf'); + if (is_array($groups)) { + if ((int)$this->access->connection->ldapNestedGroups === 1) { + while ($recordDn = array_shift($groups)) { + $nestedParents = $this->_getGroupDNsFromMemberOf($recordDn, $seen); + $groups = array_merge($groups, $nestedParents); + $allGroups[] = $recordDn; + } + } else { + $allGroups = $groups; } - $fetched = $fetcher($record, $seen); - $list = array_merge($list, $fetched); - $seen[$recordDN] = $record; } - return $recordMode ? $seen : array_keys($seen); + // We do not perform array_unique here at it is done in getUserGroups later + $this->cachedNestedGroups[$dn] = $allGroups; + return $this->filterValidGroups($allGroups); } /** - * translates a gidNumber into an ownCloud internal name + * Translates a gidNumber into the Nextcloud internal name. * - * @return string|bool + * @return string|false The nextcloud internal name. * @throws Exception * @throws ServerNotAvailableException */ @@ -393,12 +360,14 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** + * @return string|null|false The name of the group * @throws ServerNotAvailableException * @throws Exception */ private function getNameOfGroup(string $filter, string $cacheKey) { $result = $this->access->searchGroups($filter, ['dn'], 1); if (empty($result)) { + $this->access->connection->writeToCache($cacheKey, false); return null; } $dn = $result[0]['dn'][0]; @@ -414,9 +383,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * returns the entry's gidNumber - * - * @return string|bool + * @return string|bool The entry's gidNumber * @throws ServerNotAvailableException */ private function getEntryGidNumber(string $dn, string $attribute) { @@ -428,7 +395,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * @return string|bool + * @return string|bool The group's gidNumber * @throws ServerNotAvailableException */ public function getGroupGidNumber(string $dn) { @@ -436,14 +403,13 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * returns the user's gidNumber - * - * @return string|bool + * @return string|bool The user's gidNumber * @throws ServerNotAvailableException */ public function getUserGidNumber(string $dn) { $gidNumber = false; if ($this->access->connection->hasGidNumber) { + // FIXME: when $dn does not exist on LDAP anymore, this will be set wrongly to false :/ $gidNumber = $this->getEntryGidNumber($dn, $this->access->connection->ldapGidNumber); if ($gidNumber === false) { $this->access->connection->hasGidNumber = false; @@ -473,21 +439,20 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * returns a list of users that have the given group as gid number - * + * @return array<int,string> A list of users that have the given group as gid number * @throws ServerNotAvailableException */ public function getUsersInGidNumber( string $groupDN, string $search = '', ?int $limit = -1, - ?int $offset = 0 + ?int $offset = 0, ): array { try { $filter = $this->prepareFilterForUsersHasGidNumber($groupDN, $search); $users = $this->access->fetchListOfUsers( $filter, - [$this->access->connection->ldapUserDisplayName, 'dn'], + $this->access->userManager->getAttributes(true), $limit, $offset ); @@ -501,7 +466,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I /** * @throws ServerNotAvailableException - * @return bool + * @return false|string */ public function getUserGroupByGid(string $dn) { $groupID = $this->getUserGidNumber($dn); @@ -516,17 +481,17 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * translates a primary group ID into an Nextcloud internal name + * Translates a primary group ID into an Nextcloud internal name * - * @return string|bool + * @return string|false * @throws Exception * @throws ServerNotAvailableException */ public function primaryGroupID2Name(string $gid, string $dn) { - $cacheKey = 'primaryGroupIDtoName'; - $groupNames = $this->access->connection->getFromCache($cacheKey); - if (!is_null($groupNames) && isset($groupNames[$gid])) { - return $groupNames[$gid]; + $cacheKey = 'primaryGroupIDtoName_' . $gid; + $groupName = $this->access->connection->getFromCache($cacheKey); + if (!is_null($groupName)) { + return $groupName; } $domainObjectSid = $this->access->getSID($dn); @@ -543,9 +508,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * returns the entry's primary group ID - * - * @return string|bool + * @return string|false The entry's group Id * @throws ServerNotAvailableException */ private function getEntryGroupID(string $dn, string $attribute) { @@ -557,7 +520,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * @return string|bool + * @return string|false The entry's primary group Id * @throws ServerNotAvailableException */ public function getGroupPrimaryGroupID(string $dn) { @@ -565,7 +528,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * @return string|bool + * @return string|false * @throws ServerNotAvailableException */ public function getUserPrimaryGroupIDs(string $dn) { @@ -601,18 +564,19 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I /** * @throws ServerNotAvailableException + * @return array<int,string> */ public function getUsersInPrimaryGroup( string $groupDN, string $search = '', ?int $limit = -1, - ?int $offset = 0 + ?int $offset = 0, ): array { try { $filter = $this->prepareFilterForUsersInPrimaryGroup($groupDN, $search); $users = $this->access->fetchListOfUsers( $filter, - [$this->access->connection->ldapUserDisplayName, 'dn'], + $this->access->userManager->getAttributes(true), $limit, $offset ); @@ -631,7 +595,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I string $groupDN, string $search = '', int $limit = -1, - int $offset = 0 + int $offset = 0, ): int { try { $filter = $this->prepareFilterForUsersInPrimaryGroup($groupDN, $search); @@ -645,7 +609,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I } /** - * @return string|bool + * @return string|false * @throws ServerNotAvailableException */ public function getUserPrimaryGroup(string $dn) { @@ -660,6 +624,29 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I return false; } + private function isUserOnLDAP(string $uid): bool { + // forces a user exists check - but does not help if a positive result is cached, while group info is not + $ncUser = $this->ncUserManager->get($uid); + if ($ncUser === null) { + return false; + } + $backend = $ncUser->getBackend(); + if ($backend instanceof User_Proxy) { + // ignoring cache as safeguard (and we are behind the group cache check anyway) + return $backend->userExistsOnLDAP($uid, true); + } + return false; + } + + /** + * @param string $uid + * @return list<string> + */ + protected function getCachedGroupsForUserId(string $uid): array { + $groupStr = $this->config->getUserValue($uid, 'user_ldap', 'cached-group-memberships-' . $this->access->connection->getConfigPrefix(), '[]'); + return json_decode($groupStr, true) ?? []; + } + /** * This function fetches all groups a user belongs to. It does not check * if the user exists at all. @@ -667,19 +654,29 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I * This function includes groups based on dynamic group membership. * * @param string $uid Name of the user - * @return array with group names + * @return list<string> Group names * @throws Exception * @throws ServerNotAvailableException */ - public function getUserGroups($uid) { + public function getUserGroups($uid): array { if (!$this->enabled) { return []; } + $ncUid = $uid; + $cacheKey = 'getUserGroups' . $uid; $userGroups = $this->access->connection->getFromCache($cacheKey); if (!is_null($userGroups)) { return $userGroups; } + + $user = $this->access->userManager->get($uid); + if ($user instanceof OfflineUser) { + // We load known group memberships from configuration for remnants, + // because LDAP server does not contain them anymore + return $this->getCachedGroupsForUserId($uid); + } + $userDN = $this->access->username2dn($uid); if (!$userDN) { $this->access->connection->writeToCache($cacheKey, []); @@ -697,7 +694,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $groupsToMatch = $this->access->fetchListOfGroups( $this->access->connection->ldapGroupFilter, ['dn', $dynamicGroupMemberURL]); foreach ($groupsToMatch as $dynamicGroup) { - if (!array_key_exists($dynamicGroupMemberURL, $dynamicGroup)) { + if (!isset($dynamicGroup[$dynamicGroupMemberURL][0])) { continue; } $pos = strpos($dynamicGroup[$dynamicGroupMemberURL][0], '('); @@ -738,64 +735,48 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I && $this->ldapGroupMemberAssocAttr !== 'memberuid' && $this->ldapGroupMemberAssocAttr !== 'zimbramailforwardingaddress') { $groupDNs = $this->_getGroupDNsFromMemberOf($userDN); - if (is_array($groupDNs)) { - foreach ($groupDNs as $dn) { - $groupName = $this->access->dn2groupname($dn); - if (is_string($groupName)) { - // be sure to never return false if the dn could not be - // resolved to a name, for whatever reason. - $groups[] = $groupName; - } + foreach ($groupDNs as $dn) { + $groupName = $this->access->dn2groupname($dn); + if (is_string($groupName)) { + // be sure to never return false if the dn could not be + // resolved to a name, for whatever reason. + $groups[] = $groupName; } } + } else { + // uniqueMember takes DN, memberuid the uid, so we need to distinguish + switch ($this->ldapGroupMemberAssocAttr) { + case 'uniquemember': + case 'member': + $uid = $userDN; + break; - if ($primaryGroup !== false) { - $groups[] = $primaryGroup; - } - if ($gidGroupName !== false) { - $groups[] = $gidGroupName; - } - $this->access->connection->writeToCache($cacheKey, $groups); - return $groups; - } - - //uniqueMember takes DN, memberuid the uid, so we need to distinguish - switch ($this->ldapGroupMemberAssocAttr) { - case 'uniquemember': - case 'member': - $uid = $userDN; - break; - - case 'memberuid': - case 'zimbramailforwardingaddress': - $result = $this->access->readAttribute($userDN, 'uid'); - if ($result === false) { - $this->logger->debug('No uid attribute found for DN {dn} on {host}', - [ - 'app' => 'user_ldap', - 'dn' => $userDN, - 'host' => $this->access->connection->ldapHost, - ] - ); - $uid = false; - } else { - $uid = $result[0]; - } - break; + case 'memberuid': + case 'zimbramailforwardingaddress': + $result = $this->access->readAttribute($userDN, 'uid'); + if ($result === false) { + $this->logger->debug('No uid attribute found for DN {dn} on {host}', + [ + 'app' => 'user_ldap', + 'dn' => $userDN, + 'host' => $this->access->connection->ldapHost, + ] + ); + $uid = false; + } else { + $uid = $result[0]; + } + break; - default: - // just in case - $uid = $userDN; - break; - } + default: + // just in case + $uid = $userDN; + break; + } - if ($uid !== false) { - if (isset($this->cachedGroupsByMember[$uid])) { - $groups = array_merge($groups, $this->cachedGroupsByMember[$uid]); - } else { + if ($uid !== false) { $groupsByMember = array_values($this->getGroupsByMember($uid)); $groupsByMember = $this->access->nextcloudGroupNames($groupsByMember); - $this->cachedGroupsByMember[$uid] = $groupsByMember; $groups = array_merge($groups, $groupsByMember); } } @@ -807,25 +788,38 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $groups[] = $gidGroupName; } - $groups = array_unique($groups, SORT_LOCALE_STRING); + if (empty($groups) && !$this->isUserOnLDAP($ncUid)) { + // Groups are enabled, but you user has none? Potentially suspicious: + // it could be that the user was deleted from LDAP, but we are not + // aware of it yet. + $groups = $this->getCachedGroupsForUserId($ncUid); + $this->access->connection->writeToCache($cacheKey, $groups); + return $groups; + } + + $groups = array_values(array_unique($groups, SORT_LOCALE_STRING)); $this->access->connection->writeToCache($cacheKey, $groups); + $groupStr = \json_encode($groups); + $this->config->setUserValue($ncUid, 'user_ldap', 'cached-group-memberships-' . $this->access->connection->getConfigPrefix(), $groupStr); + return $groups; } /** + * @return array[] * @throws ServerNotAvailableException */ - private function getGroupsByMember(string $dn, array &$seen = null): array { - if ($seen === null) { - $seen = []; - } - if (array_key_exists($dn, $seen)) { - // avoid loops + private function getGroupsByMember(string $dn, array &$seen = []): array { + if (isset($seen[$dn])) { return []; } - $allGroups = []; $seen[$dn] = true; + + if (isset($this->cachedGroupsByMember[$dn])) { + return $this->cachedGroupsByMember[$dn]; + } + $filter = $this->access->connection->ldapGroupMemberAssocAttr . '=' . $dn; if ($this->ldapGroupMemberAssocAttr === 'zimbramailforwardingaddress') { @@ -838,24 +832,24 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $filter = $this->access->combineFilterWithAnd([$filter, $this->access->connection->ldapGroupFilter]); } + $allGroups = []; $groups = $this->access->fetchListOfGroups($filter, [strtolower($this->access->connection->ldapGroupMemberAssocAttr), $this->access->connection->ldapGroupDisplayName, 'dn']); - if (is_array($groups)) { - $fetcher = function ($dn, &$seen) { - if (is_array($dn) && isset($dn['dn'][0])) { - $dn = $dn['dn'][0]; - } - return $this->getGroupsByMember($dn, $seen); - }; - if (empty($dn)) { - $dn = ""; + if ($nesting === 1) { + while ($record = array_shift($groups)) { + // Note: this has no effect when ldapGroupMemberAssocAttr is uid based + $nestedParents = $this->getGroupsByMember($record['dn'][0], $seen); + $groups = array_merge($groups, $nestedParents); + $allGroups[] = $record; } - - $allGroups = $this->walkNestedGroups($dn, $fetcher, $groups); + } else { + $allGroups = $groups; } + $visibleGroups = $this->filterValidGroups($allGroups); - return array_intersect_key($allGroups, $visibleGroups); + $this->cachedGroupsByMember[$dn] = $visibleGroups; + return $visibleGroups; } /** @@ -865,7 +859,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I * @param string $search * @param int $limit * @param int $offset - * @return array with user ids + * @return array<int,string> user ids * @throws Exception * @throws ServerNotAvailableException */ @@ -897,7 +891,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $groupDN = $this->access->groupname2dn($gid); if (!$groupDN) { - // group couldn't be found, return empty resultset + // group couldn't be found, return empty result-set $this->access->connection->writeToCache($cacheKey, []); return []; } @@ -934,7 +928,11 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I if (empty($ldap_users)) { break; } - $groupUsers[] = $this->access->dn2username($ldap_users[0]['dn'][0]); + $uid = $this->access->dn2username($ldap_users[0]['dn'][0]); + if (!$uid) { + break; + } + $groupUsers[] = $uid; break; default: //we got DNs, check if we need to filter by search or we can give back all of them @@ -1021,9 +1019,9 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I return $groupUsers; } $search = $this->access->escapeFilterPart($search, true); - $isMemberUid = - ($this->ldapGroupMemberAssocAttr === 'memberuid' || - $this->ldapGroupMemberAssocAttr === 'zimbramailforwardingaddress'); + $isMemberUid + = ($this->ldapGroupMemberAssocAttr === 'memberuid' + || $this->ldapGroupMemberAssocAttr === 'zimbramailforwardingaddress'); //we need to apply the search filter //alternatives that need to be checked: @@ -1125,35 +1123,50 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I * @throws ServerNotAvailableException */ public function groupExists($gid) { - $groupExists = $this->access->connection->getFromCache('groupExists' . $gid); - if (!is_null($groupExists)) { - return (bool)$groupExists; + return $this->groupExistsOnLDAP($gid, false); + } + + /** + * Check if a group exists + * + * @throws ServerNotAvailableException + */ + public function groupExistsOnLDAP(string $gid, bool $ignoreCache = false): bool { + $cacheKey = 'groupExists' . $gid; + if (!$ignoreCache) { + $groupExists = $this->access->connection->getFromCache($cacheKey); + if (!is_null($groupExists)) { + return (bool)$groupExists; + } } //getting dn, if false the group does not exist. If dn, it may be mapped //only, requires more checking. $dn = $this->access->groupname2dn($gid); if (!$dn) { - $this->access->connection->writeToCache('groupExists' . $gid, false); + $this->access->connection->writeToCache($cacheKey, false); return false; } if (!$this->access->isDNPartOfBase($dn, $this->access->connection->ldapBaseGroups)) { - $this->access->connection->writeToCache('groupExists' . $gid, false); + $this->access->connection->writeToCache($cacheKey, false); return false; } //if group really still exists, we will be able to read its objectClass if (!is_array($this->access->readAttribute($dn, '', $this->access->connection->ldapGroupFilter))) { - $this->access->connection->writeToCache('groupExists' . $gid, false); + $this->access->connection->writeToCache($cacheKey, false); return false; } - $this->access->connection->writeToCache('groupExists' . $gid, true); + $this->access->connection->writeToCache($cacheKey, true); return true; } /** + * @template T + * @param array<array-key, T> $listOfGroups + * @return array<array-key, T> * @throws ServerNotAvailableException * @throws Exception */ @@ -1161,7 +1174,11 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $validGroupDNs = []; foreach ($listOfGroups as $key => $item) { $dn = is_string($item) ? $item : $item['dn'][0]; - $gid = $this->access->dn2groupname($dn); + if (is_array($item) && !isset($item[$this->access->connection->ldapGroupDisplayName][0])) { + continue; + } + $name = $item[$this->access->connection->ldapGroupDisplayName][0] ?? null; + $gid = $this->access->dn2groupname($dn, $name, false); if (!$gid) { continue; } @@ -1181,9 +1198,11 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I * Returns the supported actions as int to be * compared with GroupInterface::CREATE_GROUP etc. */ - public function implementsActions($actions) { - return (bool)((GroupInterface::COUNT_USERS | - $this->groupPluginManager->getImplementedActions()) & $actions); + public function implementsActions($actions): bool { + return (bool)((GroupInterface::COUNT_USERS + | GroupInterface::DELETE_GROUP + | GroupInterface::IS_ADMIN + | $this->groupPluginManager->getImplementedActions()) & $actions); } /** @@ -1228,19 +1247,32 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I * delete a group * * @param string $gid gid of the group to delete - * @return bool * @throws Exception */ - public function deleteGroup($gid) { - if ($this->groupPluginManager->implementsActions(GroupInterface::DELETE_GROUP)) { + public function deleteGroup(string $gid): bool { + if ($this->groupPluginManager->canDeleteGroup()) { if ($ret = $this->groupPluginManager->deleteGroup($gid)) { - #delete group in nextcloud internal db + // Delete group in nextcloud internal db $this->access->getGroupMapper()->unmap($gid); - $this->access->connection->writeToCache("groupExists" . $gid, false); + $this->access->connection->writeToCache('groupExists' . $gid, false); } return $ret; } - throw new Exception('Could not delete group in LDAP backend.'); + + // Getting dn, if false the group is not mapped + $dn = $this->access->groupname2dn($gid); + if (!$dn) { + throw new Exception('Could not delete unknown group ' . $gid . ' in LDAP backend.'); + } + + if (!$this->groupExists($gid)) { + // The group does not exist in the LDAP, remove the mapping + $this->access->getGroupMapper()->unmap($gid); + $this->access->connection->writeToCache('groupExists' . $gid, false); + return true; + } + + throw new Exception('Could not delete existing group ' . $gid . ' in LDAP backend.'); } /** @@ -1301,10 +1333,10 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I * of the current access. * * @param string $gid - * @return resource of the LDAP connection + * @return \LDAP\Connection The LDAP connection * @throws ServerNotAvailableException */ - public function getNewLDAPConnection($gid) { + public function getNewLDAPConnection($gid): \LDAP\Connection { $connection = clone $this->access->getConnection(); return $connection->getConnectionResource(); } @@ -1326,12 +1358,65 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $this->access->groupname2dn($gid), $this->access->connection->ldapGroupDisplayName); - if ($displayName && (count($displayName) > 0)) { + if (($displayName !== false) && (count($displayName) > 0)) { $displayName = $displayName[0]; - $this->access->connection->writeToCache($cacheKey, $displayName); - return $displayName; + } else { + $displayName = ''; + } + + $this->access->connection->writeToCache($cacheKey, $displayName); + return $displayName; + } + + /** + * returns the groupname for the given LDAP DN, if available + */ + public function dn2GroupName(string $dn): string|false { + return $this->access->dn2groupname($dn); + } + + public function addRelationshipToCaches(string $uid, ?string $dnUser, string $gid): void { + $dnGroup = $this->access->groupname2dn($gid); + $dnUser ??= $this->access->username2dn($uid); + if ($dnUser === false || $dnGroup === false) { + return; + } + if (isset($this->cachedGroupMembers[$gid])) { + $this->cachedGroupMembers[$gid] = array_merge($this->cachedGroupMembers[$gid], [$dnUser]); + } + unset($this->cachedGroupsByMember[$dnUser]); + unset($this->cachedNestedGroups[$gid]); + $cacheKey = 'inGroup' . $uid . ':' . $gid; + $this->access->connection->writeToCache($cacheKey, true); + $cacheKeyMembers = 'inGroup-members:' . $gid; + if (!is_null($data = $this->access->connection->getFromCache($cacheKeyMembers))) { + $this->access->connection->writeToCache($cacheKeyMembers, array_merge($data, [$dnUser])); + } + $cacheKey = '_groupMembers' . $dnGroup; + if (!is_null($data = $this->access->connection->getFromCache($cacheKey))) { + $this->access->connection->writeToCache($cacheKey, array_merge($data, [$dnUser])); + } + $cacheKey = 'getUserGroups' . $uid; + if (!is_null($data = $this->access->connection->getFromCache($cacheKey))) { + $this->access->connection->writeToCache($cacheKey, array_merge($data, [$gid])); } + // These cache keys cannot be easily updated: + // $cacheKey = 'usersInGroup-' . $gid . '-' . $search . '-' . $limit . '-' . $offset; + // $cacheKey = 'usersInGroup-' . $gid . '-' . $search; + // $cacheKey = 'countUsersInGroup-' . $gid . '-' . $search; + } - return ''; + /** + * @throws ServerNotAvailableException + */ + public function isAdmin(string $uid): bool { + if (!$this->enabled) { + return false; + } + $ldapAdminGroup = $this->access->connection->ldapAdminGroup; + if ($ldapAdminGroup === '') { + return false; + } + return $this->inGroup($uid, $ldapAdminGroup); } } diff --git a/apps/user_ldap/lib/Group_Proxy.php b/apps/user_ldap/lib/Group_Proxy.php index 490eab44462..f0cdc7a465d 100644 --- a/apps/user_ldap/lib/Group_Proxy.php +++ b/apps/user_ldap/lib/Group_Proxy.php @@ -1,49 +1,41 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christopher Schäpers <kondou@ts.unde.re> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; +use OC\ServerNotAvailableException; +use OCP\Group\Backend\IBatchMethodsBackend; +use OCP\Group\Backend\IDeleteGroupBackend; use OCP\Group\Backend\IGetDisplayNameBackend; +use OCP\Group\Backend\IGroupDetailsBackend; +use OCP\Group\Backend\IIsAdminBackend; +use OCP\Group\Backend\INamedBackend; +use OCP\GroupInterface; +use OCP\IConfig; +use OCP\IUserManager; -class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGetDisplayNameBackend { - private $backends = []; - private $refBackend = null; - - public function __construct(Helper $helper, ILDAPWrapper $ldap, GroupPluginManager $groupPluginManager) { - parent::__construct($ldap); - $serverConfigPrefixes = $helper->getServerConfigurationPrefixes(true); - foreach ($serverConfigPrefixes as $configPrefix) { - $this->backends[$configPrefix] = - new \OCA\User_LDAP\Group_LDAP($this->getAccess($configPrefix), $groupPluginManager); - if (is_null($this->refBackend)) { - $this->refBackend = &$this->backends[$configPrefix]; - } - } +/** + * @template-extends Proxy<Group_LDAP> + */ +class Group_Proxy extends Proxy implements GroupInterface, IGroupLDAP, IGetDisplayNameBackend, INamedBackend, IDeleteGroupBackend, IBatchMethodsBackend, IIsAdminBackend { + public function __construct( + private Helper $helper, + ILDAPWrapper $ldap, + AccessFactory $accessFactory, + private GroupPluginManager $groupPluginManager, + private IConfig $config, + private IUserManager $ncUserManager, + ) { + parent::__construct($helper, $ldap, $accessFactory); + } + + + protected function newInstance(string $configPrefix): Group_LDAP { + return new Group_LDAP($this->getAccess($configPrefix), $this->groupPluginManager, $this->config, $this->ncUserManager); } /** @@ -55,6 +47,8 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet * @return mixed the result of the method or false */ protected function walkBackends($id, $method, $parameters) { + $this->setup(); + $gid = $id; $cacheKey = $this->getGroupCacheKey($gid); foreach ($this->backends as $configPrefix => $backend) { @@ -78,6 +72,8 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet * @return mixed the result of the method or false */ protected function callOnLastSeenOn($id, $method, $parameters, $passOnWhen) { + $this->setup(); + $gid = $id; $cacheKey = $this->getGroupCacheKey($gid); $prefix = $this->getFromCache($cacheKey); @@ -103,6 +99,7 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet } protected function activeBackends(): int { + $this->setup(); return count($this->backends); } @@ -123,32 +120,32 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet * Get all groups a user belongs to * * @param string $uid Name of the user - * @return string[] with group names + * @return list<string> with group names * * This function fetches all groups a user belongs to. It does not check * if the user exists at all. */ public function getUserGroups($uid) { - $groups = []; + $this->setup(); + $groups = []; foreach ($this->backends as $backend) { $backendGroups = $backend->getUserGroups($uid); - if (is_array($backendGroups)) { - $groups = array_merge($groups, $backendGroups); - } + $groups = array_merge($groups, $backendGroups); } - return $groups; + return array_values(array_unique($groups)); } /** * get a list of all users in a group * - * @return string[] with user ids + * @return array<int,string> user ids */ public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) { - $users = []; + $this->setup(); + $users = []; foreach ($this->backends as $backend) { $backendUsers = $backend->usersInGroup($gid, $search, $limit, $offset); if (is_array($backendUsers)) { @@ -170,11 +167,8 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet /** * delete a group - * - * @param string $gid gid of the group to delete - * @return bool */ - public function deleteGroup($gid) { + public function deleteGroup(string $gid): bool { return $this->handleRequest( $gid, 'deleteGroup', [$gid]); } @@ -231,6 +225,21 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet } /** + * {@inheritdoc} + */ + public function getGroupsDetails(array $gids): array { + if (!($this instanceof IGroupDetailsBackend || $this->implementsActions(GroupInterface::GROUP_DETAILS))) { + throw new \Exception('Should not have been called'); + } + + $groupData = []; + foreach ($gids as $gid) { + $groupData[$gid] = $this->handleRequest($gid, 'getGroupDetails', [$gid]); + } + return $groupData; + } + + /** * get a list of all groups * * @return string[] with group names @@ -238,8 +247,9 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet * Returns a list with all groups */ public function getGroups($search = '', $limit = -1, $offset = 0) { - $groups = []; + $this->setup(); + $groups = []; foreach ($this->backends as $backend) { $backendGroups = $backend->getGroups($search, $limit, $offset); if (is_array($backendGroups)) { @@ -261,6 +271,33 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet } /** + * Check if a group exists + * + * @throws ServerNotAvailableException + */ + public function groupExistsOnLDAP(string $gid, bool $ignoreCache = false): bool { + return $this->handleRequest($gid, 'groupExistsOnLDAP', [$gid, $ignoreCache]); + } + + /** + * returns the groupname for the given LDAP DN, if available + */ + public function dn2GroupName(string $dn): string|false { + $id = 'DN,' . $dn; + return $this->handleRequest($id, 'dn2GroupName', [$dn]); + } + + /** + * {@inheritdoc} + */ + public function groupsExists(array $gids): array { + return array_values(array_filter( + $gids, + fn (string $gid): bool => $this->handleRequest($gid, 'groupExists', [$gid]), + )); + } + + /** * Check if backend implements actions * * @param int $actions bitwise-or'ed actions @@ -270,6 +307,7 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet * compared with \OCP\GroupInterface::CREATE_GROUP etc. */ public function implementsActions($actions) { + $this->setup(); //it's the same across all our user backends obviously return $this->refBackend->implementsActions($actions); } @@ -289,13 +327,34 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet * The connection needs to be closed manually. * * @param string $gid - * @return resource of the LDAP connection + * @return \LDAP\Connection The LDAP connection */ - public function getNewLDAPConnection($gid) { + public function getNewLDAPConnection($gid): \LDAP\Connection { return $this->handleRequest($gid, 'getNewLDAPConnection', [$gid]); } public function getDisplayName(string $gid): string { return $this->handleRequest($gid, 'getDisplayName', [$gid]); } + + /** + * Backend name to be shown in group management + * @return string the name of the backend to be shown + * @since 22.0.0 + */ + public function getBackendName(): string { + return 'LDAP'; + } + + public function searchInGroup(string $gid, string $search = '', int $limit = -1, int $offset = 0): array { + return $this->handleRequest($gid, 'searchInGroup', [$gid, $search, $limit, $offset]); + } + + public function addRelationshipToCaches(string $uid, ?string $dnUser, string $gid): void { + $this->handleRequest($gid, 'addRelationshipToCaches', [$uid, $dnUser, $gid]); + } + + public function isAdmin(string $uid): bool { + return $this->handleRequest($uid, 'isAdmin', [$uid]); + } } diff --git a/apps/user_ldap/lib/Handler/ExtStorageConfigHandler.php b/apps/user_ldap/lib/Handler/ExtStorageConfigHandler.php index 483dade8566..8b63d54aa66 100644 --- a/apps/user_ldap/lib/Handler/ExtStorageConfigHandler.php +++ b/apps/user_ldap/lib/Handler/ExtStorageConfigHandler.php @@ -1,28 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Julius Härtl <jus@bitgrid.net> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Handler; use OCA\Files_External\Config\IConfigHandler; @@ -63,7 +44,7 @@ class ExtStorageConfigHandler extends UserContext implements IConfigHandler { } $ldapUser = $access->userManager->get($user->getUID()); - $extHome = $ldapUser->getExtStorageHome(); + $extHome = $ldapUser !== null ? $ldapUser->getExtStorageHome() : ''; return $this->processInput($optionValue, $extHome); } diff --git a/apps/user_ldap/lib/Helper.php b/apps/user_ldap/lib/Helper.php index f079345d23e..d3abf04fd1e 100644 --- a/apps/user_ldap/lib/Helper.php +++ b/apps/user_ldap/lib/Helper.php @@ -1,55 +1,26 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author root <root@localhost.localdomain> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; -use OC\Cache\CappedMemoryCache; +use OCP\Cache\CappedMemoryCache; use OCP\DB\QueryBuilder\IQueryBuilder; -use OCP\IConfig; +use OCP\IAppConfig; use OCP\IDBConnection; +use OCP\Server; class Helper { + /** @var CappedMemoryCache<string> */ + protected CappedMemoryCache $sanitizeDnCache; - /** @var IConfig */ - private $config; - - /** @var IDBConnection */ - private $connection; - - /** @var CappedMemoryCache */ - protected $sanitizeDnCache; - - public function __construct(IConfig $config, - IDBConnection $connection) { - $this->config = $config; - $this->connection = $connection; + public function __construct( + private IAppConfig $appConfig, + private IDBConnection $connection, + ) { $this->sanitizeDnCache = new CappedMemoryCache(10000); } @@ -57,7 +28,7 @@ class Helper { * returns prefixes for each saved LDAP/AD server configuration. * * @param bool $activeConfigurations optional, whether only active configuration shall be - * retrieved, defaults to false + * retrieved, defaults to false * @return array with a list of the available prefixes * * Configuration prefixes are used to set up configurations for n LDAP or @@ -74,21 +45,37 @@ class Helper { * except the default (first) server shall be connected to. * */ - public function getServerConfigurationPrefixes($activeConfigurations = false): array { + public function getServerConfigurationPrefixes(bool $activeConfigurations = false): array { + $all = $this->getAllServerConfigurationPrefixes(); + if (!$activeConfigurations) { + return $all; + } + return array_values(array_filter( + $all, + fn (string $prefix): bool => ($this->appConfig->getValueString('user_ldap', $prefix . 'ldap_configuration_active') === '1') + )); + } + + protected function getAllServerConfigurationPrefixes(): array { + $unfilled = ['UNFILLED']; + $prefixes = $this->appConfig->getValueArray('user_ldap', 'configuration_prefixes', $unfilled); + if ($prefixes !== $unfilled) { + return $prefixes; + } + + /* Fallback to browsing key for migration from Nextcloud<32 */ $referenceConfigkey = 'ldap_configuration_active'; $keys = $this->getServersConfig($referenceConfigkey); $prefixes = []; foreach ($keys as $key) { - if ($activeConfigurations && $this->config->getAppValue('user_ldap', $key, '0') !== '1') { - continue; - } - $len = strlen($key) - strlen($referenceConfigkey); $prefixes[] = substr($key, 0, $len); } - asort($prefixes); + sort($prefixes); + + $this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', $prefixes); return $prefixes; } @@ -97,46 +84,45 @@ class Helper { * * determines the host for every configured connection * - * @return array an array with configprefix as keys + * @return array<string,string> an array with configprefix as keys * */ - public function getServerConfigurationHosts() { - $referenceConfigkey = 'ldap_host'; - - $keys = $this->getServersConfig($referenceConfigkey); + public function getServerConfigurationHosts(): array { + $prefixes = $this->getServerConfigurationPrefixes(); + $referenceConfigkey = 'ldap_host'; $result = []; - foreach ($keys as $key) { - $len = strlen($key) - strlen($referenceConfigkey); - $prefix = substr($key, 0, $len); - $result[$prefix] = $this->config->getAppValue('user_ldap', $key); + foreach ($prefixes as $prefix) { + $result[$prefix] = $this->appConfig->getValueString('user_ldap', $prefix . $referenceConfigkey); } return $result; } /** - * return the next available configuration prefix - * - * @return string + * return the next available configuration prefix and register it as used */ - public function getNextServerConfigurationPrefix() { - $serverConnections = $this->getServerConfigurationPrefixes(); - - if (count($serverConnections) === 0) { - return 's01'; + public function getNextServerConfigurationPrefix(): string { + $prefixes = $this->getServerConfigurationPrefixes(); + + if (count($prefixes) === 0) { + $prefix = 's01'; + } else { + sort($prefixes); + $lastKey = array_pop($prefixes); + $lastNumber = (int)str_replace('s', '', $lastKey); + $prefix = 's' . str_pad((string)($lastNumber + 1), 2, '0', STR_PAD_LEFT); } - sort($serverConnections); - $lastKey = array_pop($serverConnections); - $lastNumber = (int)str_replace('s', '', $lastKey); - return 's' . str_pad($lastNumber + 1, 2, '0', STR_PAD_LEFT); + $prefixes[] = $prefix; + $this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', $prefixes); + return $prefix; } - private function getServersConfig($value) { + private function getServersConfig(string $value): array { $regex = '/' . $value . '$/S'; - $keys = $this->config->getAppKeys('user_ldap'); + $keys = $this->appConfig->getKeys('user_ldap'); $result = []; foreach ($keys as $key) { if (preg_match($regex, $key) === 1) { @@ -154,7 +140,9 @@ class Helper { * @return bool true on success, false otherwise */ public function deleteServerConfiguration($prefix) { - if (!in_array($prefix, self::getServerConfigurationPrefixes())) { + $prefixes = $this->getServerConfigurationPrefixes(); + $index = array_search($prefix, $prefixes); + if ($index === false) { return false; } @@ -173,7 +161,11 @@ class Helper { $query->andWhere($query->expr()->notLike('configkey', $query->createNamedParameter('s%'))); } - $deletedRows = $query->execute(); + $deletedRows = $query->executeStatement(); + + unset($prefixes[$index]); + $this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', array_values($prefixes)); + return $deletedRows !== 0; } @@ -181,10 +173,13 @@ class Helper { * checks whether there is one or more disabled LDAP configurations */ public function haveDisabledConfigurations(): bool { - $all = $this->getServerConfigurationPrefixes(false); - $active = $this->getServerConfigurationPrefixes(true); - - return count($all) !== count($active) || count($all) === 0; + $all = $this->getServerConfigurationPrefixes(); + foreach ($all as $prefix) { + if ($this->appConfig->getValueString('user_ldap', $prefix . 'ldap_configuration_active') !== '1') { + return true; + } + } + return false; } /** @@ -212,7 +207,22 @@ class Helper { /** * sanitizes a DN received from the LDAP server * - * @param array $dn the DN in question + * This is used and done to have a stable format of DNs that can be compared + * and identified again. The input DN value is modified as following: + * + * 1) whitespaces after commas are removed + * 2) the DN is turned to lower-case + * 3) the DN is escaped according to RFC 2253 + * + * When a future DN is supposed to be used as a base parameter, it has to be + * run through DNasBaseParameter() first, to recode \5c into a backslash + * again, otherwise the search or read operation will fail with LDAP error + * 32, NO_SUCH_OBJECT. Regular usage in LDAP filters requires the backslash + * being escaped, however. + * + * Internally, DNs are stored in their sanitized form. + * + * @param array|string $dn the DN in question * @return array|string the sanitized DN */ public function sanitizeDN($dn) { @@ -276,15 +286,15 @@ class Helper { * listens to a hook thrown by server2server sharing and replaces the given * login name by a username, if it matches an LDAP user. * - * @param array $param + * @param array $param contains a reference to a $uid var under 'uid' key * @throws \Exception */ - public static function loginName2UserName($param) { + public static function loginName2UserName($param): void { if (!isset($param['uid'])) { throw new \Exception('key uid is expected to be set in $param'); } - $userBackend = \OC::$server->get(User_Proxy::class); + $userBackend = Server::get(User_Proxy::class); $uid = $userBackend->loginName2UserName($param['uid']); if ($uid !== false) { $param['uid'] = $uid; diff --git a/apps/user_ldap/lib/IGroupLDAP.php b/apps/user_ldap/lib/IGroupLDAP.php index c84b899f5c0..667eb421004 100644 --- a/apps/user_ldap/lib/IGroupLDAP.php +++ b/apps/user_ldap/lib/IGroupLDAP.php @@ -1,26 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2017, EITA Cooperative (eita.org.br) - * - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; interface IGroupLDAP { @@ -37,7 +20,7 @@ interface IGroupLDAP { /** * Return a new LDAP connection for the specified group. * @param string $gid - * @return resource of the LDAP connection + * @return \LDAP\Connection The LDAP connection */ public function getNewLDAPConnection($gid); } diff --git a/apps/user_ldap/lib/ILDAPGroupPlugin.php b/apps/user_ldap/lib/ILDAPGroupPlugin.php index 3c9baeab65c..261b9383dc1 100644 --- a/apps/user_ldap/lib/ILDAPGroupPlugin.php +++ b/apps/user_ldap/lib/ILDAPGroupPlugin.php @@ -1,26 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br) - * - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; interface ILDAPGroupPlugin { diff --git a/apps/user_ldap/lib/ILDAPUserPlugin.php b/apps/user_ldap/lib/ILDAPUserPlugin.php index e4858d0688f..80437bef452 100644 --- a/apps/user_ldap/lib/ILDAPUserPlugin.php +++ b/apps/user_ldap/lib/ILDAPUserPlugin.php @@ -1,31 +1,12 @@ <?php + /** - * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br) - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; interface ILDAPUserPlugin { - /** * Check if plugin implements actions * @return int @@ -78,7 +59,7 @@ interface ILDAPUserPlugin { public function setDisplayName($uid, $displayName); /** - * checks whether the user is allowed to change his avatar in Nextcloud + * checks whether the user is allowed to change their avatar in Nextcloud * @param string $uid the Nextcloud user name * @return boolean either the user can or cannot */ @@ -86,7 +67,7 @@ interface ILDAPUserPlugin { /** * Count the number of users - * @return int|bool + * @return int|false */ public function countUsers(); } diff --git a/apps/user_ldap/lib/ILDAPWrapper.php b/apps/user_ldap/lib/ILDAPWrapper.php index fd63193116a..de2b9c50241 100644 --- a/apps/user_ldap/lib/ILDAPWrapper.php +++ b/apps/user_ldap/lib/ILDAPWrapper.php @@ -1,42 +1,18 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author J0WI <J0WI@users.noreply.github.com> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roger Szabo <roger.szabo@web.de> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; interface ILDAPWrapper { - //LDAP functions in use /** * Bind to LDAP directory - * @param resource $link LDAP link resource + * @param \LDAP\Connection $link LDAP link resource * @param string $dn an RDN to log in with * @param string $password the password * @return bool true on success, false otherwise @@ -49,25 +25,15 @@ interface ILDAPWrapper { * connect to an LDAP server * @param string $host The host to connect to * @param string $port The port to connect to - * @return mixed a link resource on success, otherwise false + * @return \LDAP\Connection|false a link resource on success, otherwise false */ public function connect($host, $port); /** - * Send LDAP pagination control - * @param resource $link LDAP link resource - * @param int $pageSize number of results per page - * @param bool $isCritical Indicates whether the pagination is critical of not. - * @param string $cookie structure sent by LDAP server - * @return bool true on success, false otherwise - */ - public function controlPagedResult($link, $pageSize, $isCritical); - - /** * Retrieve the LDAP pagination cookie - * @param resource $link LDAP link resource - * @param resource $result LDAP result resource - * @param string $cookie structure sent by LDAP server + * @param \LDAP\Connection $link LDAP link resource + * @param \LDAP\Result $result LDAP result resource + * @param string &$cookie structure sent by LDAP server * @return bool true on success, false otherwise * * Corresponds to ldap_control_paged_result_response @@ -76,22 +42,22 @@ interface ILDAPWrapper { /** * Count the number of entries in a search - * @param resource $link LDAP link resource - * @param resource $result LDAP result resource + * @param \LDAP\Connection $link LDAP link resource + * @param \LDAP\Result $result LDAP result resource * @return int|false number of results on success, false otherwise */ public function countEntries($link, $result); /** * Return the LDAP error number of the last LDAP command - * @param resource $link LDAP link resource + * @param \LDAP\Connection $link LDAP link resource * @return int error code */ public function errno($link); /** * Return the LDAP error message of the last LDAP command - * @param resource $link LDAP link resource + * @param \LDAP\Connection $link LDAP link resource * @return string error message */ public function error($link); @@ -107,69 +73,69 @@ interface ILDAPWrapper { /** * Return first result id - * @param resource $link LDAP link resource - * @param resource $result LDAP result resource - * @return Resource an LDAP search result resource + * @param \LDAP\Connection $link LDAP link resource + * @param \LDAP\Result $result LDAP result resource + * @return \LDAP\ResultEntry an LDAP entry resource * */ public function firstEntry($link, $result); /** * Get attributes from a search result entry - * @param resource $link LDAP link resource - * @param resource $result LDAP result resource - * @return array containing the results, false on error + * @param \LDAP\Connection $link LDAP link resource + * @param \LDAP\ResultEntry $result LDAP result resource + * @return array|false containing the results, false on error * */ public function getAttributes($link, $result); /** * Get the DN of a result entry - * @param resource $link LDAP link resource - * @param resource $result LDAP result resource - * @return string containing the DN, false on error + * @param \LDAP\Connection $link LDAP link resource + * @param \LDAP\ResultEntry $result LDAP result resource + * @return string|false containing the DN, false on error */ public function getDN($link, $result); /** * Get all result entries - * @param resource $link LDAP link resource - * @param resource $result LDAP result resource - * @return array containing the results, false on error + * @param \LDAP\Connection $link LDAP link resource + * @param \LDAP\Result $result LDAP result resource + * @return array|false containing the results, false on error */ public function getEntries($link, $result); /** * Return next result id - * @param resource $link LDAP link resource - * @param resource $result LDAP entry result resource - * @return resource an LDAP search result resource + * @param \LDAP\Connection $link LDAP link resource + * @param \LDAP\ResultEntry $result LDAP result resource + * @return \LDAP\ResultEntry an LDAP entry resource * */ public function nextEntry($link, $result); /** * Read an entry - * @param resource $link LDAP link resource - * @param array $baseDN The DN of the entry to read from + * @param \LDAP\Connection $link LDAP link resource + * @param string $baseDN The DN of the entry to read from * @param string $filter An LDAP filter * @param array $attr array of the attributes to read - * @return resource an LDAP search result resource + * @return \LDAP\Result an LDAP search result resource */ public function read($link, $baseDN, $filter, $attr); /** * Search LDAP tree - * @param resource $link LDAP link resource + * @param \LDAP\Connection $link LDAP link resource * @param string $baseDN The DN of the entry to read from * @param string $filter An LDAP filter * @param array $attr array of the attributes to read * @param int $attrsOnly optional, 1 if only attribute types shall be returned * @param int $limit optional, limits the result entries - * @return resource|false an LDAP search result resource, false on error + * @return \LDAP\Result|false an LDAP search result resource, false on error */ - public function search($link, $baseDN, $filter, $attr, $attrsOnly = 0, $limit = 0); + public function search($link, string $baseDN, string $filter, array $attr, int $attrsOnly = 0, int $limit = 0, int $pageSize = 0, string $cookie = ''); /** * Replace the value of a userPassword by $password - * @param resource $link LDAP link resource + * @param \LDAP\Connection $link LDAP link resource * @param string $userDN the DN of the user whose password is to be replaced * @param string $password the new value for the userPassword * @return bool true on success, false otherwise @@ -177,24 +143,31 @@ interface ILDAPWrapper { public function modReplace($link, $userDN, $password); /** + * Performs a PASSWD extended operation. + * @param \LDAP\Connection $link LDAP link resource + * @return bool|string The generated password if new_password is empty or omitted. Otherwise true on success and false on failure. + */ + public function exopPasswd($link, string $userDN, string $oldPassword, string $password); + + /** * Sets the value of the specified option to be $value - * @param resource $link LDAP link resource - * @param string $option a defined LDAP Server option - * @param int $value the new value for the option + * @param \LDAP\Connection $link LDAP link resource + * @param int $option a defined LDAP Server option + * @param mixed $value the new value for the option * @return bool true on success, false otherwise */ public function setOption($link, $option, $value); /** * establish Start TLS - * @param resource $link LDAP link resource + * @param \LDAP\Connection $link LDAP link resource * @return bool true on success, false otherwise */ public function startTls($link); /** * Unbind from LDAP directory - * @param resource $link LDAP link resource + * @param \LDAP\Connection $link LDAP link resource * @return bool true on success, false otherwise */ public function unbind($link); @@ -209,8 +182,9 @@ interface ILDAPWrapper { /** * Checks whether the submitted parameter is a resource - * @param resource $resource the resource variable to check - * @return bool true if it is a resource, false otherwise + * @param mixed $resource the resource variable to check + * @psalm-assert-if-true object $resource + * @return bool true if it is a resource or LDAP object, false otherwise */ public function isResource($resource); } diff --git a/apps/user_ldap/lib/IUserLDAP.php b/apps/user_ldap/lib/IUserLDAP.php index 73ab720cf98..5e8e29c3adf 100644 --- a/apps/user_ldap/lib/IUserLDAP.php +++ b/apps/user_ldap/lib/IUserLDAP.php @@ -1,44 +1,26 @@ <?php + /** - * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) - * - * @author Roger Szabo <roger.szabo@web.de> - * @author root <root@localhost.localdomain> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; interface IUserLDAP { //Functions used by LDAPProvider - + /** * Return access for LDAP interaction. * @param string $uid * @return Access instance of Access for LDAP interaction */ public function getLDAPAccess($uid); - + /** * Return a new LDAP connection for the specified user. * @param string $uid - * @return resource of the LDAP connection + * @return \LDAP\Connection of the LDAP connection */ public function getNewLDAPConnection($uid); diff --git a/apps/user_ldap/lib/Jobs/CleanUp.php b/apps/user_ldap/lib/Jobs/CleanUp.php index 19973119eaf..76277b43c0b 100644 --- a/apps/user_ldap/lib/Jobs/CleanUp.php +++ b/apps/user_ldap/lib/Jobs/CleanUp.php @@ -1,37 +1,21 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Jobs; -use OC\BackgroundJob\TimedJob; use OCA\User_LDAP\Helper; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\DeletedUsersIndex; -use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\User_Proxy; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\TimedJob; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\Server; /** * Class CleanUp @@ -41,19 +25,16 @@ use OCA\User_LDAP\User_Proxy; * @package OCA\User_LDAP\Jobs; */ class CleanUp extends TimedJob { - /** @var int $limit amount of users that should be checked per run */ + /** @var ?int $limit amount of users that should be checked per run */ protected $limit; /** @var int $defaultIntervalMin default interval in minutes */ - protected $defaultIntervalMin = 51; - - /** @var User_LDAP|User_Proxy $userBackend */ - protected $userBackend; + protected $defaultIntervalMin = 60; - /** @var \OCP\IConfig $ocConfig */ + /** @var IConfig $ocConfig */ protected $ocConfig; - /** @var \OCP\IDBConnection $db */ + /** @var IDBConnection $db */ protected $db; /** @var Helper $ldapHelper */ @@ -62,22 +43,22 @@ class CleanUp extends TimedJob { /** @var UserMapping */ protected $mapping; - /** @var DeletedUsersIndex */ - protected $dui; - - public function __construct(User_Proxy $userBackend, DeletedUsersIndex $dui) { - $minutes = \OC::$server->getConfig()->getSystemValue( + public function __construct( + ITimeFactory $timeFactory, + protected User_Proxy $userBackend, + protected DeletedUsersIndex $dui, + ) { + parent::__construct($timeFactory); + $minutes = Server::get(IConfig::class)->getSystemValue( 'ldapUserCleanupInterval', (string)$this->defaultIntervalMin); $this->setInterval((int)$minutes * 60); - $this->userBackend = $userBackend; - $this->dui = $dui; } /** * assigns the instances passed to run() to the class properties * @param array $arguments */ - public function setArguments($arguments) { + public function setArguments($arguments): void { //Dependency Injection is not possible, because the constructor will //only get values that are serialized to JSON. I.e. whatever we would //pass in app.php we do add here, except something else is passed e.g. @@ -86,13 +67,13 @@ class CleanUp extends TimedJob { if (isset($arguments['helper'])) { $this->ldapHelper = $arguments['helper']; } else { - $this->ldapHelper = new Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $this->ldapHelper = Server::get(Helper::class); } if (isset($arguments['ocConfig'])) { $this->ocConfig = $arguments['ocConfig']; } else { - $this->ocConfig = \OC::$server->getConfig(); + $this->ocConfig = Server::get(IConfig::class); } if (isset($arguments['userBackend'])) { @@ -102,13 +83,13 @@ class CleanUp extends TimedJob { if (isset($arguments['db'])) { $this->db = $arguments['db']; } else { - $this->db = \OC::$server->getDatabaseConnection(); + $this->db = Server::get(IDBConnection::class); } if (isset($arguments['mapping'])) { $this->mapping = $arguments['mapping']; } else { - $this->mapping = new UserMapping($this->db); + $this->mapping = Server::get(UserMapping::class); } if (isset($arguments['deletedUsersIndex'])) { @@ -120,19 +101,13 @@ class CleanUp extends TimedJob { * makes the background job do its work * @param array $argument */ - public function run($argument) { + public function run($argument): void { $this->setArguments($argument); if (!$this->isCleanUpAllowed()) { return; } $users = $this->mapping->getList($this->getOffset(), $this->getChunkSize()); - if (!is_array($users)) { - //something wrong? Let's start from the beginning next time and - //abort - $this->setOffset(true); - return; - } $resetOffset = $this->isOffsetResetNecessary(count($users)); $this->checkUsers($users); $this->setOffset($resetOffset); @@ -140,18 +115,15 @@ class CleanUp extends TimedJob { /** * checks whether next run should start at 0 again - * @param int $resultCount - * @return bool */ - public function isOffsetResetNecessary($resultCount) { + public function isOffsetResetNecessary(int $resultCount): bool { return $resultCount < $this->getChunkSize(); } /** * checks whether cleaning up LDAP users is allowed - * @return bool */ - public function isCleanUpAllowed() { + public function isCleanUpAllowed(): bool { try { if ($this->ldapHelper->haveDisabledConfigurations()) { return false; @@ -165,9 +137,8 @@ class CleanUp extends TimedJob { /** * checks whether clean up is enabled by configuration - * @return bool */ - private function isCleanUpEnabled() { + private function isCleanUpEnabled(): bool { return (bool)$this->ocConfig->getSystemValue( 'ldapUserCleanupInterval', (string)$this->defaultIntervalMin); } @@ -176,7 +147,7 @@ class CleanUp extends TimedJob { * checks users whether they are still existing * @param array $users result from getMappedUsers() */ - private function checkUsers(array $users) { + private function checkUsers(array $users): void { foreach ($users as $user) { $this->checkUser($user); } @@ -186,7 +157,7 @@ class CleanUp extends TimedJob { * checks whether a user is still existing in LDAP * @param string[] $user */ - private function checkUser(array $user) { + private function checkUser(array $user): void { if ($this->userBackend->userExistsOnLDAP($user['name'])) { //still available, all good @@ -198,29 +169,27 @@ class CleanUp extends TimedJob { /** * gets the offset to fetch users from the mappings table - * @return int */ - private function getOffset() { - return (int)$this->ocConfig->getAppValue('user_ldap', 'cleanUpJobOffset', 0); + private function getOffset(): int { + return (int)$this->ocConfig->getAppValue('user_ldap', 'cleanUpJobOffset', '0'); } /** * sets the new offset for the next run * @param bool $reset whether the offset should be set to 0 */ - public function setOffset($reset = false) { - $newOffset = $reset ? 0 : - $this->getOffset() + $this->getChunkSize(); - $this->ocConfig->setAppValue('user_ldap', 'cleanUpJobOffset', $newOffset); + public function setOffset(bool $reset = false): void { + $newOffset = $reset ? 0 + : $this->getOffset() + $this->getChunkSize(); + $this->ocConfig->setAppValue('user_ldap', 'cleanUpJobOffset', (string)$newOffset); } /** * returns the chunk size (limit in DB speak) - * @return int */ - public function getChunkSize() { + public function getChunkSize(): int { if ($this->limit === null) { - $this->limit = (int)$this->ocConfig->getAppValue('user_ldap', 'cleanUpJobChunkSize', 50); + $this->limit = (int)$this->ocConfig->getAppValue('user_ldap', 'cleanUpJobChunkSize', '50'); } return $this->limit; } diff --git a/apps/user_ldap/lib/Jobs/Sync.php b/apps/user_ldap/lib/Jobs/Sync.php index fed8910b2e5..26888ae96ae 100644 --- a/apps/user_ldap/lib/Jobs/Sync.php +++ b/apps/user_ldap/lib/Jobs/Sync.php @@ -1,31 +1,12 @@ <?php + /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace OCA\User_LDAP\Jobs; -use OC\BackgroundJob\TimedJob; use OC\ServerNotAvailableException; use OCA\User_LDAP\AccessFactory; use OCA\User_LDAP\Configuration; @@ -33,54 +14,51 @@ use OCA\User_LDAP\ConnectionFactory; use OCA\User_LDAP\Helper; use OCA\User_LDAP\LDAP; use OCA\User_LDAP\Mapping\UserMapping; -use OCA\User_LDAP\User\Manager; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\TimedJob; +use OCP\EventDispatcher\IEventDispatcher; use OCP\IAvatarManager; use OCP\IConfig; use OCP\IDBConnection; use OCP\IUserManager; use OCP\Notification\IManager; +use Psr\Log\LoggerInterface; class Sync extends TimedJob { public const MAX_INTERVAL = 12 * 60 * 60; // 12h public const MIN_INTERVAL = 30 * 60; // 30min - /** @var Helper */ - protected $ldapHelper; - /** @var LDAP */ - protected $ldap; - /** @var Manager */ - protected $userManager; - /** @var UserMapping */ - protected $mapper; - /** @var IConfig */ - protected $config; - /** @var IAvatarManager */ - protected $avatarManager; - /** @var IDBConnection */ - protected $dbc; - /** @var IUserManager */ - protected $ncUserManager; - /** @var IManager */ - protected $notificationManager; - /** @var ConnectionFactory */ - protected $connectionFactory; - /** @var AccessFactory */ - protected $accessFactory; - public function __construct(Manager $userManager) { - $this->userManager = $userManager; + protected LDAP $ldap; + + public function __construct( + ITimeFactory $timeFactory, + private IEventDispatcher $dispatcher, + private IConfig $config, + private IDBConnection $dbc, + private IAvatarManager $avatarManager, + private IUserManager $ncUserManager, + private LoggerInterface $logger, + private IManager $notificationManager, + private UserMapping $mapper, + private Helper $ldapHelper, + private ConnectionFactory $connectionFactory, + private AccessFactory $accessFactory, + ) { + parent::__construct($timeFactory); $this->setInterval( - \OC::$server->getConfig()->getAppValue( + (int)$this->config->getAppValue( 'user_ldap', 'background_sync_interval', - self::MIN_INTERVAL + (string)self::MIN_INTERVAL ) ); + $this->ldap = new LDAP($this->config->getSystemValueString('ldap_log_file')); } /** - * updates the interval + * Updates the interval * - * the idea is to adjust the interval depending on the amount of known users + * The idea is to adjust the interval depending on the amount of known users * and the attempt to update each user one day. At most it would run every * 30 minutes, and at least every 12 hours. */ @@ -93,17 +71,16 @@ class Sync extends TimedJob { $interval = floor(24 * 60 * 60 / $runsPerDay); $interval = min(max($interval, self::MIN_INTERVAL), self::MAX_INTERVAL); - $this->config->setAppValue('user_ldap', 'background_sync_interval', $interval); + $this->config->setAppValue('user_ldap', 'background_sync_interval', (string)$interval); } /** * returns the smallest configured paging size - * @return int */ - protected function getMinPagingSize() { + protected function getMinPagingSize(): int { $configKeys = $this->config->getAppKeys('user_ldap'); $configKeys = array_filter($configKeys, function ($key) { - return strpos($key, 'ldap_paging_size') !== false; + return str_contains($key, 'ldap_paging_size'); }); $minPagingSize = null; foreach ($configKeys as $configKey) { @@ -117,10 +94,8 @@ class Sync extends TimedJob { * @param array $argument */ public function run($argument) { - $this->setArgument($argument); - $isBackgroundJobModeAjax = $this->config - ->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'ajax'; + ->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'ajax'; if ($isBackgroundJobModeAjax) { return; } @@ -153,10 +128,10 @@ class Sync extends TimedJob { } /** - * @param array $cycleData + * @param array{offset: int, prefix: string} $cycleData * @return bool whether more results are expected from the same configuration */ - public function runCycle($cycleData) { + public function runCycle(array $cycleData): bool { $connection = $this->connectionFactory->get($cycleData['prefix']); $access = $this->accessFactory->get($connection); $access->setUserMapper($this->mapper); @@ -169,7 +144,7 @@ class Sync extends TimedJob { $results = $access->fetchListOfUsers( $filter, $access->userManager->getAttributes(), - $connection->ldapPagingSize, + (int)$connection->ldapPagingSize, $cycleData['offset'], true ); @@ -181,24 +156,22 @@ class Sync extends TimedJob { } /** - * returns the info about the current cycle that should be run, if any, + * Returns the info about the current cycle that should be run, if any, * otherwise null - * - * @return array|null */ - public function getCycle() { + public function getCycle(): ?array { $prefixes = $this->ldapHelper->getServerConfigurationPrefixes(true); if (count($prefixes) === 0) { return null; } $cycleData = [ - 'prefix' => $this->config->getAppValue('user_ldap', 'background_sync_prefix', null), - 'offset' => (int)$this->config->getAppValue('user_ldap', 'background_sync_offset', 0), + 'prefix' => $this->config->getAppValue('user_ldap', 'background_sync_prefix', 'none'), + 'offset' => (int)$this->config->getAppValue('user_ldap', 'background_sync_offset', '0'), ]; if ( - $cycleData['prefix'] !== null + $cycleData['prefix'] !== 'none' && in_array($cycleData['prefix'], $prefixes) ) { return $cycleData; @@ -210,21 +183,21 @@ class Sync extends TimedJob { /** * Save the provided cycle information in the DB * - * @param array $cycleData + * @param array{prefix: ?string, offset: int} $cycleData */ - public function setCycle(array $cycleData) { + public function setCycle(array $cycleData): void { $this->config->setAppValue('user_ldap', 'background_sync_prefix', $cycleData['prefix']); - $this->config->setAppValue('user_ldap', 'background_sync_offset', $cycleData['offset']); + $this->config->setAppValue('user_ldap', 'background_sync_offset', (string)$cycleData['offset']); } /** * returns data about the next cycle that should run, if any, otherwise * null. It also always goes for the next LDAP configuration! * - * @param array|null $cycleData the old cycle - * @return array|null + * @param ?array{prefix: string, offset: int} $cycleData the old cycle + * @return ?array{prefix: string, offset: int} */ - public function determineNextCycle(array $cycleData = null) { + public function determineNextCycle(?array $cycleData = null): ?array { $prefixes = $this->ldapHelper->getServerConfigurationPrefixes(true); if (count($prefixes) === 0) { return null; @@ -244,14 +217,13 @@ class Sync extends TimedJob { } /** - * Checks whether the provided cycle should be run. Currently only the + * Checks whether the provided cycle should be run. Currently, only the * last configuration change goes into account (at least one hour). * - * @param $cycleData - * @return bool + * @param array{prefix: string} $cycleData */ - public function qualifiesToRun($cycleData) { - $lastChange = $this->config->getAppValue('user_ldap', $cycleData['prefix'] . '_lastChange', 0); + public function qualifiesToRun(array $cycleData): bool { + $lastChange = (int)$this->config->getAppValue('user_ldap', $cycleData['prefix'] . '_lastChange', '0'); if ((time() - $lastChange) > 60 * 30) { return true; } @@ -259,23 +231,20 @@ class Sync extends TimedJob { } /** - * increases the offset of the current cycle for the next run + * Increases the offset of the current cycle for the next run * - * @param $cycleData + * @param array{prefix: string, offset: int} $cycleData */ - protected function increaseOffset($cycleData) { + protected function increaseOffset(array $cycleData): void { $ldapConfig = new Configuration($cycleData['prefix']); $cycleData['offset'] += (int)$ldapConfig->ldapPagingSize; $this->setCycle($cycleData); } /** - * determines the next configuration prefix based on the last one (if any) - * - * @param string|null $lastPrefix - * @return string|null + * Determines the next configuration prefix based on the last one (if any) */ - protected function getNextPrefix($lastPrefix) { + protected function getNextPrefix(?string $lastPrefix): ?string { $prefixes = $this->ldapHelper->getServerConfigurationPrefixes(true); $noOfPrefixes = count($prefixes); if ($noOfPrefixes === 0) { @@ -295,79 +264,9 @@ class Sync extends TimedJob { } /** - * "fixes" DI - * - * @param array $argument + * Only used in tests */ - public function setArgument($argument) { - if (isset($argument['config'])) { - $this->config = $argument['config']; - } else { - $this->config = \OC::$server->getConfig(); - } - - if (isset($argument['helper'])) { - $this->ldapHelper = $argument['helper']; - } else { - $this->ldapHelper = new Helper($this->config, \OC::$server->getDatabaseConnection()); - } - - if (isset($argument['ldapWrapper'])) { - $this->ldap = $argument['ldapWrapper']; - } else { - $this->ldap = new LDAP(); - } - - if (isset($argument['avatarManager'])) { - $this->avatarManager = $argument['avatarManager']; - } else { - $this->avatarManager = \OC::$server->getAvatarManager(); - } - - if (isset($argument['dbc'])) { - $this->dbc = $argument['dbc']; - } else { - $this->dbc = \OC::$server->getDatabaseConnection(); - } - - if (isset($argument['ncUserManager'])) { - $this->ncUserManager = $argument['ncUserManager']; - } else { - $this->ncUserManager = \OC::$server->getUserManager(); - } - - if (isset($argument['notificationManager'])) { - $this->notificationManager = $argument['notificationManager']; - } else { - $this->notificationManager = \OC::$server->getNotificationManager(); - } - - if (isset($argument['userManager'])) { - $this->userManager = $argument['userManager']; - } - - if (isset($argument['mapper'])) { - $this->mapper = $argument['mapper']; - } else { - $this->mapper = new UserMapping($this->dbc); - } - - if (isset($argument['connectionFactory'])) { - $this->connectionFactory = $argument['connectionFactory']; - } else { - $this->connectionFactory = new ConnectionFactory($this->ldap); - } - - if (isset($argument['accessFactory'])) { - $this->accessFactory = $argument['accessFactory']; - } else { - $this->accessFactory = new AccessFactory( - $this->ldap, - $this->userManager, - $this->ldapHelper, - $this->config, - $this->ncUserManager - ); - } + public function overwritePropertiesForTest(LDAP $ldapWrapper): void { + $this->ldap = $ldapWrapper; } } diff --git a/apps/user_ldap/lib/Jobs/UpdateGroups.php b/apps/user_ldap/lib/Jobs/UpdateGroups.php index 6a57540e7b7..9e72bcd8432 100644 --- a/apps/user_ldap/lib/Jobs/UpdateGroups.php +++ b/apps/user_ldap/lib/Jobs/UpdateGroups.php @@ -1,244 +1,38 @@ <?php + +declare(strict_types=1); + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Jobs; -use OC\BackgroundJob\TimedJob; -use OCA\User_LDAP\Group_Proxy; -use OCP\EventDispatcher\IEventDispatcher; -use OCP\Group\Events\UserAddedEvent; -use OCP\Group\Events\UserRemovedEvent; -use OCP\IDBConnection; -use OCP\IGroupManager; -use OCP\ILogger; -use OCP\IUser; -use OCP\IUserManager; +use OCA\User_LDAP\Service\UpdateGroupsService; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\TimedJob; +use OCP\DB\Exception; +use OCP\IConfig; use Psr\Log\LoggerInterface; class UpdateGroups extends TimedJob { - private $groupsFromDB; - - /** @var Group_Proxy */ - private $groupBackend; - /** @var IEventDispatcher */ - private $dispatcher; - /** @var IGroupManager */ - private $groupManager; - /** @var IUserManager */ - private $userManager; - /** @var LoggerInterface */ - private $logger; - /** @var IDBConnection */ - private $dbc; - public function __construct( - Group_Proxy $groupBackend, - IEventDispatcher $dispatcher, - IGroupManager $groupManager, - IUserManager $userManager, - LoggerInterface $logger, - IDBConnection $dbc + private UpdateGroupsService $service, + private LoggerInterface $logger, + IConfig $config, + ITimeFactory $timeFactory, ) { - $this->interval = $this->getRefreshInterval(); - $this->groupBackend = $groupBackend; - $this->dispatcher = $dispatcher; - $this->groupManager = $groupManager; - $this->userManager = $userManager; - $this->logger = $logger; - $this->dbc = $dbc; - } - - /** - * @return int - */ - private function getRefreshInterval() { - //defaults to every hour - return \OC::$server->getConfig()->getAppValue('user_ldap', 'bgjRefreshInterval', 3600); + parent::__construct($timeFactory); + $this->interval = (int)$config->getAppValue('user_ldap', 'bgjRefreshInterval', '3600'); } /** * @param mixed $argument + * @throws Exception */ - public function run($argument) { - $this->updateGroups(); - } - - public function updateGroups() { - \OCP\Util::writeLog('user_ldap', 'Run background job "updateGroups"', ILogger::DEBUG); - - $knownGroups = array_keys($this->getKnownGroups()); - $actualGroups = $this->groupBackend->getGroups(); - - if (empty($actualGroups) && empty($knownGroups)) { - \OCP\Util::writeLog('user_ldap', - 'bgJ "updateGroups" – groups do not seem to be configured properly, aborting.', - ILogger::INFO); - return; - } - - $this->handleKnownGroups(array_intersect($actualGroups, $knownGroups)); - $this->handleCreatedGroups(array_diff($actualGroups, $knownGroups)); - $this->handleRemovedGroups(array_diff($knownGroups, $actualGroups)); - - \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – Finished.', ILogger::DEBUG); - } - - /** - * @return array - */ - private function getKnownGroups() { - if (is_array($this->groupsFromDB)) { - $this->groupsFromDB; - } - $qb = $this->dbc->getQueryBuilder(); - $qb->select(['owncloudname', 'owncloudusers']) - ->from('ldap_group_members'); - - $qResult = $qb->execute(); - $result = $qResult->fetchAll(); - $qResult->closeCursor(); - - $this->groupsFromDB = []; - foreach ($result as $dataset) { - $this->groupsFromDB[$dataset['owncloudname']] = $dataset; - } - - return $this->groupsFromDB; - } - - private function handleKnownGroups(array $groups) { - $this->logger->debug( - 'bgJ "updateGroups" – Dealing with known Groups.', - ['app' => 'user_ldap'] - ); - $qb = $this->dbc->getQueryBuilder(); - $qb->update('ldap_group_members') - ->set('owncloudusers', $qb->createParameter('members')) - ->where($qb->expr()->eq('owncloudname', $qb->createParameter('groupId'))); - - if (!is_array($this->groupsFromDB)) { - $this->getKnownGroups(); - } - foreach ($groups as $group) { - $knownUsers = unserialize($this->groupsFromDB[$group]['owncloudusers']); - $actualUsers = $this->groupBackend->usersInGroup($group); - $hasChanged = false; - - $groupObject = $this->groupManager->get($group); - foreach (array_diff($knownUsers, $actualUsers) as $removedUser) { - $userObject = $this->userManager->get($removedUser); - if ($userObject instanceof IUser) { - $this->dispatcher->dispatchTyped(new UserRemovedEvent($groupObject, $userObject)); - } - $this->logger->info( - 'bgJ "updateGroups" – {user} removed from {group}', - [ - 'app' => 'user_ldap', - 'user' => $removedUser, - 'group' => $group - ] - ); - $hasChanged = true; - } - foreach (array_diff($actualUsers, $knownUsers) as $addedUser) { - $userObject = $this->userManager->get($addedUser); - if ($userObject instanceof IUser) { - $this->dispatcher->dispatchTyped(new UserAddedEvent($groupObject, $userObject)); - } - $this->logger->info( - 'bgJ "updateGroups" – {user} added to {group}', - [ - 'app' => 'user_ldap', - 'user' => $addedUser, - 'group' => $group - ] - ); - $hasChanged = true; - } - if ($hasChanged) { - $qb->setParameters([ - 'members' => serialize($actualUsers), - 'groupId' => $group - ]); - $qb->execute(); - } - } - $this->logger->debug( - 'bgJ "updateGroups" – FINISHED dealing with known Groups.', - ['app' => 'user_ldap'] - ); - } - - /** - * @param string[] $createdGroups - */ - private function handleCreatedGroups($createdGroups) { - \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – dealing with created Groups.', ILogger::DEBUG); - - $query = $this->dbc->getQueryBuilder(); - $query->insert('ldap_group_members') - ->setValue('owncloudname', $query->createParameter('owncloudname')) - ->setValue('owncloudusers', $query->createParameter('owncloudusers')); - foreach ($createdGroups as $createdGroup) { - \OCP\Util::writeLog('user_ldap', - 'bgJ "updateGroups" – new group "' . $createdGroup . '" found.', - ILogger::INFO); - $users = serialize($this->groupBackend->usersInGroup($createdGroup)); - - $query->setParameter('owncloudname', $createdGroup) - ->setParameter('owncloudusers', $users); - $query->execute(); - } - \OCP\Util::writeLog('user_ldap', - 'bgJ "updateGroups" – FINISHED dealing with created Groups.', - ILogger::DEBUG); - } - - /** - * @param string[] $removedGroups - */ - private function handleRemovedGroups($removedGroups) { - \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – dealing with removed groups.', ILogger::DEBUG); - - $query = $this->dbc->getQueryBuilder(); - $query->delete('ldap_group_members') - ->where($query->expr()->eq('owncloudname', $query->createParameter('owncloudname'))); - - foreach ($removedGroups as $removedGroup) { - \OCP\Util::writeLog('user_ldap', - 'bgJ "updateGroups" – group "' . $removedGroup . '" was removed.', - ILogger::INFO); - $query->setParameter('owncloudname', $removedGroup); - $query->execute(); - } - \OCP\Util::writeLog('user_ldap', - 'bgJ "updateGroups" – FINISHED dealing with removed groups.', - ILogger::DEBUG); + public function run($argument): void { + $this->logger->debug('Run background job "updateGroups"'); + $this->service->updateGroups(); } } diff --git a/apps/user_ldap/lib/LDAP.php b/apps/user_ldap/lib/LDAP.php index bd1b7b01e4f..1cf20c4b939 100644 --- a/apps/user_ldap/lib/LDAP.php +++ b/apps/user_ldap/lib/LDAP.php @@ -1,144 +1,111 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Alexander Bergolth <leo@strike.wu.ac.at> - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author J0WI <J0WI@users.noreply.github.com> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Peter Kubica <peter@kubica.ch> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; use OC\ServerNotAvailableException; +use OCA\User_LDAP\DataCollector\LdapDataCollector; use OCA\User_LDAP\Exceptions\ConstraintViolationException; -use OCA\User_LDAP\PagedResults\IAdapter; -use OCA\User_LDAP\PagedResults\Php54; -use OCA\User_LDAP\PagedResults\Php73; +use OCP\IConfig; +use OCP\ILogger; +use OCP\Profiler\IProfiler; +use OCP\Server; +use Psr\Log\LoggerInterface; class LDAP implements ILDAPWrapper { - protected $curFunc = ''; - protected $curArgs = []; - - /** @var IAdapter */ - protected $pagedResultsAdapter; - - public function __construct() { - if (version_compare(PHP_VERSION, '7.3', '<') === true) { - $this->pagedResultsAdapter = new Php54(); - } else { - $this->pagedResultsAdapter = new Php73(); + protected array $curArgs = []; + protected LoggerInterface $logger; + protected IConfig $config; + + private ?LdapDataCollector $dataCollector = null; + + public function __construct( + protected string $logFile = '', + ) { + /** @var IProfiler $profiler */ + $profiler = Server::get(IProfiler::class); + if ($profiler->isEnabled()) { + $this->dataCollector = new LdapDataCollector(); + $profiler->add($this->dataCollector); } + + $this->logger = Server::get(LoggerInterface::class); + $this->config = Server::get(IConfig::class); } /** - * @param resource $link - * @param string $dn - * @param string $password - * @return bool|mixed + * {@inheritDoc} */ public function bind($link, $dn, $password) { return $this->invokeLDAPMethod('bind', $link, $dn, $password); } /** - * @param string $host - * @param string $port - * @return mixed + * {@inheritDoc} */ public function connect($host, $port) { - if (strpos($host, '://') === false) { + $pos = strpos($host, '://'); + if ($pos === false) { $host = 'ldap://' . $host; + $pos = 4; } - if (strpos($host, ':', strpos($host, '://') + 1) === false) { + if (strpos($host, ':', $pos + 1) === false && !empty($port)) { //ldap_connect ignores port parameter when URLs are passed $host .= ':' . $port; } return $this->invokeLDAPMethod('connect', $host); } - public function controlPagedResultResponse($link, $result, &$cookie): bool { - $this->preFunctionCall( - $this->pagedResultsAdapter->getResponseCallFunc(), - $this->pagedResultsAdapter->getResponseCallArgs([$link, $result, &$cookie]) - ); - - $result = $this->pagedResultsAdapter->responseCall($link); - $cookie = $this->pagedResultsAdapter->getCookie($link); - - if ($this->isResultFalse($result)) { - $this->postFunctionCall(); - } - - return $result; - } - /** - * @param LDAP $link - * @param int $pageSize - * @param bool $isCritical - * @return mixed|true + * {@inheritDoc} */ - public function controlPagedResult($link, $pageSize, $isCritical) { - $fn = $this->pagedResultsAdapter->getRequestCallFunc(); - $this->pagedResultsAdapter->setRequestParameters($link, $pageSize, $isCritical); - if ($fn === null) { - return true; + public function controlPagedResultResponse($link, $result, &$cookie): bool { + $errorCode = 0; + $errorMsg = ''; + $controls = []; + $matchedDn = null; + $referrals = []; + + /** Cannot use invokeLDAPMethod because arguments are passed by reference */ + $this->preFunctionCall('ldap_parse_result', [$link, $result]); + $success = ldap_parse_result($link, $result, + $errorCode, + $matchedDn, + $errorMsg, + $referrals, + $controls); + if ($errorCode !== 0) { + $this->processLDAPError($link, 'ldap_parse_result', $errorCode, $errorMsg); } - - $this->preFunctionCall($fn, $this->pagedResultsAdapter->getRequestCallArgs($link)); - $result = $this->pagedResultsAdapter->requestCall($link); - - if ($this->isResultFalse($result)) { - $this->postFunctionCall(); + if ($this->dataCollector !== null) { + $this->dataCollector->stopLastLdapRequest(); } - return $result; + $cookie = $controls[LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'] ?? ''; + + return $success; } /** - * @param LDAP $link - * @param LDAP $result - * @return mixed + * {@inheritDoc} */ public function countEntries($link, $result) { return $this->invokeLDAPMethod('count_entries', $link, $result); } /** - * @param LDAP $link - * @return integer + * {@inheritDoc} */ public function errno($link) { return $this->invokeLDAPMethod('errno', $link); } /** - * @param LDAP $link - * @return string + * {@inheritDoc} */ public function error($link) { return $this->invokeLDAPMethod('error', $link); @@ -147,7 +114,7 @@ class LDAP implements ILDAPWrapper { /** * Splits DN into its component parts * @param string $dn - * @param int @withAttrib + * @param int $withAttrib * @return array|false * @link https://www.php.net/manual/en/function.ldap-explode-dn.php */ @@ -156,83 +123,74 @@ class LDAP implements ILDAPWrapper { } /** - * @param LDAP $link - * @param LDAP $result - * @return mixed + * {@inheritDoc} */ public function firstEntry($link, $result) { return $this->invokeLDAPMethod('first_entry', $link, $result); } /** - * @param LDAP $link - * @param LDAP $result - * @return array|mixed + * {@inheritDoc} */ public function getAttributes($link, $result) { return $this->invokeLDAPMethod('get_attributes', $link, $result); } /** - * @param LDAP $link - * @param LDAP $result - * @return mixed|string + * {@inheritDoc} */ public function getDN($link, $result) { return $this->invokeLDAPMethod('get_dn', $link, $result); } /** - * @param LDAP $link - * @param LDAP $result - * @return array|mixed + * {@inheritDoc} */ public function getEntries($link, $result) { return $this->invokeLDAPMethod('get_entries', $link, $result); } /** - * @param LDAP $link - * @param resource $result - * @return mixed + * {@inheritDoc} */ public function nextEntry($link, $result) { return $this->invokeLDAPMethod('next_entry', $link, $result); } /** - * @param LDAP $link - * @param string $baseDN - * @param string $filter - * @param array $attr - * @return mixed + * {@inheritDoc} */ public function read($link, $baseDN, $filter, $attr) { - $this->pagedResultsAdapter->setReadArgs($link, $baseDN, $filter, $attr); - return $this->invokeLDAPMethod('read', ...$this->pagedResultsAdapter->getReadArgs($link)); + return $this->invokeLDAPMethod('read', $link, $baseDN, $filter, $attr, 0, -1); } /** - * @param LDAP $link - * @param string[] $baseDN - * @param string $filter - * @param array $attr - * @param int $attrsOnly - * @param int $limit - * @return mixed - * @throws \Exception + * {@inheritDoc} */ - public function search($link, $baseDN, $filter, $attr, $attrsOnly = 0, $limit = 0) { + public function search($link, $baseDN, $filter, $attr, $attrsOnly = 0, $limit = 0, int $pageSize = 0, string $cookie = '') { + if ($pageSize > 0 || $cookie !== '') { + $serverControls = [[ + 'oid' => LDAP_CONTROL_PAGEDRESULTS, + 'value' => [ + 'size' => $pageSize, + 'cookie' => $cookie, + ], + 'iscritical' => false, + ]]; + } else { + $serverControls = []; + } + + /** @psalm-suppress UndefinedVariable $oldHandler is defined when the closure is called but psalm fails to get that */ $oldHandler = set_error_handler(function ($no, $message, $file, $line) use (&$oldHandler) { - if (strpos($message, 'Partial search results returned: Sizelimit exceeded') !== false) { + if (str_contains($message, 'Partial search results returned: Sizelimit exceeded')) { return true; } $oldHandler($no, $message, $file, $line); return true; }); try { - $this->pagedResultsAdapter->setSearchArgs($link, $baseDN, $filter, $attr, $attrsOnly, $limit); - $result = $this->invokeLDAPMethod('search', ...$this->pagedResultsAdapter->getSearchArgs($link)); + $result = $this->invokeLDAPMethod('search', $link, $baseDN, $filter, $attr, $attrsOnly, $limit, -1, LDAP_DEREF_NEVER, $serverControls); restore_error_handler(); return $result; @@ -243,47 +201,35 @@ class LDAP implements ILDAPWrapper { } /** - * @param LDAP $link - * @param string $userDN - * @param string $password - * @return bool + * {@inheritDoc} */ public function modReplace($link, $userDN, $password) { return $this->invokeLDAPMethod('mod_replace', $link, $userDN, ['userPassword' => $password]); } /** - * @param LDAP $link - * @param string $userDN - * @param string $oldPassword - * @param string $password - * @return bool + * {@inheritDoc} */ - public function exopPasswd($link, $userDN, $oldPassword, $password) { + public function exopPasswd($link, string $userDN, string $oldPassword, string $password) { return $this->invokeLDAPMethod('exop_passwd', $link, $userDN, $oldPassword, $password); } /** - * @param LDAP $link - * @param string $option - * @param int $value - * @return bool|mixed + * {@inheritDoc} */ public function setOption($link, $option, $value) { return $this->invokeLDAPMethod('set_option', $link, $option, $value); } /** - * @param LDAP $link - * @return mixed|true + * {@inheritDoc} */ public function startTls($link) { return $this->invokeLDAPMethod('start_tls', $link); } /** - * @param resource $link - * @return bool|mixed + * {@inheritDoc} */ public function unbind($link) { return $this->invokeLDAPMethod('unbind', $link); @@ -298,12 +244,10 @@ class LDAP implements ILDAPWrapper { } /** - * Checks whether the submitted parameter is a resource - * @param Resource $resource the resource variable to check - * @return bool true if it is a resource, false otherwise + * {@inheritDoc} */ public function isResource($resource) { - return is_resource($resource); + return is_resource($resource) || is_object($resource); } /** @@ -312,15 +256,14 @@ class LDAP implements ILDAPWrapper { * When using ldap_search we provide an array, in case multiple bases are * configured. Thus, we need to check the array elements. * - * @param $result - * @return bool + * @param mixed $result */ - protected function isResultFalse($result) { + protected function isResultFalse(string $functionName, $result): bool { if ($result === false) { return true; } - if ($this->curFunc === 'ldap_search' && is_array($result)) { + if ($functionName === 'ldap_search' && is_array($result)) { foreach ($result as $singleResult) { if ($singleResult === false) { return true; @@ -332,16 +275,19 @@ class LDAP implements ILDAPWrapper { } /** + * @param array $arguments * @return mixed */ - protected function invokeLDAPMethod() { - $arguments = func_get_args(); - $func = 'ldap_' . array_shift($arguments); + protected function invokeLDAPMethod(string $func, ...$arguments) { + $func = 'ldap_' . $func; if (function_exists($func)) { $this->preFunctionCall($func, $arguments); $result = call_user_func_array($func, $arguments); - if ($this->isResultFalse($result)) { - $this->postFunctionCall(); + if ($this->isResultFalse($func, $result)) { + $this->postFunctionCall($func); + } + if ($this->dataCollector !== null) { + $this->dataCollector->stopLastLdapRequest(); } return $result; } @@ -349,30 +295,69 @@ class LDAP implements ILDAPWrapper { } /** - * @param string $functionName - * @param array $args + * Turn resources into string, and removes potentially problematic cookie string to avoid breaking logfiles */ - private function preFunctionCall($functionName, $args) { - $this->curFunc = $functionName; + private function sanitizeFunctionParameters(array $args): array { + return array_map(function ($item) { + if ($this->isResource($item)) { + return '(resource)'; + } + if (isset($item[0]['value']['cookie']) && $item[0]['value']['cookie'] !== '') { + $item[0]['value']['cookie'] = '*opaque cookie*'; + } + return $item; + }, $args); + } + + private function preFunctionCall(string $functionName, array $args): void { $this->curArgs = $args; + if (strcasecmp($functionName, 'ldap_bind') === 0 || strcasecmp($functionName, 'ldap_exop_passwd') === 0) { + // The arguments are not key value pairs + // \OCA\User_LDAP\LDAP::bind passes 3 arguments, the 3rd being the pw + // Remove it via direct array access for now, although a better solution could be found mebbe? + // @link https://github.com/nextcloud/server/issues/38461 + $args[2] = IConfig::SENSITIVE_VALUE; + } + + if ($this->config->getSystemValue('loglevel') === ILogger::DEBUG) { + /* Only running this if debug loglevel is on, to avoid processing parameters on production */ + $this->logger->debug('Calling LDAP function {func} with parameters {args}', [ + 'app' => 'user_ldap', + 'func' => $functionName, + 'args' => $this->sanitizeFunctionParameters($args), + ]); + } + + if ($this->dataCollector !== null) { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + $this->dataCollector->startLdapRequest($functionName, $this->sanitizeFunctionParameters($args), $backtrace); + } + + if ($this->logFile !== '' && is_writable(dirname($this->logFile)) && (!file_exists($this->logFile) || is_writable($this->logFile))) { + file_put_contents( + $this->logFile, + $functionName . '::' . json_encode($this->sanitizeFunctionParameters($args)) . "\n", + FILE_APPEND + ); + } } /** * Analyzes the returned LDAP error and acts accordingly if not 0 * - * @param resource $resource the LDAP Connection resource + * @param \LDAP\Connection $resource the LDAP Connection resource * @throws ConstraintViolationException * @throws ServerNotAvailableException * @throws \Exception */ - private function processLDAPError($resource) { - $errorCode = ldap_errno($resource); - if ($errorCode === 0) { - return; - } - $errorMsg = ldap_error($resource); - - if ($this->curFunc === 'ldap_get_entries' + private function processLDAPError($resource, string $functionName, int $errorCode, string $errorMsg): void { + $this->logger->debug('LDAP error {message} ({code}) after calling {func}', [ + 'app' => 'user_ldap', + 'message' => $errorMsg, + 'code' => $errorCode, + 'func' => $functionName, + ]); + if ($functionName === 'ldap_get_entries' && $errorCode === -4) { } elseif ($errorCode === 32) { //for now @@ -387,27 +372,20 @@ class LDAP implements ILDAPWrapper { } elseif ($errorCode === 1) { throw new \Exception('LDAP Operations error', $errorCode); } elseif ($errorCode === 19) { - ldap_get_option($this->curArgs[0], LDAP_OPT_ERROR_STRING, $extended_error); - throw new ConstraintViolationException(!empty($extended_error)?$extended_error:$errorMsg, $errorCode); - } else { - \OC::$server->getLogger()->debug('LDAP error {message} ({code}) after calling {func}', [ - 'app' => 'user_ldap', - 'message' => $errorMsg, - 'code' => $errorCode, - 'func' => $this->curFunc, - ]); + ldap_get_option($resource, LDAP_OPT_ERROR_STRING, $extended_error); + throw new ConstraintViolationException(!empty($extended_error) ? $extended_error : $errorMsg, $errorCode); } } /** * Called after an ldap method is run to act on LDAP error if necessary - * @throw \Exception + * @throws \Exception */ - private function postFunctionCall() { + private function postFunctionCall(string $functionName): void { if ($this->isResource($this->curArgs[0])) { $resource = $this->curArgs[0]; } elseif ( - $this->curFunc === 'ldap_search' + $functionName === 'ldap_search' && is_array($this->curArgs[0]) && $this->isResource($this->curArgs[0][0]) ) { @@ -418,9 +396,14 @@ class LDAP implements ILDAPWrapper { return; } - $this->processLDAPError($resource); + $errorCode = ldap_errno($resource); + if ($errorCode === 0) { + return; + } + $errorMsg = ldap_error($resource); + + $this->processLDAPError($resource, $functionName, $errorCode, $errorMsg); - $this->curFunc = ''; $this->curArgs = []; } } diff --git a/apps/user_ldap/lib/LDAPProvider.php b/apps/user_ldap/lib/LDAPProvider.php index c63bca9724a..d9750ae3fcf 100644 --- a/apps/user_ldap/lib/LDAPProvider.php +++ b/apps/user_ldap/lib/LDAPProvider.php @@ -1,63 +1,43 @@ <?php + /** - * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author root <root@localhost.localdomain> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; use OCA\User_LDAP\User\DeletedUsersIndex; use OCP\IServerContainer; use OCP\LDAP\IDeletionFlagSupport; use OCP\LDAP\ILDAPProvider; +use Psr\Log\LoggerInterface; /** - * LDAP provider for pulic access to the LDAP backend. + * LDAP provider for public access to the LDAP backend. */ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { private $userBackend; private $groupBackend; private $logger; - private $helper; - private $deletedUsersIndex; /** * Create new LDAPProvider - * @param \OCP\IServerContainer $serverContainer + * @param IServerContainer $serverContainer * @param Helper $helper * @param DeletedUsersIndex $deletedUsersIndex * @throws \Exception if user_ldap app was not enabled */ - public function __construct(IServerContainer $serverContainer, Helper $helper, DeletedUsersIndex $deletedUsersIndex) { - $this->logger = $serverContainer->getLogger(); - $this->helper = $helper; - $this->deletedUsersIndex = $deletedUsersIndex; + public function __construct( + IServerContainer $serverContainer, + private Helper $helper, + private DeletedUsersIndex $deletedUsersIndex, + ) { + $this->logger = $serverContainer->get(LoggerInterface::class); $userBackendFound = false; $groupBackendFound = false; foreach ($serverContainer->getUserManager()->getBackends() as $backend) { - $this->logger->debug('instance '.get_class($backend).' user backend.', ['app' => 'user_ldap']); + $this->logger->debug('instance ' . get_class($backend) . ' user backend.', ['app' => 'user_ldap']); if ($backend instanceof IUserLDAP) { $this->userBackend = $backend; $userBackendFound = true; @@ -65,7 +45,7 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { } } foreach ($serverContainer->getGroupManager()->getBackends() as $backend) { - $this->logger->debug('instance '.get_class($backend).' group backend.', ['app' => 'user_ldap']); + $this->logger->debug('instance ' . get_class($backend) . ' group backend.', ['app' => 'user_ldap']); if ($backend instanceof IGroupLDAP) { $this->groupBackend = $backend; $groupBackendFound = true; @@ -138,8 +118,8 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { /** * Sanitize a DN received from the LDAP server. - * @param array $dn the DN in question - * @return array the sanitized DN + * @param array|string $dn the DN in question + * @return array|string the sanitized DN */ public function sanitizeDN($dn) { return $this->helper->sanitizeDN($dn); @@ -149,7 +129,7 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { * Return a new LDAP connection resource for the specified user. * The connection must be closed manually. * @param string $uid user id - * @return resource of the LDAP connection + * @return \LDAP\Connection The LDAP connection * @throws \Exception if user id was not found in LDAP */ public function getLDAPConnection($uid) { @@ -163,7 +143,7 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { * Return a new LDAP connection resource for the specified user. * The connection must be closed manually. * @param string $gid group id - * @return resource of the LDAP connection + * @return \LDAP\Connection The LDAP connection * @throws \Exception if group id was not found in LDAP */ public function getGroupLDAPConnection($gid) { @@ -309,32 +289,42 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { /** * Get an LDAP attribute for a nextcloud user - * @param string $uid the nextcloud user id to get the attribute for - * @param string $attribute the name of the attribute to read - * @return string|null + * * @throws \Exception if user id was not found in LDAP */ public function getUserAttribute(string $uid, string $attribute): ?string { + $values = $this->getMultiValueUserAttribute($uid, $attribute); + if (count($values) === 0) { + return null; + } + return current($values); + } + + /** + * Get a multi-value LDAP attribute for a nextcloud user + * + * @throws \Exception if user id was not found in LDAP + */ + public function getMultiValueUserAttribute(string $uid, string $attribute): array { if (!$this->userBackend->userExists($uid)) { throw new \Exception('User id not found in LDAP'); } + $access = $this->userBackend->getLDAPAccess($uid); $connection = $access->getConnection(); - $key = $uid . "::" . $attribute; - $cached = $connection->getFromCache($key); + $key = $uid . '-' . $attribute; - if ($cached !== null) { + $cached = $connection->getFromCache($key); + if (is_array($cached)) { return $cached; } - $value = $access->readAttribute($access->username2dn($uid), $attribute); - if (is_array($value) && count($value) > 0) { - $value = current($value); - } else { - return null; + $values = $access->readAttribute($access->username2dn($uid), $attribute); + if ($values === false) { + $values = []; } - $connection->writeToCache($key, $value); - return $value; + $connection->writeToCache($key, $values); + return $values; } } diff --git a/apps/user_ldap/lib/LDAPProviderFactory.php b/apps/user_ldap/lib/LDAPProviderFactory.php index a64425afad0..8fad9d52206 100644 --- a/apps/user_ldap/lib/LDAPProviderFactory.php +++ b/apps/user_ldap/lib/LDAPProviderFactory.php @@ -1,29 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author root <root@localhost.localdomain> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; use OCP\IServerContainer; @@ -31,14 +12,17 @@ use OCP\LDAP\ILDAPProvider; use OCP\LDAP\ILDAPProviderFactory; class LDAPProviderFactory implements ILDAPProviderFactory { - /** * @var IServerContainer */ - private $serverContainer; - - public function __construct(IServerContainer $serverContainer) { - $this->serverContainer = $serverContainer; + public function __construct( + /** * @var IServerContainer */ + private IServerContainer $serverContainer, + ) { } public function getLDAPProvider(): ILDAPProvider { return $this->serverContainer->get(LDAPProvider::class); } + + public function isAvailable(): bool { + return true; + } } diff --git a/apps/user_ldap/lib/LDAPUtility.php b/apps/user_ldap/lib/LDAPUtility.php index 7fea8320739..39b517528e2 100644 --- a/apps/user_ldap/lib/LDAPUtility.php +++ b/apps/user_ldap/lib/LDAPUtility.php @@ -1,38 +1,19 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; abstract class LDAPUtility { - protected $ldap; - /** * constructor, make sure the subclasses call this one! - * @param ILDAPWrapper $ldapWrapper an instance of an ILDAPWrapper + * @param ILDAPWrapper $ldap an instance of an ILDAPWrapper */ - public function __construct(ILDAPWrapper $ldapWrapper) { - $this->ldap = $ldapWrapper; + public function __construct( + protected ILDAPWrapper $ldap, + ) { } } diff --git a/apps/user_ldap/lib/LogWrapper.php b/apps/user_ldap/lib/LogWrapper.php deleted file mode 100644 index 6543fc34c7e..00000000000 --- a/apps/user_ldap/lib/LogWrapper.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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\User_LDAP; - -/** - * @brief wraps around static Nextcloud core methods - */ -class LogWrapper { - protected $app = 'user_ldap'; - - /** - * @brief states whether the filesystem was loaded - * @return bool - */ - public function log($msg, $level) { - \OCP\Util::writeLog($this->app, $msg, $level); - } -} diff --git a/apps/user_ldap/lib/LoginListener.php b/apps/user_ldap/lib/LoginListener.php new file mode 100644 index 00000000000..f397f4694d2 --- /dev/null +++ b/apps/user_ldap/lib/LoginListener.php @@ -0,0 +1,147 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\User_LDAP; + +use OCA\User_LDAP\Db\GroupMembership; +use OCA\User_LDAP\Db\GroupMembershipMapper; +use OCP\DB\Exception; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\EventDispatcher\IEventListener; +use OCP\Group\Events\UserAddedEvent; +use OCP\Group\Events\UserRemovedEvent; +use OCP\IGroupManager; +use OCP\IUser; +use OCP\User\Events\PostLoginEvent; +use Psr\Log\LoggerInterface; + +/** + * @template-implements IEventListener<PostLoginEvent> + */ +class LoginListener implements IEventListener { + public function __construct( + private IEventDispatcher $dispatcher, + private Group_Proxy $groupBackend, + private IGroupManager $groupManager, + private LoggerInterface $logger, + private GroupMembershipMapper $groupMembershipMapper, + ) { + } + + public function handle(Event $event): void { + if ($event instanceof PostLoginEvent) { + $this->onPostLogin($event->getUser()); + } + } + + public function onPostLogin(IUser $user): void { + $this->logger->info( + self::class . ' - {user} postLogin', + [ + 'app' => 'user_ldap', + 'user' => $user->getUID(), + ] + ); + $this->updateGroups($user); + } + + private function updateGroups(IUser $userObject): void { + $userId = $userObject->getUID(); + $groupMemberships = $this->groupMembershipMapper->findGroupMembershipsForUser($userId); + $knownGroups = array_map( + static fn (GroupMembership $groupMembership): string => $groupMembership->getGroupid(), + $groupMemberships + ); + $groupMemberships = array_combine($knownGroups, $groupMemberships); + $actualGroups = $this->groupBackend->getUserGroups($userId); + + $newGroups = array_diff($actualGroups, $knownGroups); + $oldGroups = array_diff($knownGroups, $actualGroups); + foreach ($newGroups as $groupId) { + $groupObject = $this->groupManager->get($groupId); + if ($groupObject === null) { + $this->logger->error( + self::class . ' - group {group} could not be found (user {user})', + [ + 'app' => 'user_ldap', + 'user' => $userId, + 'group' => $groupId + ] + ); + continue; + } + try { + $this->groupMembershipMapper->insert(GroupMembership::fromParams(['groupid' => $groupId,'userid' => $userId])); + } catch (Exception $e) { + if ($e->getReason() !== Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + $this->logger->error( + self::class . ' - group {group} membership failed to be added (user {user})', + [ + 'app' => 'user_ldap', + 'user' => $userId, + 'group' => $groupId, + 'exception' => $e, + ] + ); + } + /* We failed to insert the groupmembership so we do not want to advertise it */ + continue; + } + $this->groupBackend->addRelationshipToCaches($userId, null, $groupId); + $this->dispatcher->dispatchTyped(new UserAddedEvent($groupObject, $userObject)); + $this->logger->info( + self::class . ' - {user} added to {group}', + [ + 'app' => 'user_ldap', + 'user' => $userId, + 'group' => $groupId + ] + ); + } + foreach ($oldGroups as $groupId) { + try { + $this->groupMembershipMapper->delete($groupMemberships[$groupId]); + } catch (Exception $e) { + if ($e->getReason() !== Exception::REASON_DATABASE_OBJECT_NOT_FOUND) { + $this->logger->error( + self::class . ' - group {group} membership failed to be removed (user {user})', + [ + 'app' => 'user_ldap', + 'user' => $userId, + 'group' => $groupId, + 'exception' => $e, + ] + ); + } + /* We failed to delete the groupmembership so we do not want to advertise it */ + continue; + } + $groupObject = $this->groupManager->get($groupId); + if ($groupObject === null) { + $this->logger->error( + self::class . ' - group {group} could not be found (user {user})', + [ + 'app' => 'user_ldap', + 'user' => $userId, + 'group' => $groupId + ] + ); + continue; + } + $this->dispatcher->dispatchTyped(new UserRemovedEvent($groupObject, $userObject)); + $this->logger->info( + 'service "updateGroups" - {user} removed from {group}', + [ + 'user' => $userId, + 'group' => $groupId + ] + ); + } + } +} diff --git a/apps/user_ldap/lib/Mapping/AbstractMapping.php b/apps/user_ldap/lib/Mapping/AbstractMapping.php index dcff88de008..fa10312a915 100644 --- a/apps/user_ldap/lib/Mapping/AbstractMapping.php +++ b/apps/user_ldap/lib/Mapping/AbstractMapping.php @@ -1,36 +1,18 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Aaron Wood <aaronjwood@gmail.com> - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author blizzz <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Mapping; use Doctrine\DBAL\Exception; -use OC\DB\QueryBuilder\QueryBuilder; use OCP\DB\IPreparedStatement; use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\Server; +use Psr\Log\LoggerInterface; /** * Class AbstractMapping @@ -39,11 +21,6 @@ use OCP\DB\QueryBuilder\IQueryBuilder; */ abstract class AbstractMapping { /** - * @var \OCP\IDBConnection $dbc - */ - protected $dbc; - - /** * returns the DB table name which holds the mappings * * @return string @@ -51,10 +28,11 @@ abstract class AbstractMapping { abstract protected function getTableName(bool $includePrefix = true); /** - * @param \OCP\IDBConnection $dbc + * @param IDBConnection $dbc */ - public function __construct(\OCP\IDBConnection $dbc) { - $this->dbc = $dbc; + public function __construct( + protected IDBConnection $dbc, + ) { } /** @var array caches Names (value) by DN (key) */ @@ -69,6 +47,7 @@ abstract class AbstractMapping { public function isColNameValid($col) { switch ($col) { case 'ldap_dn': + case 'ldap_dn_hash': case 'owncloud_name': case 'directory_uuid': return true; @@ -152,11 +131,11 @@ abstract class AbstractMapping { $oldDn = $this->getDnByUUID($uuid); $statement = $this->dbc->prepare(' UPDATE `' . $this->getTableName() . '` - SET `ldap_dn` = ? + SET `ldap_dn_hash` = ?, `ldap_dn` = ? WHERE `directory_uuid` = ? '); - $r = $this->modify($statement, [$fdn, $uuid]); + $r = $this->modify($statement, [$this->getDNHash($fdn), $fdn, $uuid]); if ($r && is_string($oldDn) && isset($this->cache[$oldDn])) { $this->cache[$fdn] = $this->cache[$oldDn]; @@ -175,16 +154,23 @@ abstract class AbstractMapping { * @param $fdn * @return bool */ - public function setUUIDbyDN($uuid, $fdn) { + public function setUUIDbyDN($uuid, $fdn): bool { $statement = $this->dbc->prepare(' UPDATE `' . $this->getTableName() . '` SET `directory_uuid` = ? - WHERE `ldap_dn` = ? + WHERE `ldap_dn_hash` = ? '); unset($this->cache[$fdn]); - return $this->modify($statement, [$uuid, $fdn]); + return $this->modify($statement, [$uuid, $this->getDNHash($fdn)]); + } + + /** + * Get the hash to store in database column ldap_dn_hash for a given dn + */ + protected function getDNHash(string $fdn): string { + return hash('sha256', $fdn, false); } /** @@ -195,21 +181,24 @@ abstract class AbstractMapping { */ public function getNameByDN($fdn) { if (!isset($this->cache[$fdn])) { - $this->cache[$fdn] = $this->getXbyY('owncloud_name', 'ldap_dn', $fdn); + $this->cache[$fdn] = $this->getXbyY('owncloud_name', 'ldap_dn_hash', $this->getDNHash($fdn)); } return $this->cache[$fdn]; } - protected function prepareListOfIdsQuery(array $dnList): IQueryBuilder { + /** + * @param array<string> $hashList + */ + protected function prepareListOfIdsQuery(array $hashList): IQueryBuilder { $qb = $this->dbc->getQueryBuilder(); - $qb->select('owncloud_name', 'ldap_dn') + $qb->select('owncloud_name', 'ldap_dn_hash', 'ldap_dn') ->from($this->getTableName(false)) - ->where($qb->expr()->in('ldap_dn', $qb->createNamedParameter($dnList, QueryBuilder::PARAM_STR_ARRAY))); + ->where($qb->expr()->in('ldap_dn_hash', $qb->createNamedParameter($hashList, IQueryBuilder::PARAM_STR_ARRAY))); return $qb; } protected function collectResultsFromListOfIdsQuery(IQueryBuilder $qb, array &$results): void { - $stmt = $qb->execute(); + $stmt = $qb->executeQuery(); while ($entry = $stmt->fetch(\Doctrine\DBAL\FetchMode::ASSOCIATIVE)) { $results[$entry['ldap_dn']] = $entry['owncloud_name']; $this->cache[$entry['ldap_dn']] = $entry['owncloud_name']; @@ -217,13 +206,18 @@ abstract class AbstractMapping { $stmt->closeCursor(); } + /** + * @param array<string> $fdns + * @return array<string,string> + */ public function getListOfIdsByDn(array $fdns): array { $totalDBParamLimit = 65000; $sliceSize = 1000; - $maxSlices = $totalDBParamLimit / $sliceSize; + $maxSlices = $this->dbc->getDatabaseProvider() === IDBConnection::PLATFORM_SQLITE ? 9 : $totalDBParamLimit / $sliceSize; $results = []; $slice = 1; + $fdns = array_map([$this, 'getDNHash'], $fdns); $fdnsSlice = count($fdns) > $sliceSize ? array_slice($fdns, 0, $sliceSize) : $fdns; $qb = $this->prepareListOfIdsQuery($fdnsSlice); @@ -241,7 +235,7 @@ abstract class AbstractMapping { } if (!empty($fdnsSlice)) { - $qb->orWhere($qb->expr()->in('ldap_dn', $qb->createNamedParameter($fdnsSlice, QueryBuilder::PARAM_STR_ARRAY))); + $qb->orWhere($qb->expr()->in('ldap_dn_hash', $qb->createNamedParameter($fdnsSlice, IQueryBuilder::PARAM_STR_ARRAY))); } if ($slice % $maxSlices === 0) { @@ -260,12 +254,9 @@ abstract class AbstractMapping { /** * Searches mapped names by the giving string in the name column * - * @param string $search - * @param string $prefixMatch - * @param string $postfixMatch * @return string[] */ - public function getNamesBySearch($search, $prefixMatch = "", $postfixMatch = "") { + public function getNamesBySearch(string $search, string $prefixMatch = '', string $postfixMatch = ''): array { $statement = $this->dbc->prepare(' SELECT `owncloud_name` FROM `' . $this->getTableName() . '` @@ -306,29 +297,27 @@ abstract class AbstractMapping { * @throws \Exception */ public function getUUIDByDN($dn) { - return $this->getXbyY('directory_uuid', 'ldap_dn', $dn); + return $this->getXbyY('directory_uuid', 'ldap_dn_hash', $this->getDNHash($dn)); } - /** - * gets a piece of the mapping list - * - * @param int $offset - * @param int $limit - * @return array - */ - public function getList($offset = null, $limit = null) { - $query = $this->dbc->prepare(' - SELECT - `ldap_dn` AS `dn`, - `owncloud_name` AS `name`, - `directory_uuid` AS `uuid` - FROM `' . $this->getTableName() . '`', - $limit, - $offset - ); - - $query->execute(); - return $query->fetchAll(); + public function getList(int $offset = 0, ?int $limit = null, bool $invalidatedOnly = false): array { + $select = $this->dbc->getQueryBuilder(); + $select->selectAlias('ldap_dn', 'dn') + ->selectAlias('owncloud_name', 'name') + ->selectAlias('directory_uuid', 'uuid') + ->from($this->getTableName()) + ->setMaxResults($limit) + ->setFirstResult($offset); + + if ($invalidatedOnly) { + $select->where($select->expr()->like('directory_uuid', $select->createNamedParameter('invalidated_%'))); + } + + $result = $select->executeQuery(); + $entries = $result->fetchAll(); + $result->closeCursor(); + + return $entries; } /** @@ -340,9 +329,9 @@ abstract class AbstractMapping { * @return bool */ public function map($fdn, $name, $uuid) { - if (mb_strlen($fdn) > 255) { - \OC::$server->getLogger()->error( - 'Cannot map, because the DN exceeds 255 characters: {dn}', + if (mb_strlen($fdn) > 4000) { + Server::get(LoggerInterface::class)->error( + 'Cannot map, because the DN exceeds 4000 characters: {dn}', [ 'app' => 'user_ldap', 'dn' => $fdn, @@ -352,6 +341,7 @@ abstract class AbstractMapping { } $row = [ + 'ldap_dn_hash' => $this->getDNHash($fdn), 'ldap_dn' => $fdn, 'owncloud_name' => $name, 'directory_uuid' => $uuid @@ -380,6 +370,11 @@ abstract class AbstractMapping { DELETE FROM `' . $this->getTableName() . '` WHERE `owncloud_name` = ?'); + $dn = array_search($name, $this->cache); + if ($dn !== false) { + unset($this->cache[$dn]); + } + return $this->modify($statement, [$name]); } @@ -408,20 +403,20 @@ abstract class AbstractMapping { * @param callable $preCallback * @param callable $postCallback * @return bool true on success, false when at least one row was not - * deleted + * deleted */ public function clearCb(callable $preCallback, callable $postCallback): bool { $picker = $this->dbc->getQueryBuilder(); $picker->select('owncloud_name') ->from($this->getTableName()); - $cursor = $picker->execute(); + $cursor = $picker->executeQuery(); $result = true; - while ($id = $cursor->fetchOne()) { + while (($id = $cursor->fetchOne()) !== false) { $preCallback($id); if ($isUnmapped = $this->unmap($id)) { $postCallback($id); } - $result &= $isUnmapped; + $result = $result && $isUnmapped; } $cursor->closeCursor(); return $result; @@ -432,11 +427,22 @@ abstract class AbstractMapping { * * @return int */ - public function count() { - $qb = $this->dbc->getQueryBuilder(); - $query = $qb->select($qb->func()->count('ldap_dn')) + public function count(): int { + $query = $this->dbc->getQueryBuilder(); + $query->select($query->func()->count('ldap_dn_hash')) ->from($this->getTableName()); - $res = $query->execute(); + $res = $query->executeQuery(); + $count = $res->fetchOne(); + $res->closeCursor(); + return (int)$count; + } + + public function countInvalidated(): int { + $query = $this->dbc->getQueryBuilder(); + $query->select($query->func()->count('ldap_dn_hash')) + ->from($this->getTableName()) + ->where($query->expr()->like('directory_uuid', $query->createNamedParameter('invalidated_%'))); + $res = $query->executeQuery(); $count = $res->fetchOne(); $res->closeCursor(); return (int)$count; diff --git a/apps/user_ldap/lib/Mapping/GroupMapping.php b/apps/user_ldap/lib/Mapping/GroupMapping.php index 8bd872b905e..d9ae5e749fc 100644 --- a/apps/user_ldap/lib/Mapping/GroupMapping.php +++ b/apps/user_ldap/lib/Mapping/GroupMapping.php @@ -1,27 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Mapping; /** diff --git a/apps/user_ldap/lib/Mapping/UserMapping.php b/apps/user_ldap/lib/Mapping/UserMapping.php index 8220215b461..a030cd0ab52 100644 --- a/apps/user_ldap/lib/Mapping/UserMapping.php +++ b/apps/user_ldap/lib/Mapping/UserMapping.php @@ -1,35 +1,58 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Mapping; +use OCP\HintException; +use OCP\IDBConnection; +use OCP\IRequest; +use OCP\Server; +use OCP\Support\Subscription\IAssertion; + /** * Class UserMapping + * * @package OCA\User_LDAP\Mapping */ class UserMapping extends AbstractMapping { + protected const PROV_API_REGEX = '/\/ocs\/v[1-9].php\/cloud\/(groups|users)/'; + + public function __construct( + IDBConnection $dbc, + private IAssertion $assertion, + ) { + parent::__construct($dbc); + } + + /** + * @throws HintException + */ + public function map($fdn, $name, $uuid): bool { + try { + $this->assertion->createUserIsLegit(); + } catch (HintException $e) { + static $isProvisioningApi = null; + + if ($isProvisioningApi === null) { + $request = Server::get(IRequest::class); + $isProvisioningApi = \preg_match(self::PROV_API_REGEX, $request->getRequestUri()) === 1; + } + if ($isProvisioningApi) { + // only throw when prov API is being used, since functionality + // should not break for end users (e.g. when sharing). + // On direct API usage, e.g. on users page, this is desired. + throw $e; + } + return false; + } + return parent::map($fdn, $name, $uuid); + } + /** * returns the DB table name which holds the mappings * @return string diff --git a/apps/user_ldap/lib/Migration/GroupMappingMigration.php b/apps/user_ldap/lib/Migration/GroupMappingMigration.php new file mode 100644 index 00000000000..7dfb8705770 --- /dev/null +++ b/apps/user_ldap/lib/Migration/GroupMappingMigration.php @@ -0,0 +1,50 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use OCP\IDBConnection; +use OCP\Migration\SimpleMigrationStep; + +abstract class GroupMappingMigration extends SimpleMigrationStep { + + public function __construct( + private IDBConnection $dbc, + ) { + } + + protected function copyGroupMappingData(string $sourceTable, string $destinationTable): void { + $insert = $this->dbc->getQueryBuilder(); + $insert->insert($destinationTable) + ->values([ + 'ldap_dn' => $insert->createParameter('ldap_dn'), + 'owncloud_name' => $insert->createParameter('owncloud_name'), + 'directory_uuid' => $insert->createParameter('directory_uuid'), + 'ldap_dn_hash' => $insert->createParameter('ldap_dn_hash'), + ]); + + $query = $this->dbc->getQueryBuilder(); + $query->select('*') + ->from($sourceTable); + + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $insert + ->setParameter('ldap_dn', $row['ldap_dn']) + ->setParameter('owncloud_name', $row['owncloud_name']) + ->setParameter('directory_uuid', $row['directory_uuid']) + ->setParameter('ldap_dn_hash', $row['ldap_dn_hash']) + ; + + $insert->executeStatement(); + } + $result->closeCursor(); + } +} diff --git a/apps/user_ldap/lib/Migration/RemoveRefreshTime.php b/apps/user_ldap/lib/Migration/RemoveRefreshTime.php index 8c8fec2253b..88ac56ccb84 100644 --- a/apps/user_ldap/lib/Migration/RemoveRefreshTime.php +++ b/apps/user_ldap/lib/Migration/RemoveRefreshTime.php @@ -3,27 +3,9 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Migration; use OCP\IConfig; @@ -40,14 +22,10 @@ use OCP\Migration\IRepairStep; */ class RemoveRefreshTime implements IRepairStep { - /** @var IDBConnection */ - private $dbc; - /** @var IConfig */ - private $config; - - public function __construct(IDBConnection $dbc, IConfig $config) { - $this->dbc = $dbc; - $this->config = $config; + public function __construct( + private IDBConnection $dbc, + private IConfig $config, + ) { } public function getName() { @@ -61,6 +39,6 @@ class RemoveRefreshTime implements IRepairStep { $qb->delete('preferences') ->where($qb->expr()->eq('appid', $qb->createNamedParameter('user_ldap'))) ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lastFeatureRefresh'))) - ->execute(); + ->executeStatement(); } } diff --git a/apps/user_ldap/lib/Migration/SetDefaultProvider.php b/apps/user_ldap/lib/Migration/SetDefaultProvider.php index e07f25a54d3..0bb04438a1d 100644 --- a/apps/user_ldap/lib/Migration/SetDefaultProvider.php +++ b/apps/user_ldap/lib/Migration/SetDefaultProvider.php @@ -3,27 +3,9 @@ declare(strict_types=1); /** - * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at> - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Migration; use OCA\User_LDAP\Helper; @@ -34,16 +16,10 @@ use OCP\Migration\IRepairStep; class SetDefaultProvider implements IRepairStep { - /** @var IConfig */ - private $config; - - /** @var Helper */ - private $helper; - - public function __construct(IConfig $config, - Helper $helper) { - $this->config = $config; - $this->helper = $helper; + public function __construct( + private IConfig $config, + private Helper $helper, + ) { } public function getName(): string { diff --git a/apps/user_ldap/lib/Migration/UUIDFix.php b/apps/user_ldap/lib/Migration/UUIDFix.php index ba2264c3c63..e853f3bba66 100644 --- a/apps/user_ldap/lib/Migration/UUIDFix.php +++ b/apps/user_ldap/lib/Migration/UUIDFix.php @@ -1,40 +1,19 @@ <?php + /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Migration; -use OC\BackgroundJob\QueuedJob; use OCA\User_LDAP\Mapping\AbstractMapping; use OCA\User_LDAP\Proxy; use OCA\User_LDAP\User_Proxy; +use OCP\BackgroundJob\QueuedJob; abstract class UUIDFix extends QueuedJob { - /** @var AbstractMapping */ - protected $mapper; - - /** @var Proxy */ - protected $proxy; + protected AbstractMapping $mapper; + protected Proxy $proxy; public function run($argument) { $isUser = $this->proxy instanceof User_Proxy; diff --git a/apps/user_ldap/lib/Migration/UUIDFixGroup.php b/apps/user_ldap/lib/Migration/UUIDFixGroup.php index 2e9eeac7ca7..3924c91e7ba 100644 --- a/apps/user_ldap/lib/Migration/UUIDFixGroup.php +++ b/apps/user_ldap/lib/Migration/UUIDFixGroup.php @@ -1,33 +1,18 @@ <?php + /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Migration; use OCA\User_LDAP\Group_Proxy; use OCA\User_LDAP\Mapping\GroupMapping; +use OCP\AppFramework\Utility\ITimeFactory; class UUIDFixGroup extends UUIDFix { - public function __construct(GroupMapping $mapper, Group_Proxy $proxy) { + public function __construct(ITimeFactory $time, GroupMapping $mapper, Group_Proxy $proxy) { + parent::__construct($time); $this->mapper = $mapper; $this->proxy = $proxy; } diff --git a/apps/user_ldap/lib/Migration/UUIDFixInsert.php b/apps/user_ldap/lib/Migration/UUIDFixInsert.php index 3a8e78ef6a4..bb92314d93a 100644 --- a/apps/user_ldap/lib/Migration/UUIDFixInsert.php +++ b/apps/user_ldap/lib/Migration/UUIDFixInsert.php @@ -1,28 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Migration; use OCA\User_LDAP\Mapping\GroupMapping; @@ -34,23 +15,12 @@ use OCP\Migration\IRepairStep; class UUIDFixInsert implements IRepairStep { - /** @var IConfig */ - protected $config; - - /** @var UserMapping */ - protected $userMapper; - - /** @var GroupMapping */ - protected $groupMapper; - - /** @var IJobList */ - protected $jobList; - - public function __construct(IConfig $config, UserMapping $userMapper, GroupMapping $groupMapper, IJobList $jobList) { - $this->config = $config; - $this->userMapper = $userMapper; - $this->groupMapper = $groupMapper; - $this->jobList = $jobList; + public function __construct( + protected IConfig $config, + protected UserMapping $userMapper, + protected GroupMapping $groupMapper, + protected IJobList $jobList, + ) { } /** @@ -91,7 +61,7 @@ class UUIDFixInsert implements IRepairStep { $this->jobList->add($jobClass, ['records' => $records]); $offset += $batchSize; } catch (\InvalidArgumentException $e) { - if (strpos($e->getMessage(), 'Background job arguments can\'t exceed 4000') !== false) { + if (str_contains($e->getMessage(), 'Background job arguments can\'t exceed 4000')) { $batchSize = (int)floor(count($records) * 0.8); $retry = true; } diff --git a/apps/user_ldap/lib/Migration/UUIDFixUser.php b/apps/user_ldap/lib/Migration/UUIDFixUser.php index a98f9fbeb6b..71c3f638095 100644 --- a/apps/user_ldap/lib/Migration/UUIDFixUser.php +++ b/apps/user_ldap/lib/Migration/UUIDFixUser.php @@ -1,33 +1,18 @@ <?php + /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Migration; -use OCA\User_LDAP\User_Proxy; use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\User_Proxy; +use OCP\AppFramework\Utility\ITimeFactory; class UUIDFixUser extends UUIDFix { - public function __construct(UserMapping $mapper, User_Proxy $proxy) { + public function __construct(ITimeFactory $time, UserMapping $mapper, User_Proxy $proxy) { + parent::__construct($time); $this->mapper = $mapper; $this->proxy = $proxy; } diff --git a/apps/user_ldap/lib/Migration/UnsetDefaultProvider.php b/apps/user_ldap/lib/Migration/UnsetDefaultProvider.php new file mode 100644 index 00000000000..025415cf712 --- /dev/null +++ b/apps/user_ldap/lib/Migration/UnsetDefaultProvider.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\User_LDAP\Migration; + +use OCA\User_LDAP\LDAPProviderFactory; +use OCP\IConfig; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +class UnsetDefaultProvider implements IRepairStep { + + public function __construct( + private IConfig $config, + ) { + } + + public function getName(): string { + return 'Unset default LDAP provider'; + } + + public function run(IOutput $output): void { + $current = $this->config->getSystemValue('ldapProviderFactory', null); + if ($current === LDAPProviderFactory::class) { + $this->config->deleteSystemValue('ldapProviderFactory'); + } + } +} diff --git a/apps/user_ldap/lib/Migration/Version1010Date20200630192842.php b/apps/user_ldap/lib/Migration/Version1010Date20200630192842.php index 754200405c8..1464e50e359 100644 --- a/apps/user_ldap/lib/Migration/Version1010Date20200630192842.php +++ b/apps/user_ldap/lib/Migration/Version1010Date20200630192842.php @@ -3,32 +3,14 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com> - * - * @author Joas Schilling <coding@schilljs.com> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Migration; use Closure; -use OCP\DB\Types; use OCP\DB\ISchemaWrapper; +use OCP\DB\Types; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; @@ -47,12 +29,12 @@ class Version1010Date20200630192842 extends SimpleMigrationStep { $table = $schema->createTable('ldap_user_mapping'); $table->addColumn('ldap_dn', Types::STRING, [ 'notnull' => true, - 'length' => 255, + 'length' => 4000, 'default' => '', ]); $table->addColumn('owncloud_name', Types::STRING, [ 'notnull' => true, - 'length' => 255, + 'length' => 64, 'default' => '', ]); $table->addColumn('directory_uuid', Types::STRING, [ @@ -60,20 +42,25 @@ class Version1010Date20200630192842 extends SimpleMigrationStep { 'length' => 255, 'default' => '', ]); + $table->addColumn('ldap_dn_hash', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + ]); $table->setPrimaryKey(['owncloud_name']); - $table->addUniqueIndex(['ldap_dn'], 'ldap_dn_users'); + $table->addUniqueIndex(['ldap_dn_hash'], 'ldap_user_dn_hashes'); + $table->addUniqueIndex(['directory_uuid'], 'ldap_user_directory_uuid'); } if (!$schema->hasTable('ldap_group_mapping')) { $table = $schema->createTable('ldap_group_mapping'); $table->addColumn('ldap_dn', Types::STRING, [ 'notnull' => true, - 'length' => 255, + 'length' => 4000, 'default' => '', ]); $table->addColumn('owncloud_name', Types::STRING, [ 'notnull' => true, - 'length' => 255, + 'length' => 64, 'default' => '', ]); $table->addColumn('directory_uuid', Types::STRING, [ @@ -81,8 +68,13 @@ class Version1010Date20200630192842 extends SimpleMigrationStep { 'length' => 255, 'default' => '', ]); - $table->setPrimaryKey(['ldap_dn']); - $table->addUniqueIndex(['owncloud_name'], 'owncloud_name_groups'); + $table->addColumn('ldap_dn_hash', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + ]); + $table->setPrimaryKey(['owncloud_name']); + $table->addUniqueIndex(['ldap_dn_hash'], 'ldap_group_dn_hashes'); + $table->addUniqueIndex(['directory_uuid'], 'ldap_group_directory_uuid'); } if (!$schema->hasTable('ldap_group_members')) { diff --git a/apps/user_ldap/lib/Migration/Version1120Date20210917155206.php b/apps/user_ldap/lib/Migration/Version1120Date20210917155206.php new file mode 100644 index 00000000000..dc3823bf771 --- /dev/null +++ b/apps/user_ldap/lib/Migration/Version1120Date20210917155206.php @@ -0,0 +1,131 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use Closure; +use OC\Hooks\PublicEmitter; +use OCP\DB\Exception; +use OCP\DB\ISchemaWrapper; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\IUserManager; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; +use Psr\Log\LoggerInterface; + +class Version1120Date20210917155206 extends SimpleMigrationStep { + + public function __construct( + private IDBConnection $dbc, + private IUserManager $userManager, + private LoggerInterface $logger, + ) { + } + + public function getName() { + return 'Adjust LDAP user and group id column lengths to match server lengths'; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + public function preSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + // ensure that there is no user or group id longer than 64char in LDAP table + $this->handleIDs('ldap_group_mapping', false); + $this->handleIDs('ldap_user_mapping', true); + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $changeSchema = false; + foreach (['ldap_user_mapping', 'ldap_group_mapping'] as $tableName) { + $table = $schema->getTable($tableName); + $column = $table->getColumn('owncloud_name'); + if ($column->getLength() > 64) { + $column->setLength(64); + $changeSchema = true; + } + } + + return $changeSchema ? $schema : null; + } + + protected function handleIDs(string $table, bool $emitHooks) { + $select = $this->getSelectQuery($table); + $update = $this->getUpdateQuery($table); + + $result = $select->executeQuery(); + while ($row = $result->fetch()) { + $newId = hash('sha256', $row['owncloud_name'], false); + if ($emitHooks) { + $this->emitUnassign($row['owncloud_name'], true); + } + $update->setParameter('uuid', $row['directory_uuid']); + $update->setParameter('newId', $newId); + try { + $update->executeStatement(); + if ($emitHooks) { + $this->emitUnassign($row['owncloud_name'], false); + $this->emitAssign($newId); + } + } catch (Exception $e) { + $this->logger->error('Failed to shorten owncloud_name "{oldId}" to "{newId}" (UUID: "{uuid}" of {table})', + [ + 'app' => 'user_ldap', + 'oldId' => $row['owncloud_name'], + 'newId' => $newId, + 'uuid' => $row['directory_uuid'], + 'table' => $table, + 'exception' => $e, + ] + ); + } + } + $result->closeCursor(); + } + + protected function getSelectQuery(string $table): IQueryBuilder { + $qb = $this->dbc->getQueryBuilder(); + $qb->select('owncloud_name', 'directory_uuid') + ->from($table) + ->where($qb->expr()->gt($qb->func()->octetLength('owncloud_name'), $qb->createNamedParameter('64'), IQueryBuilder::PARAM_INT)); + return $qb; + } + + protected function getUpdateQuery(string $table): IQueryBuilder { + $qb = $this->dbc->getQueryBuilder(); + $qb->update($table) + ->set('owncloud_name', $qb->createParameter('newId')) + ->where($qb->expr()->eq('directory_uuid', $qb->createParameter('uuid'))); + return $qb; + } + + protected function emitUnassign(string $oldId, bool $pre): void { + if ($this->userManager instanceof PublicEmitter) { + $this->userManager->emit('\OC\User', $pre ? 'pre' : 'post' . 'UnassignedUserId', [$oldId]); + } + } + + protected function emitAssign(string $newId): void { + if ($this->userManager instanceof PublicEmitter) { + $this->userManager->emit('\OC\User', 'assignedUserId', [$newId]); + } + } +} diff --git a/apps/user_ldap/lib/Migration/Version1130Date20211102154716.php b/apps/user_ldap/lib/Migration/Version1130Date20211102154716.php new file mode 100644 index 00000000000..2457acd840d --- /dev/null +++ b/apps/user_ldap/lib/Migration/Version1130Date20211102154716.php @@ -0,0 +1,266 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use Closure; +use Generator; +use OCP\DB\Exception; +use OCP\DB\ISchemaWrapper; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\DB\Types; +use OCP\IDBConnection; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; +use Psr\Log\LoggerInterface; + +class Version1130Date20211102154716 extends SimpleMigrationStep { + + /** @var string[] */ + private $hashColumnAddedToTables = []; + + public function __construct( + private IDBConnection $dbc, + private LoggerInterface $logger, + ) { + } + + public function getName() { + return 'Adjust LDAP user and group ldap_dn column lengths and add ldap_dn_hash columns'; + } + + public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) { + foreach (['ldap_user_mapping', 'ldap_group_mapping'] as $tableName) { + $this->processDuplicateUUIDs($tableName); + } + + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + if ($schema->hasTable('ldap_group_mapping_backup')) { + // Previous upgrades of a broken release might have left an incomplete + // ldap_group_mapping_backup table. No need to recreate, but it + // should be empty. + // TRUNCATE is not available from Query Builder, but faster than DELETE FROM. + $sql = $this->dbc->getDatabasePlatform()->getTruncateTableSQL('`*PREFIX*ldap_group_mapping_backup`', false); + $this->dbc->executeStatement($sql); + } + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $changeSchema = false; + foreach (['ldap_user_mapping', 'ldap_group_mapping'] as $tableName) { + $table = $schema->getTable($tableName); + if (!$table->hasColumn('ldap_dn_hash')) { + $table->addColumn('ldap_dn_hash', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + ]); + $changeSchema = true; + $this->hashColumnAddedToTables[] = $tableName; + } + $column = $table->getColumn('ldap_dn'); + if ($tableName === 'ldap_user_mapping') { + if ($column->getLength() < 4000) { + $column->setLength(4000); + $changeSchema = true; + } + + if ($table->hasIndex('ldap_dn_users')) { + $table->dropIndex('ldap_dn_users'); + $changeSchema = true; + } + if (!$table->hasIndex('ldap_user_dn_hashes')) { + $table->addUniqueIndex(['ldap_dn_hash'], 'ldap_user_dn_hashes'); + $changeSchema = true; + } + if (!$table->hasIndex('ldap_user_directory_uuid')) { + $table->addUniqueIndex(['directory_uuid'], 'ldap_user_directory_uuid'); + $changeSchema = true; + } + } elseif (!$schema->hasTable('ldap_group_mapping_backup')) { + // We need to copy the table twice to be able to change primary key, prepare the backup table + $table2 = $schema->createTable('ldap_group_mapping_backup'); + $table2->addColumn('ldap_dn', Types::STRING, [ + 'notnull' => true, + 'length' => 4000, + 'default' => '', + ]); + $table2->addColumn('owncloud_name', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + 'default' => '', + ]); + $table2->addColumn('directory_uuid', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + 'default' => '', + ]); + $table2->addColumn('ldap_dn_hash', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + ]); + $table2->setPrimaryKey(['owncloud_name'], 'lgm_backup_primary'); + $changeSchema = true; + } + } + + return $changeSchema ? $schema : null; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { + $this->handleDNHashes('ldap_group_mapping'); + $this->handleDNHashes('ldap_user_mapping'); + } + + protected function handleDNHashes(string $table): void { + $select = $this->getSelectQuery($table); + $update = $this->getUpdateQuery($table); + + $result = $select->executeQuery(); + while ($row = $result->fetch()) { + $dnHash = hash('sha256', $row['ldap_dn'], false); + $update->setParameter('name', $row['owncloud_name']); + $update->setParameter('dn_hash', $dnHash); + try { + $update->executeStatement(); + } catch (Exception $e) { + $this->logger->error('Failed to add hash "{dnHash}" ("{name}" of {table})', + [ + 'app' => 'user_ldap', + 'name' => $row['owncloud_name'], + 'dnHash' => $dnHash, + 'table' => $table, + 'exception' => $e, + ] + ); + } + } + $result->closeCursor(); + } + + protected function getSelectQuery(string $table): IQueryBuilder { + $qb = $this->dbc->getQueryBuilder(); + $qb->select('owncloud_name', 'ldap_dn') + ->from($table); + + // when added we may run into risk that it's read from a DB node + // where the column is not present. Then the where clause is also + // not necessary since all rows qualify. + if (!in_array($table, $this->hashColumnAddedToTables, true)) { + $qb->where($qb->expr()->isNull('ldap_dn_hash')); + } + + return $qb; + } + + protected function getUpdateQuery(string $table): IQueryBuilder { + $qb = $this->dbc->getQueryBuilder(); + $qb->update($table) + ->set('ldap_dn_hash', $qb->createParameter('dn_hash')) + ->where($qb->expr()->eq('owncloud_name', $qb->createParameter('name'))); + return $qb; + } + + /** + * @throws Exception + */ + protected function processDuplicateUUIDs(string $table): void { + $uuids = $this->getDuplicatedUuids($table); + $idsWithUuidToInvalidate = []; + foreach ($uuids as $uuid) { + array_push($idsWithUuidToInvalidate, ...$this->getNextcloudIdsByUuid($table, $uuid)); + } + $this->invalidateUuids($table, $idsWithUuidToInvalidate); + } + + /** + * @throws Exception + */ + protected function invalidateUuids(string $table, array $idList): void { + $update = $this->dbc->getQueryBuilder(); + $update->update($table) + ->set('directory_uuid', $update->createParameter('invalidatedUuid')) + ->where($update->expr()->eq('owncloud_name', $update->createParameter('nextcloudId'))); + + while ($nextcloudId = array_shift($idList)) { + $update->setParameter('nextcloudId', $nextcloudId); + $update->setParameter('invalidatedUuid', 'invalidated_' . \bin2hex(\random_bytes(6))); + try { + $update->executeStatement(); + $this->logger->warning( + 'LDAP user or group with ID {nid} has a duplicated UUID value which therefore was invalidated. You may double-check your LDAP configuration and trigger an update of the UUID.', + [ + 'app' => 'user_ldap', + 'nid' => $nextcloudId, + ] + ); + } catch (Exception $e) { + // Catch possible, but unlikely duplications if new invalidated errors. + // There is the theoretical chance of an infinity loop is, when + // the constraint violation has a different background. I cannot + // think of one at the moment. + if ($e->getReason() !== Exception::REASON_CONSTRAINT_VIOLATION) { + throw $e; + } + $idList[] = $nextcloudId; + } + } + } + + /** + * @throws \OCP\DB\Exception + * @return array<string> + */ + protected function getNextcloudIdsByUuid(string $table, string $uuid): array { + $select = $this->dbc->getQueryBuilder(); + $select->select('owncloud_name') + ->from($table) + ->where($select->expr()->eq('directory_uuid', $select->createNamedParameter($uuid))); + + $result = $select->executeQuery(); + $idList = []; + while (($id = $result->fetchOne()) !== false) { + $idList[] = $id; + } + $result->closeCursor(); + return $idList; + } + + /** + * @return Generator<string> + * @throws \OCP\DB\Exception + */ + protected function getDuplicatedUuids(string $table): Generator { + $select = $this->dbc->getQueryBuilder(); + $select->select('directory_uuid') + ->from($table) + ->groupBy('directory_uuid') + ->having($select->expr()->gt($select->func()->count('owncloud_name'), $select->createNamedParameter(1))); + + $result = $select->executeQuery(); + while (($uuid = $result->fetchOne()) !== false) { + yield $uuid; + } + $result->closeCursor(); + } +} diff --git a/apps/user_ldap/lib/Migration/Version1130Date20220110154717.php b/apps/user_ldap/lib/Migration/Version1130Date20220110154717.php new file mode 100644 index 00000000000..80960373edf --- /dev/null +++ b/apps/user_ldap/lib/Migration/Version1130Date20220110154717.php @@ -0,0 +1,60 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\Migration\IOutput; + +class Version1130Date20220110154717 extends GroupMappingMigration { + public function getName() { + return 'Copy ldap_group_mapping data to backup table if needed'; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @since 13.0.0 + */ + public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if (!$schema->hasTable('ldap_group_mapping_backup')) { + // Backup table does not exist + return; + } + + $output->startProgress(); + $this->copyGroupMappingData('ldap_group_mapping', 'ldap_group_mapping_backup'); + $output->finishProgress(); + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if (!$schema->hasTable('ldap_group_mapping_backup')) { + // Backup table does not exist + return null; + } + + $schema->dropTable('ldap_group_mapping'); + + return $schema; + } +} diff --git a/apps/user_ldap/lib/Migration/Version1130Date20220110154718.php b/apps/user_ldap/lib/Migration/Version1130Date20220110154718.php new file mode 100644 index 00000000000..f67b791daad --- /dev/null +++ b/apps/user_ldap/lib/Migration/Version1130Date20220110154718.php @@ -0,0 +1,82 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\DB\Types; +use OCP\Migration\IOutput; + +class Version1130Date20220110154718 extends GroupMappingMigration { + public function getName() { + return 'Copy ldap_group_mapping data from backup table and if needed'; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if (!$schema->hasTable('ldap_group_mapping_backup')) { + // Backup table does not exist + return null; + } + + $table = $schema->createTable('ldap_group_mapping'); + $table->addColumn('ldap_dn', Types::STRING, [ + 'notnull' => true, + 'length' => 4000, + 'default' => '', + ]); + $table->addColumn('owncloud_name', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + 'default' => '', + ]); + $table->addColumn('directory_uuid', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + 'default' => '', + ]); + $table->addColumn('ldap_dn_hash', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + ]); + $table->setPrimaryKey(['owncloud_name']); + $table->addUniqueIndex(['ldap_dn_hash'], 'ldap_group_dn_hashes'); + $table->addUniqueIndex(['directory_uuid'], 'ldap_group_directory_uuid'); + + return $schema; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if (!$schema->hasTable('ldap_group_mapping_backup')) { + // Backup table does not exist + return; + } + + $output->startProgress(); + $this->copyGroupMappingData('ldap_group_mapping_backup', 'ldap_group_mapping'); + $output->finishProgress(); + } +} diff --git a/apps/user_ldap/lib/Migration/Version1130Date20220110154719.php b/apps/user_ldap/lib/Migration/Version1130Date20220110154719.php new file mode 100644 index 00000000000..c34ee5357f5 --- /dev/null +++ b/apps/user_ldap/lib/Migration/Version1130Date20220110154719.php @@ -0,0 +1,39 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +class Version1130Date20220110154719 extends SimpleMigrationStep { + public function getName() { + return 'Drop ldap_group_mapping_backup'; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if ($schema->hasTable('ldap_group_mapping_backup')) { + $schema->dropTable('ldap_group_mapping_backup'); + return $schema; + } + + return null; + } +} diff --git a/apps/user_ldap/lib/Migration/Version1141Date20220323143801.php b/apps/user_ldap/lib/Migration/Version1141Date20220323143801.php new file mode 100644 index 00000000000..ecedbf1de20 --- /dev/null +++ b/apps/user_ldap/lib/Migration/Version1141Date20220323143801.php @@ -0,0 +1,95 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +class Version1141Date20220323143801 extends SimpleMigrationStep { + + public function __construct( + private IDBConnection $dbc, + ) { + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + public function preSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + foreach (['ldap_user_mapping', 'ldap_group_mapping'] as $tableName) { + $qb = $this->dbc->getQueryBuilder(); + $qb->select('ldap_dn') + ->from($tableName) + ->where($qb->expr()->gt($qb->func()->octetLength('ldap_dn'), $qb->createNamedParameter('4000'), IQueryBuilder::PARAM_INT)); + + $dnsTooLong = []; + $result = $qb->executeQuery(); + while (($dn = $result->fetchOne()) !== false) { + $dnsTooLong[] = $dn; + } + $result->closeCursor(); + $this->shortenDNs($dnsTooLong, $tableName); + } + } + + protected function shortenDNs(array $dns, string $table): void { + $qb = $this->dbc->getQueryBuilder(); + $qb->update($table) + ->set('ldap_dn', $qb->createParameter('shortenedDn')) + ->where($qb->expr()->eq('ldap_dn', $qb->createParameter('originalDn'))); + + $pageSize = 1000; + $page = 0; + do { + $subset = array_slice($dns, $page * $pageSize, $pageSize); + try { + $this->dbc->beginTransaction(); + foreach ($subset as $dn) { + $shortenedDN = mb_substr($dn, 0, 4000); + $qb->setParameter('shortenedDn', $shortenedDN); + $qb->setParameter('originalDn', $dn); + $qb->executeStatement(); + } + $this->dbc->commit(); + } catch (\Throwable $t) { + $this->dbc->rollBack(); + throw $t; + } + $page++; + } while (count($subset) === $pageSize); + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + foreach (['ldap_user_mapping', 'ldap_group_mapping'] as $tableName) { + $table = $schema->getTable($tableName); + $column = $table->getColumn('ldap_dn'); + if ($column->getLength() > 4000) { + $column->setLength(4000); + } + } + + return $schema; + } +} diff --git a/apps/user_ldap/lib/Migration/Version1190Date20230706134108.php b/apps/user_ldap/lib/Migration/Version1190Date20230706134108.php new file mode 100644 index 00000000000..85b046ab7c9 --- /dev/null +++ b/apps/user_ldap/lib/Migration/Version1190Date20230706134108.php @@ -0,0 +1,108 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\DB\Types; +use OCP\IDBConnection; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +class Version1190Date20230706134108 extends SimpleMigrationStep { + public function __construct( + private IDBConnection $dbc, + ) { + } + + public function preSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + } + + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if (!$schema->hasTable('ldap_group_membership')) { + $table = $schema->createTable('ldap_group_membership'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('groupid', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + 'default' => '', + ]); + $table->addColumn('userid', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + 'default' => '', + ]); + $table->setPrimaryKey(['id']); + $table->addUniqueIndex(['groupid', 'userid'], 'user_ldap_membership_unique'); + return $schema; + } else { + return null; + } + } + + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if (!$schema->hasTable('ldap_group_members')) { + // Old table does not exist + return; + } + + $output->startProgress(); + $this->copyGroupMembershipData(); + $output->finishProgress(); + } + + protected function copyGroupMembershipData(): void { + $insert = $this->dbc->getQueryBuilder(); + $insert->insert('ldap_group_membership') + ->values([ + 'userid' => $insert->createParameter('userid'), + 'groupid' => $insert->createParameter('groupid'), + ]); + + $query = $this->dbc->getQueryBuilder(); + $query->select('*') + ->from('ldap_group_members'); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $knownUsers = unserialize($row['owncloudusers']); + if (!is_array($knownUsers)) { + /* Unserialize failed or data was incorrect in database, ignore */ + continue; + } + $knownUsers = array_unique($knownUsers); + foreach ($knownUsers as $knownUser) { + try { + $insert + ->setParameter('groupid', $row['owncloudname']) + ->setParameter('userid', $knownUser) + ; + + $insert->executeStatement(); + } catch (\OCP\DB\Exception $e) { + /* + * If it fails on unique constaint violation it may just be left over value from previous half-migration + * If it fails on something else, ignore as well, data will be filled by background job later anyway + */ + } + } + } + $result->closeCursor(); + } +} diff --git a/apps/user_ldap/lib/Migration/Version1190Date20230706134109.php b/apps/user_ldap/lib/Migration/Version1190Date20230706134109.php new file mode 100644 index 00000000000..2d3c26f0d49 --- /dev/null +++ b/apps/user_ldap/lib/Migration/Version1190Date20230706134109.php @@ -0,0 +1,29 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Migration; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +class Version1190Date20230706134109 extends SimpleMigrationStep { + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if ($schema->hasTable('ldap_group_members')) { + $schema->dropTable('ldap_group_members'); + return $schema; + } + + return null; + } +} diff --git a/apps/user_ldap/lib/Notification/Notifier.php b/apps/user_ldap/lib/Notification/Notifier.php index e65bba2012d..0195cb9e65b 100644 --- a/apps/user_ldap/lib/Notification/Notifier.php +++ b/apps/user_ldap/lib/Notification/Notifier.php @@ -1,45 +1,24 @@ <?php + /** - * @copyright Copyright (c) 2017 Roger Szabo <roger.szabo@web.de> - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Notification; use OCP\L10N\IFactory; use OCP\Notification\INotification; use OCP\Notification\INotifier; +use OCP\Notification\UnknownNotificationException; class Notifier implements INotifier { - /** @var IFactory */ - protected $l10nFactory; - /** * @param IFactory $l10nFactory */ - public function __construct(\OCP\L10N\IFactory $l10nFactory) { - $this->l10nFactory = $l10nFactory; + public function __construct( + protected IFactory $l10nFactory, + ) { } /** @@ -66,12 +45,12 @@ class Notifier implements INotifier { * @param INotification $notification * @param string $languageCode The code of the language that should be used to prepare the notification * @return INotification - * @throws \InvalidArgumentException When the notification was not prepared by a notifier + * @throws UnknownNotificationException When the notification was not prepared by a notifier */ public function prepare(INotification $notification, string $languageCode): INotification { if ($notification->getApp() !== 'user_ldap') { // Not my app => throw - throw new \InvalidArgumentException(); + throw new UnknownNotificationException(); } // Read the language from the notification @@ -81,7 +60,7 @@ class Notifier implements INotifier { // Deal with known subjects case 'pwd_exp_warn_days': $params = $notification->getSubjectParameters(); - $days = (int) $params[0]; + $days = (int)$params[0]; if ($days === 2) { $notification->setParsedSubject($l->t('Your password will expire tomorrow.')); } elseif ($days === 1) { @@ -97,7 +76,7 @@ class Notifier implements INotifier { default: // Unknown subject => Unknown notification => throw - throw new \InvalidArgumentException(); + throw new UnknownNotificationException(); } } } diff --git a/apps/user_ldap/lib/PagedResults/IAdapter.php b/apps/user_ldap/lib/PagedResults/IAdapter.php deleted file mode 100644 index 0136aa0694b..00000000000 --- a/apps/user_ldap/lib/PagedResults/IAdapter.php +++ /dev/null @@ -1,131 +0,0 @@ -<?php - -declare(strict_types=1); - -/** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -namespace OCA\User_LDAP\PagedResults; - -interface IAdapter { - - /** - * Methods for initiating Paged Results Control - */ - - /** - * The adapter receives paged result parameters from the client. It may - * store the parameters for later use. - */ - public function setRequestParameters($link, int $pageSize, bool $isCritical): void; - - /** - * The adapter is asked for an function that is being explicitly called to - * send the control parameters to LDAP. If not function has to be called, - * null shall be returned. - * - * It will used by the callee for diagnosis and error handling. - */ - public function getRequestCallFunc(): ?string; - - /** - * The adapter is asked to provide the arguments it would pass to the - * function returned by getRequestCallFunc(). If none shall be called, an - * empty array should be returned. - * - * It will used by the callee for diagnosis and error handling. - */ - public function getRequestCallArgs($link): array; - - /** - * The adapter is asked to do the necessary calls to LDAP, if - * getRequestCallFunc returned a function. If none, it will not be called - * so the return value is best set to false. Otherwise it shall respond - * whether setting the controls was successful. - */ - public function requestCall($link): bool; - - /** - * The adapter shall report which PHP function will be called to process - * the paged results call - * - * It will used by the callee for diagnosis and error handling. - */ - public function getResponseCallFunc(): string; - - /** - * The adapter shall report with arguments will be provided to the LDAP - * function it will call - * - * It will used by the callee for diagnosis and error handling. - */ - public function getResponseCallArgs(array $originalArgs): array; - - /** - * the adapter should do it's LDAP function call and return success state - * - * @param resource $link LDAP resource - * @return bool - */ - public function responseCall($link): bool; - - /** - * The adapter receives the parameters that were passed to a search - * operation. Typically it wants to save the them for the call proper later - * on. - */ - public function setSearchArgs( - $link, - string $baseDN, - string $filter, - array $attr, - int $attrsOnly, - int $limit - ): void; - - /** - * The adapter shall report which arguments shall be passed to the - * ldap_search function. - */ - public function getSearchArgs($link): array; - - /** - * The adapter receives the parameters that were passed to a read - * operation. Typically it wants to save the them for the call proper later - * on. - */ - public function setReadArgs($link, string $baseDN, string $filter, array $attr): void; - - /** - * The adapter shall report which arguments shall be passed to the - * ldap_read function. - */ - public function getReadArgs($link): array; - - /** - * Returns the current paged results cookie - * - * @param resource $link LDAP resource - * @return string - */ - public function getCookie($link): string; -} diff --git a/apps/user_ldap/lib/PagedResults/Php54.php b/apps/user_ldap/lib/PagedResults/Php54.php deleted file mode 100644 index 55a5272f599..00000000000 --- a/apps/user_ldap/lib/PagedResults/Php54.php +++ /dev/null @@ -1,129 +0,0 @@ -<?php - -declare(strict_types=1); - -/** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -namespace OCA\User_LDAP\PagedResults; - -/** - * Class Php54 - * - * implements paged results support with PHP APIs available from PHP 5.4 - * - * @package OCA\User_LDAP\PagedResults - */ -class Php54 implements IAdapter { - use TLinkId; - - /** @var array */ - protected $linkData = []; - - public function getResponseCallFunc(): string { - return 'ldap_control_paged_result_response'; - } - - public function responseCall($link): bool { - $linkId = $this->getLinkId($link); - return ldap_control_paged_result_response(...$this->linkData[$linkId]['responseArgs']); - } - - public function getResponseCallArgs(array $originalArgs): array { - $linkId = $this->getLinkId($originalArgs[0]); - if (!isset($this->linkData[$linkId])) { - throw new \LogicException('There should be a request before the response'); - } - $this->linkData[$linkId]['responseArgs'] = &$originalArgs; - $this->linkData[$linkId]['cookie'] = &$originalArgs[2]; - return $originalArgs; - } - - public function getCookie($link): string { - $linkId = $this->getLinkId($link); - return $this->linkData[$linkId]['cookie']; - } - - public function getRequestCallFunc(): ?string { - return 'ldap_control_paged_result'; - } - - public function setRequestParameters($link, int $pageSize, bool $isCritical): void { - $linkId = $this->getLinkId($link); - - if ($pageSize === 0 || !isset($this->linkData[$linkId]['cookie'])) { - // abandons a previous paged search - $this->linkData[$linkId]['cookie'] = ''; - } - - $this->linkData[$linkId]['requestArgs'] = [ - $link, - $pageSize, - $isCritical, - &$this->linkData[$linkId]['cookie'] - ]; - } - - public function getRequestCallArgs($link): array { - $linkId = $this->getLinkId($link); - return $this->linkData[$linkId]['requestArgs']; - } - - public function requestCall($link): bool { - $linkId = $this->getLinkId($link); - return ldap_control_paged_result(...$this->linkData[$linkId]['requestArgs']); - } - - public function setSearchArgs( - $link, - string $baseDN, - string $filter, - array $attr, - int $attrsOnly, - int $limit - ): void { - $linkId = $this->getLinkId($link); - if (!isset($this->linkData[$linkId])) { - $this->linkData[$linkId] = []; - } - $this->linkData[$linkId]['searchArgs'] = func_get_args(); - } - - public function getSearchArgs($link): array { - $linkId = $this->getLinkId($link); - return $this->linkData[$linkId]['searchArgs']; - } - - public function setReadArgs($link, string $baseDN, string $filter, array $attr): void { - $linkId = $this->getLinkId($link); - if (!isset($this->linkData[$linkId])) { - $this->linkData[$linkId] = []; - } - $this->linkData[$linkId]['readArgs'] = func_get_args(); - } - - public function getReadArgs($link): array { - $linkId = $this->getLinkId($link); - return $this->linkData[$linkId]['readArgs']; - } -} diff --git a/apps/user_ldap/lib/PagedResults/Php73.php b/apps/user_ldap/lib/PagedResults/Php73.php deleted file mode 100644 index 7e182e2eabc..00000000000 --- a/apps/user_ldap/lib/PagedResults/Php73.php +++ /dev/null @@ -1,174 +0,0 @@ -<?php - -declare(strict_types=1); - -/** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -namespace OCA\User_LDAP\PagedResults; - -/** - * Class Php73 - * - * implements paged results support with PHP APIs available from PHP 7.3 - * - * @package OCA\User_LDAP\PagedResults - */ -class Php73 implements IAdapter { - use TLinkId; - - /** @var array */ - protected $linkData = []; - - public function getResponseCallFunc(): string { - return 'ldap_parse_result'; - } - - public function responseCall($link): bool { - $linkId = $this->getLinkId($link); - return ldap_parse_result(...$this->linkData[$linkId]['responseArgs']); - } - - public function getResponseCallArgs(array $originalArgs): array { - $link = array_shift($originalArgs); - $linkId = $this->getLinkId($link); - - if (!isset($this->linkData[$linkId])) { - $this->linkData[$linkId] = []; - } - - $this->linkData[$linkId]['responseErrorCode'] = 0; - $this->linkData[$linkId]['responseErrorMessage'] = ''; - $this->linkData[$linkId]['serverControls'] = []; - $matchedDn = null; - $referrals = []; - - $this->linkData[$linkId]['responseArgs'] = [ - $link, - array_shift($originalArgs), - &$this->linkData[$linkId]['responseErrorCode'], - $matchedDn, - &$this->linkData[$linkId]['responseErrorMessage'], - $referrals, - &$this->linkData[$linkId]['serverControls'] - ]; - - - return $this->linkData[$linkId]['responseArgs']; - } - - public function getCookie($link): string { - $linkId = $this->getLinkId($link); - return $this->linkData[$linkId]['serverControls'][LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'] ?? ''; - } - - private function resetCookie(int $linkId): void { - if (isset($this->linkData[$linkId]['serverControls'][LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'])) { - $this->linkData[$linkId]['serverControls'][LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'] = ''; - } - } - - public function getRequestCallFunc(): ?string { - return null; - } - - public function setRequestParameters($link, int $pageSize, bool $isCritical): void { - $linkId = $this->getLinkId($link); - if (!isset($this->linkData[$linkId])) { - $this->linkData[$linkId] = []; - } - $this->linkData[$linkId]['requestArgs'] = []; - $this->linkData[$linkId]['requestArgs']['pageSize'] = $pageSize; - $this->linkData[$linkId]['requestArgs']['isCritical'] = $isCritical; - - if ($pageSize === 0) { - $this->resetCookie($linkId); - } - } - - public function getRequestCallArgs($link): array { - // no separate call - return []; - } - - public function requestCall($link): bool { - // no separate call - return false; - } - - public function setSearchArgs( - $link, - string $baseDN, - string $filter, - array $attr, - int $attrsOnly, - int $limit - ): void { - $linkId = $this->getLinkId($link); - if (!isset($this->linkData[$linkId])) { - $this->linkData[$linkId] = []; - } - - $this->linkData[$linkId]['searchArgs'] = func_get_args(); - $this->preparePagesResultsArgs($linkId, 'searchArgs'); - } - - public function getSearchArgs($link): array { - $linkId = $this->getLinkId($link); - return $this->linkData[$linkId]['searchArgs']; - } - - public function setReadArgs($link, string $baseDN, string $filter, array $attr): void { - $linkId = $this->getLinkId($link); - if (!isset($this->linkData[$linkId])) { - $this->linkData[$linkId] = []; - } - - $this->linkData[$linkId]['readArgs'] = func_get_args(); - $this->linkData[$linkId]['readArgs'][] = 0; // $attrsonly default - $this->linkData[$linkId]['readArgs'][] = -1; // $sizelimit default - } - - public function getReadArgs($link): array { - $linkId = $this->getLinkId($link); - return $this->linkData[$linkId]['readArgs']; - } - - protected function preparePagesResultsArgs(int $linkId, string $methodKey): void { - if (!isset($this->linkData[$linkId]['requestArgs'])) { - return; - } - - $serverControls = [[ - 'oid' => LDAP_CONTROL_PAGEDRESULTS, - 'value' => [ - 'size' => $this->linkData[$linkId]['requestArgs']['pageSize'], - 'cookie' => $this->linkData[$linkId]['serverControls'][LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'] ?? '', - ] - ]]; - - $this->linkData[$linkId][$methodKey][] = -1; // timelimit - $this->linkData[$linkId][$methodKey][] = LDAP_DEREF_NEVER; - $this->linkData[$linkId][$methodKey][] = $serverControls; - } -} diff --git a/apps/user_ldap/lib/PagedResults/TLinkId.php b/apps/user_ldap/lib/PagedResults/TLinkId.php index 551fb0af333..46d392995e0 100644 --- a/apps/user_ldap/lib/PagedResults/TLinkId.php +++ b/apps/user_ldap/lib/PagedResults/TLinkId.php @@ -3,36 +3,23 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\PagedResults; trait TLinkId { public function getLinkId($link) { - if (is_resource($link)) { + if (is_object($link)) { + return spl_object_id($link); + } elseif (is_resource($link)) { return (int)$link; - } elseif (is_array($link) && isset($link[0]) && is_resource($link[0])) { - return (int)$link[0]; + } elseif (is_array($link) && isset($link[0])) { + if (is_object($link[0])) { + return spl_object_id($link[0]); + } elseif (is_resource($link[0])) { + return (int)$link[0]; + } } throw new \RuntimeException('No resource provided'); } diff --git a/apps/user_ldap/lib/Proxy.php b/apps/user_ldap/lib/Proxy.php index e723c4e3abf..22b2c6617af 100644 --- a/apps/user_ldap/lib/Proxy.php +++ b/apps/user_ldap/lib/Proxy.php @@ -1,103 +1,87 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christopher Schäpers <kondou@ts.unde.re> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Mapping\UserMapping; -use OCA\User_LDAP\User\Manager; -use OCP\Share\IManager; +use OCP\ICache; +use OCP\ICacheFactory; +use OCP\Server; +/** + * @template T + */ abstract class Proxy { - private static $accesses = []; - private $ldap = null; - /** @var bool */ - private $isSingleBackend; - - /** @var \OCP\ICache|null */ - private $cache; - - /** - * @param ILDAPWrapper $ldap - */ - public function __construct(ILDAPWrapper $ldap) { - $this->ldap = $ldap; - $memcache = \OC::$server->getMemCacheFactory(); + /** @var array<string,Access> */ + private static array $accesses = []; + private ?bool $isSingleBackend = null; + private ?ICache $cache = null; + + /** @var T[] */ + protected array $backends = []; + /** @var ?T */ + protected $refBackend = null; + + protected bool $isSetUp = false; + + public function __construct( + private Helper $helper, + private ILDAPWrapper $ldap, + private AccessFactory $accessFactory, + ) { + $memcache = Server::get(ICacheFactory::class); if ($memcache->isAvailable()) { $this->cache = $memcache->createDistributed(); } } + protected function setup(): void { + if ($this->isSetUp) { + return; + } + + $serverConfigPrefixes = $this->helper->getServerConfigurationPrefixes(true); + foreach ($serverConfigPrefixes as $configPrefix) { + $this->backends[$configPrefix] = $this->newInstance($configPrefix); + + if (is_null($this->refBackend)) { + $this->refBackend = $this->backends[$configPrefix]; + } + } + + $this->isSetUp = true; + } + /** - * @param string $configPrefix + * @return T */ - private function addAccess($configPrefix) { - static $ocConfig; - static $fs; - static $log; - static $avatarM; - static $userMap; - static $groupMap; - static $shareManager; - static $coreUserManager; - static $coreNotificationManager; - if ($fs === null) { - $ocConfig = \OC::$server->getConfig(); - $fs = new FilesystemHelper(); - $log = new LogWrapper(); - $avatarM = \OC::$server->getAvatarManager(); - $db = \OC::$server->getDatabaseConnection(); - $userMap = new UserMapping($db); - $groupMap = new GroupMapping($db); - $coreUserManager = \OC::$server->getUserManager(); - $coreNotificationManager = \OC::$server->getNotificationManager(); - $shareManager = \OC::$server->get(IManager::class); - } - $userManager = - new Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image(), - $coreUserManager, $coreNotificationManager, $shareManager); + abstract protected function newInstance(string $configPrefix): object; + + /** + * @return T + */ + public function getBackend(string $configPrefix): object { + $this->setup(); + return $this->backends[$configPrefix]; + } + + private function addAccess(string $configPrefix): void { + $userMap = Server::get(UserMapping::class); + $groupMap = Server::get(GroupMapping::class); + $connector = new Connection($this->ldap, $configPrefix); - $access = new Access($connector, $this->ldap, $userManager, new Helper($ocConfig, \OC::$server->getDatabaseConnection()), $ocConfig, $coreUserManager); + $access = $this->accessFactory->get($connector); $access->setUserMapper($userMap); $access->setGroupMapper($groupMap); self::$accesses[$configPrefix] = $access; } - /** - * @param string $configPrefix - * @return mixed - */ - protected function getAccess($configPrefix) { + protected function getAccess(string $configPrefix): Access { if (!isset(self::$accesses[$configPrefix])) { $this->addAccess($configPrefix); } @@ -159,7 +143,7 @@ abstract class Proxy { * @param string $method string, the method of the user backend that shall be called * @param array $parameters an array of parameters to be passed * @param bool $passOnWhen - * @return mixed, the result of the specified method + * @return mixed the result of the specified method */ protected function handleRequest($id, $method, $parameters, $passOnWhen = false) { if (!$this->isSingleBackend()) { diff --git a/apps/user_ldap/lib/Service/BirthdateParserService.php b/apps/user_ldap/lib/Service/BirthdateParserService.php new file mode 100644 index 00000000000..8234161b3d8 --- /dev/null +++ b/apps/user_ldap/lib/Service/BirthdateParserService.php @@ -0,0 +1,44 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Service; + +use DateTimeImmutable; +use Exception; +use InvalidArgumentException; + +class BirthdateParserService { + /** + * Try to parse the birthdate from LDAP. + * Supports LDAP's generalized time syntax, YYYYMMDD and YYYY-MM-DD. + * + * @throws InvalidArgumentException If the format of then given date is unknown + */ + public function parseBirthdate(string $value): DateTimeImmutable { + // Minimum LDAP generalized date is "1994121610Z" with 11 chars + // While maximum other format is "1994-12-16" with 10 chars + if (strlen($value) > strlen('YYYY-MM-DD')) { + // Probably LDAP generalized time syntax + $value = substr($value, 0, 8); + } + + // Should be either YYYYMMDD or YYYY-MM-DD + if (!preg_match('/^(\d{8}|\d{4}-\d{2}-\d{2})$/', $value)) { + throw new InvalidArgumentException("Unknown date format: $value"); + } + + try { + return new DateTimeImmutable($value); + } catch (Exception $e) { + throw new InvalidArgumentException( + "Unknown date format: $value", + 0, + $e, + ); + } + } +} diff --git a/apps/user_ldap/lib/Service/UpdateGroupsService.php b/apps/user_ldap/lib/Service/UpdateGroupsService.php new file mode 100644 index 00000000000..94f2a7fd4a1 --- /dev/null +++ b/apps/user_ldap/lib/Service/UpdateGroupsService.php @@ -0,0 +1,221 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ + +namespace OCA\User_LDAP\Service; + +use OCA\User_LDAP\Db\GroupMembership; +use OCA\User_LDAP\Db\GroupMembershipMapper; +use OCA\User_LDAP\Group_Proxy; +use OCP\DB\Exception; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Group\Events\UserAddedEvent; +use OCP\Group\Events\UserRemovedEvent; +use OCP\IGroup; +use OCP\IGroupManager; +use OCP\IUser; +use OCP\IUserManager; +use Psr\Log\LoggerInterface; + +class UpdateGroupsService { + public function __construct( + private Group_Proxy $groupBackend, + private IEventDispatcher $dispatcher, + private IGroupManager $groupManager, + private IUserManager $userManager, + private LoggerInterface $logger, + private GroupMembershipMapper $groupMembershipMapper, + ) { + } + + /** + * @throws Exception + */ + public function updateGroups(): void { + $knownGroups = $this->groupMembershipMapper->getKnownGroups(); + $actualGroups = $this->groupBackend->getGroups(); + + if (empty($actualGroups) && empty($knownGroups)) { + $this->logger->info( + 'service "updateGroups" - groups do not seem to be configured properly, aborting.', + ); + return; + } + + $this->handleKnownGroups(array_intersect($actualGroups, $knownGroups)); + $this->handleCreatedGroups(array_diff($actualGroups, $knownGroups)); + $this->handleRemovedGroups(array_diff($knownGroups, $actualGroups)); + + $this->logger->debug('service "updateGroups" - Finished.'); + } + + /** + * @param string[] $groups + * @throws Exception + */ + public function handleKnownGroups(array $groups): void { + $this->logger->debug('service "updateGroups" - Dealing with known Groups.'); + + foreach ($groups as $group) { + $this->logger->debug('service "updateGroups" - Dealing with {group}.', ['group' => $group]); + $groupMemberships = $this->groupMembershipMapper->findGroupMemberships($group); + $knownUsers = array_map( + static fn (GroupMembership $groupMembership): string => $groupMembership->getUserid(), + $groupMemberships + ); + $groupMemberships = array_combine($knownUsers, $groupMemberships); + $actualUsers = $this->groupBackend->usersInGroup($group); + + $groupObject = $this->groupManager->get($group); + if ($groupObject === null) { + /* We are not expecting the group to not be found since it was returned by $this->groupBackend->getGroups() */ + $this->logger->error( + 'service "updateGroups" - Failed to get group {group} for update', + [ + 'group' => $group + ] + ); + continue; + } + foreach (array_diff($knownUsers, $actualUsers) as $removedUser) { + try { + $this->groupMembershipMapper->delete($groupMemberships[$removedUser]); + } catch (Exception $e) { + if ($e->getReason() !== Exception::REASON_DATABASE_OBJECT_NOT_FOUND) { + /* If reason is not found something else removed the membership, that’s fine */ + $this->logger->error( + self::class . ' - group {group} membership failed to be removed (user {user})', + [ + 'app' => 'user_ldap', + 'user' => $removedUser, + 'group' => $group, + 'exception' => $e, + ] + ); + } + /* We failed to delete the groupmembership so we do not want to advertise it */ + continue; + } + $userObject = $this->userManager->get($removedUser); + if ($userObject instanceof IUser) { + $this->dispatcher->dispatchTyped(new UserRemovedEvent($groupObject, $userObject)); + } + $this->logger->info( + 'service "updateGroups" - {user} removed from {group}', + [ + 'user' => $removedUser, + 'group' => $group + ] + ); + } + foreach (array_diff($actualUsers, $knownUsers) as $addedUser) { + try { + $this->groupMembershipMapper->insert(GroupMembership::fromParams(['groupid' => $group,'userid' => $addedUser])); + } catch (Exception $e) { + if ($e->getReason() !== Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + /* If reason is unique constraint something else added the membership, that’s fine */ + $this->logger->error( + self::class . ' - group {group} membership failed to be added (user {user})', + [ + 'app' => 'user_ldap', + 'user' => $addedUser, + 'group' => $group, + 'exception' => $e, + ] + ); + } + /* We failed to insert the groupmembership so we do not want to advertise it */ + continue; + } + $userObject = $this->userManager->get($addedUser); + if ($userObject instanceof IUser) { + $this->dispatcher->dispatchTyped(new UserAddedEvent($groupObject, $userObject)); + } + $this->logger->info( + 'service "updateGroups" - {user} added to {group}', + [ + 'user' => $addedUser, + 'group' => $group + ] + ); + } + } + $this->logger->debug('service "updateGroups" - FINISHED dealing with known Groups.'); + } + + /** + * @param string[] $createdGroups + * @throws Exception + */ + public function handleCreatedGroups(array $createdGroups): void { + $this->logger->debug('service "updateGroups" - dealing with created Groups.'); + + foreach ($createdGroups as $createdGroup) { + $this->logger->info('service "updateGroups" - new group "' . $createdGroup . '" found.'); + + $users = $this->groupBackend->usersInGroup($createdGroup); + $groupObject = $this->groupManager->get($createdGroup); + foreach ($users as $user) { + try { + $this->groupMembershipMapper->insert(GroupMembership::fromParams(['groupid' => $createdGroup,'userid' => $user])); + } catch (Exception $e) { + if ($e->getReason() !== Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + $this->logger->error( + self::class . ' - group {group} membership failed to be added (user {user})', + [ + 'app' => 'user_ldap', + 'user' => $user, + 'group' => $createdGroup, + 'exception' => $e, + ] + ); + } + /* We failed to insert the groupmembership so we do not want to advertise it */ + continue; + } + if ($groupObject instanceof IGroup) { + $userObject = $this->userManager->get($user); + if ($userObject instanceof IUser) { + $this->dispatcher->dispatchTyped(new UserAddedEvent($groupObject, $userObject)); + } + } + } + } + $this->logger->debug('service "updateGroups" - FINISHED dealing with created Groups.'); + } + + /** + * @param string[] $removedGroups + * @throws Exception + */ + public function handleRemovedGroups(array $removedGroups): void { + $this->logger->debug('service "updateGroups" - dealing with removed groups.'); + + $this->groupMembershipMapper->deleteGroups($removedGroups); + foreach ($removedGroups as $group) { + $groupObject = $this->groupManager->get($group); + if ($groupObject instanceof IGroup) { + $groupMemberships = $this->groupMembershipMapper->findGroupMemberships($group); + foreach ($groupMemberships as $groupMembership) { + $userObject = $this->userManager->get($groupMembership->getUserid()); + if ($userObject instanceof IUser) { + $this->dispatcher->dispatchTyped(new UserRemovedEvent($groupObject, $userObject)); + } + } + } + } + + $this->logger->info( + 'service "updateGroups" - groups {removedGroups} were removed.', + [ + 'removedGroups' => $removedGroups + ] + ); + } +} diff --git a/apps/user_ldap/lib/Settings/Admin.php b/apps/user_ldap/lib/Settings/Admin.php index 7bcd1758a0a..89fb063265b 100644 --- a/apps/user_ldap/lib/Settings/Admin.php +++ b/apps/user_ldap/lib/Settings/Admin.php @@ -1,54 +1,31 @@ <?php + /** - * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Settings; use OCA\User_LDAP\Configuration; use OCA\User_LDAP\Helper; use OCP\AppFramework\Http\TemplateResponse; use OCP\IL10N; -use OCP\Settings\ISettings; -use OCP\Template; - -class Admin implements ISettings { - /** @var IL10N */ - private $l; +use OCP\Server; +use OCP\Settings\IDelegatedSettings; +use OCP\Template\ITemplateManager; - /** - * @param IL10N $l - */ - public function __construct(IL10N $l) { - $this->l = $l; +class Admin implements IDelegatedSettings { + public function __construct( + private IL10N $l, + private ITemplateManager $templateManager, + ) { } /** * @return TemplateResponse */ public function getForm() { - $helper = new Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $helper = Server::get(Helper::class); $prefixes = $helper->getServerConfigurationPrefixes(); if (count($prefixes) === 0) { $newPrefix = $helper->getNextServerConfigurationPrefix(); @@ -60,11 +37,12 @@ class Admin implements ISettings { $hosts = $helper->getServerConfigurationHosts(); - $wControls = new Template('user_ldap', 'part.wizardcontrols'); + $wControls = $this->templateManager->getTemplate('user_ldap', 'part.wizardcontrols'); $wControls = $wControls->fetchPage(); - $sControls = new Template('user_ldap', 'part.settingcontrols'); + $sControls = $this->templateManager->getTemplate('user_ldap', 'part.settingcontrols'); $sControls = $sControls->fetchPage(); + $parameters = []; $parameters['serverConfigurationPrefixes'] = $prefixes; $parameters['serverConfigurationHosts'] = $hosts; $parameters['settingControls'] = $sControls; @@ -76,7 +54,7 @@ class Admin implements ISettings { } $defaults = $config->getDefaults(); foreach ($defaults as $key => $default) { - $parameters[$key.'_default'] = $default; + $parameters[$key . '_default'] = $default; } return new TemplateResponse('user_ldap', 'settings', $parameters); @@ -91,12 +69,20 @@ class Admin implements ISettings { /** * @return int whether the form should be rather on the top or bottom of - * the admin section. The forms are arranged in ascending order of the - * priority values. It is required to return a value between 0 and 100. + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. * * E.g.: 70 */ public function getPriority() { return 5; } + + public function getName(): ?string { + return null; // Only one setting in this section + } + + public function getAuthorizedAppConfig(): array { + return []; // Custom controller + } } diff --git a/apps/user_ldap/lib/Settings/Section.php b/apps/user_ldap/lib/Settings/Section.php index 308cf6b86ef..3b95e25513d 100644 --- a/apps/user_ldap/lib/Settings/Section.php +++ b/apps/user_ldap/lib/Settings/Section.php @@ -1,28 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Settings; use OCP\IL10N; @@ -30,18 +11,14 @@ use OCP\IURLGenerator; use OCP\Settings\IIconSection; class Section implements IIconSection { - /** @var IL10N */ - private $l; - /** @var IURLGenerator */ - private $url; - /** * @param IURLGenerator $url * @param IL10N $l */ - public function __construct(IURLGenerator $url, IL10N $l) { - $this->url = $url; - $this->l = $l; + public function __construct( + private IURLGenerator $url, + private IL10N $l, + ) { } /** @@ -55,19 +32,19 @@ class Section implements IIconSection { } /** - * returns the translated name as it should be displayed, e.g. 'LDAP / AD + * returns the translated name as it should be displayed, e.g. 'LDAP/AD * integration'. Use the L10N service to translate it. * * @return string */ public function getName() { - return $this->l->t('LDAP / AD integration'); + return $this->l->t('LDAP/AD integration'); } /** * @return int whether the form should be rather on the top or bottom of - * the settings navigation. The sections are arranged in ascending order of - * the priority values. It is required to return a value between 0 and 99. + * the settings navigation. The sections are arranged in ascending order of + * the priority values. It is required to return a value between 0 and 99. * * E.g.: 70 */ diff --git a/apps/user_ldap/lib/SetupChecks/LdapConnection.php b/apps/user_ldap/lib/SetupChecks/LdapConnection.php new file mode 100644 index 00000000000..ee8c4ddd595 --- /dev/null +++ b/apps/user_ldap/lib/SetupChecks/LdapConnection.php @@ -0,0 +1,94 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\SetupChecks; + +use OCA\User_LDAP\AccessFactory; +use OCA\User_LDAP\ConnectionFactory; +use OCA\User_LDAP\Helper; +use OCP\IL10N; +use OCP\SetupCheck\ISetupCheck; +use OCP\SetupCheck\SetupResult; + +class LdapConnection implements ISetupCheck { + public function __construct( + private IL10N $l10n, + private Helper $helper, + private ConnectionFactory $connectionFactory, + private AccessFactory $accessFactory, + ) { + } + + public function getCategory(): string { + return 'ldap'; + } + + public function getName(): string { + return $this->l10n->t('LDAP Connection'); + } + + public function run(): SetupResult { + $availableConfigs = $this->helper->getServerConfigurationPrefixes(); + $inactiveConfigurations = []; + $bindFailedConfigurations = []; + $searchFailedConfigurations = []; + foreach ($availableConfigs as $configID) { + $connection = $this->connectionFactory->get($configID); + if (!$connection->ldapConfigurationActive) { + $inactiveConfigurations[] = $configID; + continue; + } + if (!$connection->bind()) { + $bindFailedConfigurations[] = $configID; + continue; + } + $access = $this->accessFactory->get($connection); + $result = $access->countObjects(1); + if (!is_int($result) || ($result <= 0)) { + $searchFailedConfigurations[] = $configID; + } + } + $output = ''; + if (!empty($bindFailedConfigurations)) { + $output .= $this->l10n->n( + 'Binding failed for this LDAP configuration: %s', + 'Binding failed for %n LDAP configurations: %s', + count($bindFailedConfigurations), + [implode(',', $bindFailedConfigurations)] + ) . "\n"; + } + if (!empty($searchFailedConfigurations)) { + $output .= $this->l10n->n( + 'Searching failed for this LDAP configuration: %s', + 'Searching failed for %n LDAP configurations: %s', + count($searchFailedConfigurations), + [implode(',', $searchFailedConfigurations)] + ) . "\n"; + } + if (!empty($inactiveConfigurations)) { + $output .= $this->l10n->n( + 'There is an inactive LDAP configuration: %s', + 'There are %n inactive LDAP configurations: %s', + count($inactiveConfigurations), + [implode(',', $inactiveConfigurations)] + ) . "\n"; + } + if (!empty($bindFailedConfigurations) || !empty($searchFailedConfigurations)) { + return SetupResult::error($output); + } elseif (!empty($inactiveConfigurations)) { + return SetupResult::warning($output); + } + return SetupResult::success($this->l10n->n( + 'Binding and searching works on the configured LDAP connection (%s)', + 'Binding and searching works on all of the %n configured LDAP connections (%s)', + count($availableConfigs), + [implode(',', $availableConfigs)] + )); + } +} diff --git a/apps/user_ldap/lib/SetupChecks/LdapInvalidUuids.php b/apps/user_ldap/lib/SetupChecks/LdapInvalidUuids.php new file mode 100644 index 00000000000..ac502b6b59e --- /dev/null +++ b/apps/user_ldap/lib/SetupChecks/LdapInvalidUuids.php @@ -0,0 +1,42 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\SetupChecks; + +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\Mapping\UserMapping; +use OCP\IL10N; +use OCP\SetupCheck\ISetupCheck; +use OCP\SetupCheck\SetupResult; + +class LdapInvalidUuids implements ISetupCheck { + public function __construct( + private IL10N $l10n, + private UserMapping $userMapping, + private GroupMapping $groupMapping, + ) { + } + + public function getCategory(): string { + return 'ldap'; + } + + public function getName(): string { + return $this->l10n->t('Invalid LDAP UUIDs'); + } + + public function run(): SetupResult { + if (count($this->userMapping->getList(0, 1, true)) === 0 + && count($this->groupMapping->getList(0, 1, true)) === 0) { + return SetupResult::success($this->l10n->t('None found')); + } else { + return SetupResult::warning($this->l10n->t('Invalid UUIDs of LDAP accounts or groups have been found. Please review your "Override UUID detection" settings in the Expert part of the LDAP configuration and use "occ ldap:update-uuid" to update them.')); + } + } +} diff --git a/apps/user_ldap/lib/User/DeletedUsersIndex.php b/apps/user_ldap/lib/User/DeletedUsersIndex.php index 2591f371fa1..f57f71a9d47 100644 --- a/apps/user_ldap/lib/User/DeletedUsersIndex.php +++ b/apps/user_ldap/lib/User/DeletedUsersIndex.php @@ -1,31 +1,14 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\User; use OCA\User_LDAP\Mapping\UserMapping; +use OCP\IConfig; +use OCP\PreConditionNotMetException; use OCP\Share\IManager; /** @@ -33,40 +16,30 @@ use OCP\Share\IManager; * @package OCA\User_LDAP */ class DeletedUsersIndex { - /** - * @var \OCP\IConfig $config - */ - protected $config; - - /** - * @var \OCA\User_LDAP\Mapping\UserMapping $mapping - */ - protected $mapping; - - /** - * @var array $deletedUsers - */ - protected $deletedUsers; - /** @var IManager */ - private $shareManager; + protected ?array $deletedUsers = null; - public function __construct(\OCP\IConfig $config, UserMapping $mapping, IManager $shareManager) { - $this->config = $config; - $this->mapping = $mapping; - $this->shareManager = $shareManager; + public function __construct( + protected IConfig $config, + protected UserMapping $mapping, + private IManager $shareManager, + ) { } /** * reads LDAP users marked as deleted from the database - * @return \OCA\User_LDAP\User\OfflineUser[] + * @return OfflineUser[] */ - private function fetchDeletedUsers() { - $deletedUsers = $this->config->getUsersForUserValue( - 'user_ldap', 'isDeleted', '1'); + private function fetchDeletedUsers(): array { + $deletedUsers = $this->config->getUsersForUserValue('user_ldap', 'isDeleted', '1'); $userObjects = []; foreach ($deletedUsers as $user) { - $userObjects[] = new OfflineUser($user, $this->config, $this->mapping, $this->shareManager); + $userObject = new OfflineUser($user, $this->config, $this->mapping, $this->shareManager); + if ($userObject->getLastLogin() > $userObject->getDetectedOn()) { + $userObject->unmark(); + } else { + $userObjects[] = $userObject; + } } $this->deletedUsers = $userObjects; @@ -75,9 +48,9 @@ class DeletedUsersIndex { /** * returns all LDAP users that are marked as deleted - * @return \OCA\User_LDAP\User\OfflineUser[] + * @return OfflineUser[] */ - public function getUsers() { + public function getUsers(): array { if (is_array($this->deletedUsers)) { return $this->deletedUsers; } @@ -86,9 +59,8 @@ class DeletedUsersIndex { /** * whether at least one user was detected as deleted - * @return bool */ - public function hasUsers() { + public function hasUsers(): bool { if (!is_array($this->deletedUsers)) { $this->fetchDeletedUsers(); } @@ -98,12 +70,10 @@ class DeletedUsersIndex { /** * marks a user as deleted * - * @param string $ocName - * @throws \OCP\PreConditionNotMetException + * @throws PreConditionNotMetException */ - public function markUser($ocName) { - $curValue = $this->config->getUserValue($ocName, 'user_ldap', 'isDeleted', '0'); - if ($curValue === '1') { + public function markUser(string $ocName): void { + if ($this->isUserMarked($ocName)) { // the user is already marked, do not write to DB again return; } @@ -111,4 +81,8 @@ class DeletedUsersIndex { $this->config->setUserValue($ocName, 'user_ldap', 'foundDeleted', (string)time()); $this->deletedUsers = null; } + + public function isUserMarked(string $ocName): bool { + return ($this->config->getUserValue($ocName, 'user_ldap', 'isDeleted', '0') === '1'); + } } diff --git a/apps/user_ldap/lib/User/Manager.php b/apps/user_ldap/lib/User/Manager.php index a18c62364db..88a001dd965 100644 --- a/apps/user_ldap/lib/User/Manager.php +++ b/apps/user_ldap/lib/User/Manager.php @@ -1,38 +1,14 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\User; -use OC\Cache\CappedMemoryCache; use OCA\User_LDAP\Access; -use OCA\User_LDAP\FilesystemHelper; -use OCA\User_LDAP\LogWrapper; +use OCP\Cache\CappedMemoryCache; use OCP\IAvatarManager; use OCP\IConfig; use OCP\IDBConnection; @@ -40,6 +16,7 @@ use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; use OCP\Share\IManager; +use Psr\Log\LoggerInterface; /** * Manager @@ -48,64 +25,24 @@ use OCP\Share\IManager; * cache */ class Manager { - /** @var Access */ - protected $access; - - /** @var IConfig */ - protected $ocConfig; - - /** @var IDBConnection */ - protected $db; - - /** @var IUserManager */ - protected $userManager; - - /** @var INotificationManager */ - protected $notificationManager; - - /** @var FilesystemHelper */ - protected $ocFilesystem; - - /** @var LogWrapper */ - protected $ocLog; - - /** @var Image */ - protected $image; - - /** @param \OCP\IAvatarManager */ - protected $avatarManager; - - /** - * @var CappedMemoryCache $usersByDN - */ - protected $usersByDN; - /** - * @var CappedMemoryCache $usersByUid - */ - protected $usersByUid; - /** @var IManager */ - private $shareManager; + protected ?Access $access = null; + protected IDBConnection $db; + /** @var CappedMemoryCache<User> $usersByDN */ + protected CappedMemoryCache $usersByDN; + /** @var CappedMemoryCache<User> $usersByUid */ + protected CappedMemoryCache $usersByUid; public function __construct( - IConfig $ocConfig, - FilesystemHelper $ocFilesystem, - LogWrapper $ocLog, - IAvatarManager $avatarManager, - Image $image, - IUserManager $userManager, - INotificationManager $notificationManager, - IManager $shareManager + protected IConfig $ocConfig, + protected LoggerInterface $logger, + protected IAvatarManager $avatarManager, + protected Image $image, + protected IUserManager $userManager, + protected INotificationManager $notificationManager, + private IManager $shareManager, ) { - $this->ocConfig = $ocConfig; - $this->ocFilesystem = $ocFilesystem; - $this->ocLog = $ocLog; - $this->avatarManager = $avatarManager; - $this->image = $image; - $this->userManager = $userManager; - $this->notificationManager = $notificationManager; $this->usersByDN = new CappedMemoryCache(); $this->usersByUid = new CappedMemoryCache(); - $this->shareManager = $shareManager; } /** @@ -122,12 +59,12 @@ class Manager { * property array * @param string $dn the DN of the user * @param string $uid the internal (owncloud) username - * @return \OCA\User_LDAP\User\User + * @return User */ private function createAndCache($dn, $uid) { $this->checkAccess(); $user = new User($uid, $dn, $this->access, $this->ocConfig, - $this->ocFilesystem, clone $this->image, $this->ocLog, + clone $this->image, $this->logger, $this->avatarManager, $this->userManager, $this->notificationManager); $this->usersByDN[$dn] = $user; @@ -151,6 +88,7 @@ class Manager { /** * @brief checks whether the Access instance has been set * @throws \Exception if Access has not been set + * @psalm-assert !null $this->access * @return null */ private function checkAccess() { @@ -164,22 +102,34 @@ class Manager { * email, displayname, or others. * * @param bool $minimal - optional, set to true to skip attributes with big - * payload + * payload * @return string[] */ public function getAttributes($minimal = false) { $baseAttributes = array_merge(Access::UUID_ATTRIBUTES, ['dn', 'uid', 'samaccountname', 'memberof']); $attributes = [ $this->access->getConnection()->ldapExpertUUIDUserAttr, + $this->access->getConnection()->ldapExpertUsernameAttr, $this->access->getConnection()->ldapQuotaAttribute, $this->access->getConnection()->ldapEmailAttribute, $this->access->getConnection()->ldapUserDisplayName, $this->access->getConnection()->ldapUserDisplayName2, $this->access->getConnection()->ldapExtStorageHomeAttribute, + $this->access->getConnection()->ldapAttributePhone, + $this->access->getConnection()->ldapAttributeWebsite, + $this->access->getConnection()->ldapAttributeAddress, + $this->access->getConnection()->ldapAttributeTwitter, + $this->access->getConnection()->ldapAttributeFediverse, + $this->access->getConnection()->ldapAttributeOrganisation, + $this->access->getConnection()->ldapAttributeRole, + $this->access->getConnection()->ldapAttributeHeadline, + $this->access->getConnection()->ldapAttributeBiography, + $this->access->getConnection()->ldapAttributeBirthDate, + $this->access->getConnection()->ldapAttributePronouns, ]; - $homeRule = $this->access->getConnection()->homeFolderNamingRule; - if (strpos($homeRule, 'attr:') === 0) { + $homeRule = (string)$this->access->getConnection()->homeFolderNamingRule; + if (str_starts_with($homeRule, 'attr:')) { $attributes[] = substr($homeRule, strlen('attr:')); } @@ -221,7 +171,7 @@ class Manager { /** * creates and returns an instance of OfflineUser for the specified user * @param string $id - * @return \OCA\User_LDAP\User\OfflineUser + * @return OfflineUser */ public function getDeletedUser($id) { return new OfflineUser( @@ -233,9 +183,9 @@ class Manager { } /** - * @brief returns a User object by it's Nextcloud username + * @brief returns a User object by its Nextcloud username * @param string $id the DN or username of the user - * @return \OCA\User_LDAP\User\User|\OCA\User_LDAP\User\OfflineUser|null + * @return User|OfflineUser|null */ protected function createInstancyByUserName($id) { //most likely a uid. Check whether it is a deleted user @@ -250,9 +200,9 @@ class Manager { } /** - * @brief returns a User object by it's DN or Nextcloud username + * @brief returns a User object by its DN or Nextcloud username * @param string $id the DN or username of the user - * @return \OCA\User_LDAP\User\User|\OCA\User_LDAP\User\OfflineUser|null + * @return User|OfflineUser|null * @throws \Exception when connection could not be established */ public function get($id) { @@ -272,4 +222,37 @@ class Manager { return $this->createInstancyByUserName($id); } + + /** + * @brief Checks whether a User object by its DN or Nextcloud username exists + * @param string $id the DN or username of the user + * @throws \Exception when connection could not be established + */ + public function exists($id): bool { + $this->checkAccess(); + $this->logger->debug('Checking if {id} exists', ['id' => $id]); + if (isset($this->usersByDN[$id])) { + return true; + } elseif (isset($this->usersByUid[$id])) { + return true; + } + + if ($this->access->stringResemblesDN($id)) { + $this->logger->debug('{id} looks like a dn', ['id' => $id]); + $uid = $this->access->dn2username($id); + if ($uid !== false) { + return true; + } + } + + // Most likely a uid. Check whether it is a deleted user + if ($this->isDeletedUser($id)) { + return true; + } + $dn = $this->access->username2dn($id); + if ($dn !== false) { + return true; + } + return false; + } } diff --git a/apps/user_ldap/lib/User/OfflineUser.php b/apps/user_ldap/lib/User/OfflineUser.php index 309eeec52c7..ecaab7188ba 100644 --- a/apps/user_ldap/lib/User/OfflineUser.php +++ b/apps/user_ldap/lib/User/OfflineUser.php @@ -1,28 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\User; use OCA\User_LDAP\Mapping\UserMapping; @@ -33,10 +15,6 @@ use OCP\Share\IShare; class OfflineUser { /** - * @var string $ocName - */ - protected $ocName; - /** * @var string $dn */ protected $dn; @@ -60,6 +38,7 @@ class OfflineUser { * @var string $foundDeleted the timestamp when the user was detected as unavailable */ protected $foundDeleted; + protected ?string $extStorageHome = null; /** * @var string $email */ @@ -69,30 +48,19 @@ class OfflineUser { */ protected $hasActiveShares; /** - * @var IConfig $config - */ - protected $config; - /** * @var IDBConnection $db */ protected $db; + /** - * @var \OCA\User_LDAP\Mapping\UserMapping + * @param string $ocName */ - protected $mapping; - /** @var IManager */ - private $shareManager; - public function __construct( - $ocName, - IConfig $config, - UserMapping $mapping, - IManager $shareManager + protected $ocName, + protected IConfig $config, + protected UserMapping $mapping, + private IManager $shareManager, ) { - $this->ocName = $ocName; - $this->config = $config; - $this->mapping = $mapping; - $this->shareManager = $shareManager; } /** @@ -146,7 +114,8 @@ class OfflineUser { */ public function getDN() { if ($this->dn === null) { - $this->fetchDetails(); + $dn = $this->mapping->getDNByName($this->ocName); + $this->dn = ($dn !== false) ? $dn : ''; } return $this->dn; } @@ -206,13 +175,20 @@ class OfflineUser { return (int)$this->foundDeleted; } + public function getExtStorageHome(): string { + if ($this->extStorageHome === null) { + $this->fetchDetails(); + } + return (string)$this->extStorageHome; + } + /** * getter for having active shares * @return bool */ public function getHasActiveShares() { if ($this->hasActiveShares === null) { - $this->fetchDetails(); + $this->determineShares(); } return $this->hasActiveShares; } @@ -226,17 +202,13 @@ class OfflineUser { 'uid' => 'user_ldap', 'homePath' => 'user_ldap', 'foundDeleted' => 'user_ldap', + 'extStorageHome' => 'user_ldap', 'email' => 'settings', 'lastLogin' => 'login', ]; foreach ($properties as $property => $app) { $this->$property = $this->config->getUserValue($this->ocName, $app, $property, ''); } - - $dn = $this->mapping->getDNByName($this->ocName); - $this->dn = ($dn !== false) ? $dn : ''; - - $this->determineShares(); } /** @@ -248,7 +220,7 @@ class OfflineUser { $shareConstants = $shareInterface->getConstants(); foreach ($shareConstants as $constantName => $constantValue) { - if (strpos($constantName, 'TYPE_') !== 0 + if (!str_starts_with($constantName, 'TYPE_') || $constantValue === IShare::TYPE_USERGROUP ) { continue; diff --git a/apps/user_ldap/lib/User/User.php b/apps/user_ldap/lib/User/User.php index 8ddec803370..8f97ec1701f 100644 --- a/apps/user_ldap/lib/User/User.php +++ b/apps/user_ldap/lib/User/User.php @@ -1,49 +1,31 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Philipp Staiger <philipp@staiger.it> - * @author Roger Szabo <roger.szabo@web.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * @author Vincent Petry <vincent@nextcloud.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\User; +use InvalidArgumentException; +use OC\Accounts\AccountManager; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; use OCA\User_LDAP\Exceptions\AttributeNotSet; -use OCA\User_LDAP\FilesystemHelper; -use OCA\User_LDAP\LogWrapper; +use OCA\User_LDAP\Service\BirthdateParserService; +use OCP\Accounts\IAccountManager; +use OCP\Accounts\PropertyDoesNotExistException; use OCP\IAvatarManager; use OCP\IConfig; -use OCP\ILogger; use OCP\Image; +use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; +use OCP\PreConditionNotMetException; +use OCP\Server; +use OCP\Util; +use Psr\Log\LoggerInterface; /** * User @@ -51,110 +33,51 @@ use OCP\Notification\IManager as INotificationManager; * represents an LDAP user, gets and holds user-specific information from LDAP */ class User { + protected Connection $connection; /** - * @var Access - */ - protected $access; - /** - * @var Connection - */ - protected $connection; - /** - * @var IConfig - */ - protected $config; - /** - * @var FilesystemHelper - */ - protected $fs; - /** - * @var Image - */ - protected $image; - /** - * @var LogWrapper - */ - protected $log; - /** - * @var IAvatarManager - */ - protected $avatarManager; - /** - * @var IUserManager + * @var array<string,1> */ - protected $userManager; - /** - * @var INotificationManager - */ - protected $notificationManager; - /** - * @var string - */ - protected $dn; - /** - * @var string - */ - protected $uid; - /** - * @var string[] - */ - protected $refreshedFeatures = []; - /** - * @var string - */ - protected $avatarImage; + protected array $refreshedFeatures = []; + protected string|false|null $avatarImage = null; + + protected BirthdateParserService $birthdateParser; /** * DB config keys for user preferences + * @var string */ public const USER_PREFKEY_FIRSTLOGIN = 'firstLoginAccomplished'; /** * @brief constructor, make sure the subclasses call this one! - * @param string $username the internal username - * @param string $dn the LDAP DN - * @param Access $access - * @param IConfig $config - * @param FilesystemHelper $fs - * @param Image $image any empty instance - * @param LogWrapper $log - * @param IAvatarManager $avatarManager - * @param IUserManager $userManager - * @param INotificationManager $notificationManager */ - public function __construct($username, $dn, Access $access, - IConfig $config, FilesystemHelper $fs, Image $image, - LogWrapper $log, IAvatarManager $avatarManager, IUserManager $userManager, - INotificationManager $notificationManager) { - if ($username === null) { - $log->log("uid for '$dn' must not be null!", ILogger::ERROR); - throw new \InvalidArgumentException('uid must not be null!'); - } elseif ($username === '') { - $log->log("uid for '$dn' must not be an empty string", ILogger::ERROR); + public function __construct( + protected string $uid, + protected string $dn, + protected Access $access, + protected IConfig $config, + protected Image $image, + protected LoggerInterface $logger, + protected IAvatarManager $avatarManager, + protected IUserManager $userManager, + protected INotificationManager $notificationManager, + ) { + if ($uid === '') { + $logger->error("uid for '$dn' must not be an empty string", ['app' => 'user_ldap']); throw new \InvalidArgumentException('uid must not be an empty string!'); } + $this->connection = $this->access->getConnection(); + $this->birthdateParser = new BirthdateParserService(); - $this->access = $access; - $this->connection = $access->getConnection(); - $this->config = $config; - $this->fs = $fs; - $this->dn = $dn; - $this->uid = $username; - $this->image = $image; - $this->log = $log; - $this->avatarManager = $avatarManager; - $this->userManager = $userManager; - $this->notificationManager = $notificationManager; - - \OCP\Util::connectHook('OC_User', 'post_login', $this, 'handlePasswordExpiry'); + Util::connectHook('OC_User', 'post_login', $this, 'handlePasswordExpiry'); } /** * marks a user as deleted * - * @throws \OCP\PreConditionNotMetException + * @throws PreConditionNotMetException */ - public function markUser() { + public function markUser(): void { $curValue = $this->config->getUserValue($this->getUsername(), 'user_ldap', 'isDeleted', '0'); if ($curValue === '1') { // the user is already marked, do not write to DB again @@ -168,7 +91,7 @@ class User { * processes results from LDAP for attributes as returned by getAttributesToRead() * @param array $ldapEntry the user entry as retrieved from LDAP */ - public function processAttributes($ldapEntry) { + public function processAttributes(array $ldapEntry): void { //Quota $attr = strtolower($this->connection->ldapQuotaAttribute); if (isset($ldapEntry[$attr])) { @@ -205,7 +128,14 @@ class User { //change event that will trigger fetching the display name again $attr = strtolower($this->connection->ldapEmailAttribute); if (isset($ldapEntry[$attr])) { - $this->updateEmail($ldapEntry[$attr][0]); + $mailValue = 0; + for ($x = 0; $x < count($ldapEntry[$attr]); $x++) { + if (filter_var($ldapEntry[$attr][$x], FILTER_VALIDATE_EMAIL)) { + $mailValue = $x; + break; + } + } + $this->updateEmail($ldapEntry[$attr][$mailValue]); } unset($attr); @@ -217,7 +147,7 @@ class User { } //homePath - if (strpos($this->connection->homeFolderNamingRule, 'attr:') === 0) { + if (str_starts_with($this->connection->homeFolderNamingRule, 'attr:')) { $attr = strtolower(substr($this->connection->homeFolderNamingRule, strlen('attr:'))); if (isset($ldapEntry[$attr])) { $this->access->cacheUserHome( @@ -226,7 +156,7 @@ class User { } //memberOf groups - $cacheKey = 'getMemberOf'.$this->getUsername(); + $cacheKey = 'getMemberOf' . $this->getUsername(); $groups = false; if (isset($ldapEntry['memberof'])) { $groups = $ldapEntry['memberof']; @@ -240,6 +170,134 @@ class User { } unset($attr); + // check for cached profile data + $username = $this->getUsername(); // buffer variable, to save resource + $cacheKey = 'getUserProfile-' . $username; + $profileCached = $this->connection->getFromCache($cacheKey); + // honoring profile disabled in config.php and check if user profile was refreshed + if ($this->config->getSystemValueBool('profile.enabled', true) + && ($profileCached === null) // no cache or TTL not expired + && !$this->wasRefreshed('profile')) { + // check current data + $profileValues = []; + //User Profile Field - Phone number + $attr = strtolower($this->connection->ldapAttributePhone); + if (!empty($attr)) { // attribute configured + $profileValues[IAccountManager::PROPERTY_PHONE] + = $ldapEntry[$attr][0] ?? ''; + } + //User Profile Field - website + $attr = strtolower($this->connection->ldapAttributeWebsite); + if (isset($ldapEntry[$attr])) { + $cutPosition = strpos($ldapEntry[$attr][0], ' '); + if ($cutPosition) { + // drop appended label + $profileValues[IAccountManager::PROPERTY_WEBSITE] + = substr($ldapEntry[$attr][0], 0, $cutPosition); + } else { + $profileValues[IAccountManager::PROPERTY_WEBSITE] + = $ldapEntry[$attr][0]; + } + } elseif (!empty($attr)) { // configured, but not defined + $profileValues[IAccountManager::PROPERTY_WEBSITE] = ''; + } + //User Profile Field - Address + $attr = strtolower($this->connection->ldapAttributeAddress); + if (isset($ldapEntry[$attr])) { + if (str_contains($ldapEntry[$attr][0], '$')) { + // basic format conversion from postalAddress syntax to commata delimited + $profileValues[IAccountManager::PROPERTY_ADDRESS] + = str_replace('$', ', ', $ldapEntry[$attr][0]); + } else { + $profileValues[IAccountManager::PROPERTY_ADDRESS] + = $ldapEntry[$attr][0]; + } + } elseif (!empty($attr)) { // configured, but not defined + $profileValues[IAccountManager::PROPERTY_ADDRESS] = ''; + } + //User Profile Field - Twitter + $attr = strtolower($this->connection->ldapAttributeTwitter); + if (!empty($attr)) { + $profileValues[IAccountManager::PROPERTY_TWITTER] + = $ldapEntry[$attr][0] ?? ''; + } + //User Profile Field - fediverse + $attr = strtolower($this->connection->ldapAttributeFediverse); + if (!empty($attr)) { + $profileValues[IAccountManager::PROPERTY_FEDIVERSE] + = $ldapEntry[$attr][0] ?? ''; + } + //User Profile Field - organisation + $attr = strtolower($this->connection->ldapAttributeOrganisation); + if (!empty($attr)) { + $profileValues[IAccountManager::PROPERTY_ORGANISATION] + = $ldapEntry[$attr][0] ?? ''; + } + //User Profile Field - role + $attr = strtolower($this->connection->ldapAttributeRole); + if (!empty($attr)) { + $profileValues[IAccountManager::PROPERTY_ROLE] + = $ldapEntry[$attr][0] ?? ''; + } + //User Profile Field - headline + $attr = strtolower($this->connection->ldapAttributeHeadline); + if (!empty($attr)) { + $profileValues[IAccountManager::PROPERTY_HEADLINE] + = $ldapEntry[$attr][0] ?? ''; + } + //User Profile Field - biography + $attr = strtolower($this->connection->ldapAttributeBiography); + if (isset($ldapEntry[$attr])) { + if (str_contains($ldapEntry[$attr][0], '\r')) { + // convert line endings + $profileValues[IAccountManager::PROPERTY_BIOGRAPHY] + = str_replace(["\r\n","\r"], "\n", $ldapEntry[$attr][0]); + } else { + $profileValues[IAccountManager::PROPERTY_BIOGRAPHY] + = $ldapEntry[$attr][0]; + } + } elseif (!empty($attr)) { // configured, but not defined + $profileValues[IAccountManager::PROPERTY_BIOGRAPHY] = ''; + } + //User Profile Field - birthday + $attr = strtolower($this->connection->ldapAttributeBirthDate); + if (!empty($attr) && !empty($ldapEntry[$attr][0])) { + $value = $ldapEntry[$attr][0]; + try { + $birthdate = $this->birthdateParser->parseBirthdate($value); + $profileValues[IAccountManager::PROPERTY_BIRTHDATE] + = $birthdate->format('Y-m-d'); + } catch (InvalidArgumentException $e) { + // Invalid date -> just skip the property + $this->logger->info("Failed to parse user's birthdate from LDAP: $value", [ + 'exception' => $e, + 'userId' => $username, + ]); + } + } + //User Profile Field - pronouns + $attr = strtolower($this->connection->ldapAttributePronouns); + if (!empty($attr)) { + $profileValues[IAccountManager::PROPERTY_PRONOUNS] + = $ldapEntry[$attr][0] ?? ''; + } + // check for changed data and cache just for TTL checking + $checksum = hash('sha256', json_encode($profileValues)); + $this->connection->writeToCache($cacheKey, $checksum // write array to cache. is waste of cache space + , null); // use ldapCacheTTL from configuration + // Update user profile + if ($this->config->getUserValue($username, 'user_ldap', 'lastProfileChecksum', null) !== $checksum) { + $this->config->setUserValue($username, 'user_ldap', 'lastProfileChecksum', $checksum); + $this->updateProfile($profileValues); + $this->logger->info("updated profile uid=$username", ['app' => 'user_ldap']); + } else { + $this->logger->debug('profile data from LDAP unchanged', ['app' => 'user_ldap', 'uid' => $username]); + } + unset($attr); + } elseif ($profileCached !== null) { // message delayed, to declutter log + $this->logger->debug('skipping profile check, while cached data exist', ['app' => 'user_ldap', 'uid' => $username]); + } + //Avatar /** @var Connection $connection */ $connection = $this->access->getConnection(); @@ -247,11 +305,7 @@ class User { foreach ($attributes as $attribute) { if (isset($ldapEntry[$attribute])) { $this->avatarImage = $ldapEntry[$attribute][0]; - // the call to the method that saves the avatar in the file - // system must be postponed after the login. It is to ensure - // external mounts are mounted properly (e.g. with login - // credentials from the session). - \OCP\Util::connectHook('OC_User', 'post_login', $this, 'updateAvatarPostLogin'); + $this->updateAvatar(); break; } } @@ -275,21 +329,22 @@ class User { /** * returns the home directory of the user if specified by LDAP settings - * @param string $valueFromLDAP - * @return bool|string * @throws \Exception */ - public function getHomePath($valueFromLDAP = null) { + public function getHomePath(?string $valueFromLDAP = null): string|false { $path = (string)$valueFromLDAP; $attr = null; if (is_null($valueFromLDAP) - && strpos($this->access->connection->homeFolderNamingRule, 'attr:') === 0 + && str_starts_with($this->access->connection->homeFolderNamingRule, 'attr:') && $this->access->connection->homeFolderNamingRule !== 'attr:') { $attr = substr($this->access->connection->homeFolderNamingRule, strlen('attr:')); - $homedir = $this->access->readAttribute( - $this->access->username2dn($this->getUsername()), $attr); - if ($homedir && isset($homedir[0])) { + $dn = $this->access->username2dn($this->getUsername()); + if ($dn === false) { + return false; + } + $homedir = $this->access->readAttribute($dn, $attr); + if ($homedir !== false && isset($homedir[0])) { $path = $homedir[0]; } } @@ -297,12 +352,12 @@ class User { if ($path !== '') { //if attribute's value is an absolute path take this, otherwise append it to data dir //check for / at the beginning or pattern c:\ resp. c:/ - if ('/' !== $path[0] - && !(3 < strlen($path) && ctype_alpha($path[0]) - && $path[1] === ':' && ('\\' === $path[2] || '/' === $path[2])) + if ($path[0] !== '/' + && !(strlen($path) > 3 && ctype_alpha($path[0]) + && $path[1] === ':' && ($path[2] === '\\' || $path[2] === '/')) ) { $path = $this->config->getSystemValue('datadirectory', - \OC::$SERVERROOT.'/data') . '/' . $path; + \OC::$SERVERROOT . '/data') . '/' . $path; } //we need it to store it in the DB as well in case a user gets //deleted so we can clean up afterwards @@ -313,7 +368,7 @@ class User { } if (!is_null($attr) - && $this->config->getAppValue('user_ldap', 'enforce_home_folder_naming_rule', true) + && $this->config->getAppValue('user_ldap', 'enforce_home_folder_naming_rule', 'true') ) { // a naming rule attribute is defined, but it doesn't exist for that LDAP user throw new \Exception('Home dir attribute can\'t be read from LDAP for uid: ' . $this->getUsername()); @@ -324,8 +379,8 @@ class User { return false; } - public function getMemberOfGroups() { - $cacheKey = 'getMemberOf'.$this->getUsername(); + public function getMemberOfGroups(): array|false { + $cacheKey = 'getMemberOf' . $this->getUsername(); $memberOfGroups = $this->connection->getFromCache($cacheKey); if (!is_null($memberOfGroups)) { return $memberOfGroups; @@ -337,9 +392,9 @@ class User { /** * @brief reads the image from LDAP that shall be used as Avatar - * @return string data (provided by LDAP) | false + * @return string|false data (provided by LDAP) */ - public function getAvatarImage() { + public function getAvatarImage(): string|false { if (!is_null($this->avatarImage)) { return $this->avatarImage; } @@ -350,7 +405,7 @@ class User { $attributes = $connection->resolveRule('avatar'); foreach ($attributes as $attribute) { $result = $this->access->readAttribute($this->dn, $attribute); - if ($result !== false && is_array($result) && isset($result[0])) { + if ($result !== false && isset($result[0])) { $this->avatarImage = $result[0]; break; } @@ -361,20 +416,16 @@ class User { /** * @brief marks the user as having logged in at least once - * @return null */ - public function markLogin() { + public function markLogin(): void { $this->config->setUserValue( - $this->uid, 'user_ldap', self::USER_PREFKEY_FIRSTLOGIN, 1); + $this->uid, 'user_ldap', self::USER_PREFKEY_FIRSTLOGIN, '1'); } /** * Stores a key-value pair in relation to this user - * - * @param string $key - * @param string $value */ - private function store($key, $value) { + private function store(string $key, string $value): void { $this->config->setUserValue($this->uid, 'user_ldap', $key, $value); } @@ -382,12 +433,9 @@ class User { * Composes the display name and stores it in the database. The final * display name is returned. * - * @param string $displayName - * @param string $displayName2 * @return string the effective display name */ - public function composeAndStoreDisplayName($displayName, $displayName2 = '') { - $displayName2 = (string)$displayName2; + public function composeAndStoreDisplayName(string $displayName, string $displayName2 = ''): string { if ($displayName2 !== '') { $displayName .= ' (' . $displayName2 . ')'; } @@ -406,9 +454,8 @@ class User { /** * Stores the LDAP Username in the Database - * @param string $userName */ - public function storeLDAPUserName($userName) { + public function storeLDAPUserName(string $userName): void { $this->store('uid', $userName); } @@ -416,10 +463,9 @@ class User { * @brief checks whether an update method specified by feature was run * already. If not, it will marked like this, because it is expected that * the method will be run, when false is returned. - * @param string $feature email | quota | avatar (can be extended) - * @return bool + * @param string $feature email | quota | avatar | profile (can be extended) */ - private function wasRefreshed($feature) { + private function wasRefreshed(string $feature): bool { if (isset($this->refreshedFeatures[$feature])) { return true; } @@ -429,10 +475,9 @@ class User { /** * fetches the email from LDAP and stores it as Nextcloud user value - * @param string $valueFromLDAP if known, to save an LDAP read request - * @return null + * @param ?string $valueFromLDAP if known, to save an LDAP read request */ - public function updateEmail($valueFromLDAP = null) { + public function updateEmail(?string $valueFromLDAP = null): void { if ($this->wasRefreshed('email')) { return; } @@ -449,9 +494,9 @@ class User { if ($email !== '') { $user = $this->userManager->get($this->uid); if (!is_null($user)) { - $currentEmail = (string)$user->getEMailAddress(); + $currentEmail = (string)$user->getSystemEMailAddress(); if ($currentEmail !== $email) { - $user->setEMailAddress($email); + $user->setSystemEMailAddress($email); } } } @@ -470,14 +515,13 @@ class User { * fetch all the user's attributes in one call and use the fetched values in this function. * The expected value for that parameter is a string describing the quota for the user. Valid * values are 'none' (unlimited), 'default' (the Nextcloud's default quota), '1234' (quota in - * bytes), '1234 MB' (quota in MB - check the \OC_Helper::computerFileSize method for more info) + * bytes), '1234 MB' (quota in MB - check the \OCP\Util::computerFileSize method for more info) * * fetches the quota from LDAP and stores it as Nextcloud user value - * @param string $valueFromLDAP the quota attribute's value can be passed, - * to save the readAttribute request - * @return null + * @param ?string $valueFromLDAP the quota attribute's value can be passed, + * to save the readAttribute request */ - public function updateQuota($valueFromLDAP = null) { + public function updateQuota(?string $valueFromLDAP = null): void { if ($this->wasRefreshed('quota')) { return; } @@ -491,22 +535,22 @@ class User { $quota = false; if (is_null($valueFromLDAP) && $quotaAttribute !== '') { $aQuota = $this->access->readAttribute($this->dn, $quotaAttribute); - if ($aQuota && (count($aQuota) > 0) && $this->verifyQuotaValue($aQuota[0])) { + if ($aQuota !== false && isset($aQuota[0]) && $this->verifyQuotaValue($aQuota[0])) { $quota = $aQuota[0]; } elseif (is_array($aQuota) && isset($aQuota[0])) { - $this->log->log('no suitable LDAP quota found for user ' . $this->uid . ': [' . $aQuota[0] . ']', ILogger::DEBUG); + $this->logger->debug('no suitable LDAP quota found for user ' . $this->uid . ': [' . $aQuota[0] . ']', ['app' => 'user_ldap']); } - } elseif ($this->verifyQuotaValue($valueFromLDAP)) { + } elseif (!is_null($valueFromLDAP) && $this->verifyQuotaValue($valueFromLDAP)) { $quota = $valueFromLDAP; } else { - $this->log->log('no suitable LDAP quota found for user ' . $this->uid . ': [' . $valueFromLDAP . ']', ILogger::DEBUG); + $this->logger->debug('no suitable LDAP quota found for user ' . $this->uid . ': [' . ($valueFromLDAP ?? '') . ']', ['app' => 'user_ldap']); } if ($quota === false && $this->verifyQuotaValue($defaultQuota)) { // quota not found using the LDAP attribute (or not parseable). Try the default quota $quota = $defaultQuota; } elseif ($quota === false) { - $this->log->log('no suitable default quota found for user ' . $this->uid . ': [' . $defaultQuota . ']', ILogger::DEBUG); + $this->logger->debug('no suitable default quota found for user ' . $this->uid . ': [' . $defaultQuota . ']', ['app' => 'user_ldap']); return; } @@ -514,30 +558,69 @@ class User { if ($targetUser instanceof IUser) { $targetUser->setQuota($quota); } else { - $this->log->log('trying to set a quota for user ' . $this->uid . ' but the user is missing', ILogger::INFO); + $this->logger->info('trying to set a quota for user ' . $this->uid . ' but the user is missing', ['app' => 'user_ldap']); } } - private function verifyQuotaValue($quotaValue) { - return $quotaValue === 'none' || $quotaValue === 'default' || \OC_Helper::computerFileSize($quotaValue) !== false; + private function verifyQuotaValue(string $quotaValue): bool { + return $quotaValue === 'none' || $quotaValue === 'default' || Util::computerFileSize($quotaValue) !== false; } /** - * called by a post_login hook to save the avatar picture + * takes values from LDAP and stores it as Nextcloud user profile value * - * @param array $params + * @param array $profileValues associative array of property keys and values from LDAP */ - public function updateAvatarPostLogin($params) { - if (isset($params['uid']) && $params['uid'] === $this->getUsername()) { - $this->updateAvatar(); + private function updateProfile(array $profileValues): void { + // check if given array is empty + if (empty($profileValues)) { + return; // okay, nothing to do + } + // fetch/prepare user + $user = $this->userManager->get($this->uid); + if (is_null($user)) { + $this->logger->error('could not get user for uid=' . $this->uid . '', ['app' => 'user_ldap']); + return; + } + // prepare AccountManager and Account + $accountManager = Server::get(IAccountManager::class); + $account = $accountManager->getAccount($user); // get Account + $defaultScopes = array_merge(AccountManager::DEFAULT_SCOPES, + $this->config->getSystemValue('account_manager.default_property_scope', [])); + // loop through the properties and handle them + foreach ($profileValues as $property => $valueFromLDAP) { + // check and update profile properties + $value = (is_array($valueFromLDAP) ? $valueFromLDAP[0] : $valueFromLDAP); // take ONLY the first value, if multiple values specified + try { + $accountProperty = $account->getProperty($property); + $currentValue = $accountProperty->getValue(); + $scope = ($accountProperty->getScope() ?: $defaultScopes[$property]); + } catch (PropertyDoesNotExistException $e) { // thrown at getProperty + $this->logger->error('property does not exist: ' . $property + . ' for uid=' . $this->uid . '', ['app' => 'user_ldap', 'exception' => $e]); + $currentValue = ''; + $scope = $defaultScopes[$property]; + } + $verified = IAccountManager::VERIFIED; // trust the LDAP admin knew what they put there + if ($currentValue !== $value) { + $account->setProperty($property, $value, $scope, $verified); + $this->logger->debug('update user profile: ' . $property . '=' . $value + . ' for uid=' . $this->uid . '', ['app' => 'user_ldap']); + } + } + try { + $accountManager->updateAccount($account); // may throw InvalidArgumentException + } catch (\InvalidArgumentException $e) { + $this->logger->error('invalid data from LDAP: for uid=' . $this->uid . '', ['app' => 'user_ldap', 'func' => 'updateProfile' + , 'exception' => $e]); } } /** * @brief attempts to get an image from LDAP and sets it as Nextcloud avatar - * @return bool + * @return bool true when the avatar was set successfully or is up to date */ - public function updateAvatar($force = false) { + public function updateAvatar(bool $force = false): bool { if (!$force && $this->wasRefreshed('avatar')) { return false; } @@ -554,11 +637,11 @@ class User { // use the checksum before modifications $checksum = md5($this->image->data()); - if ($checksum === $this->config->getUserValue($this->uid, 'user_ldap', 'lastAvatarChecksum', '')) { + if ($checksum === $this->config->getUserValue($this->uid, 'user_ldap', 'lastAvatarChecksum', '') && $this->avatarExists()) { return true; } - $isSet = $this->setOwnCloudAvatar(); + $isSet = $this->setNextcloudAvatar(); if ($isSet) { // save checksum only after successful setting @@ -568,38 +651,38 @@ class User { return $isSet; } + private function avatarExists(): bool { + try { + $currentAvatar = $this->avatarManager->getAvatar($this->uid); + return $currentAvatar->exists() && $currentAvatar->isCustomAvatar(); + } catch (\Exception $e) { + return false; + } + } + /** * @brief sets an image as Nextcloud avatar - * @return bool */ - private function setOwnCloudAvatar() { + private function setNextcloudAvatar(): bool { if (!$this->image->valid()) { - $this->log->log('avatar image data from LDAP invalid for '.$this->dn, ILogger::ERROR); + $this->logger->error('avatar image data from LDAP invalid for ' . $this->dn, ['app' => 'user_ldap']); return false; } - //make sure it is a square and not bigger than 128x128 - $size = min([$this->image->width(), $this->image->height(), 128]); + //make sure it is a square and not bigger than 512x512 + $size = min([$this->image->width(), $this->image->height(), 512]); if (!$this->image->centerCrop($size)) { - $this->log->log('croping image for avatar failed for '.$this->dn, ILogger::ERROR); + $this->logger->error('croping image for avatar failed for ' . $this->dn, ['app' => 'user_ldap']); return false; } - if (!$this->fs->isLoaded()) { - $this->fs->setup($this->uid); - } - try { $avatar = $this->avatarManager->getAvatar($this->uid); $avatar->set($this->image); return true; } catch (\Exception $e) { - \OC::$server->getLogger()->logException($e, [ - 'message' => 'Could not set avatar for ' . $this->dn, - 'level' => ILogger::INFO, - 'app' => 'user_ldap', - ]); + $this->logger->info('Could not set avatar for ' . $this->dn, ['exception' => $e]); } return false; } @@ -607,7 +690,7 @@ class User { /** * @throws AttributeNotSet * @throws \OC\ServerNotAvailableException - * @throws \OCP\PreConditionNotMetException + * @throws PreConditionNotMetException */ public function getExtStorageHome():string { $value = $this->config->getUserValue($this->getUsername(), 'user_ldap', 'extStorageHome', ''); @@ -626,16 +709,16 @@ class User { } /** - * @throws \OCP\PreConditionNotMetException + * @throws PreConditionNotMetException * @throws \OC\ServerNotAvailableException */ - public function updateExtStorageHome(string $valueFromLDAP = null):string { + public function updateExtStorageHome(?string $valueFromLDAP = null):string { if ($valueFromLDAP === null) { $extHomeValues = $this->access->readAttribute($this->getDN(), $this->connection->ldapExtStorageHomeAttribute); } else { $extHomeValues = [$valueFromLDAP]; } - if ($extHomeValues && isset($extHomeValues[0])) { + if ($extHomeValues !== false && isset($extHomeValues[0])) { $extHome = $extHomeValues[0]; $this->config->setUserValue($this->getUsername(), 'user_ldap', 'extStorageHome', $extHome); return $extHome; @@ -647,29 +730,30 @@ class User { /** * called by a post_login hook to handle password expiry - * - * @param array $params */ - public function handlePasswordExpiry($params) { + public function handlePasswordExpiry(array $params): void { $ppolicyDN = $this->connection->ldapDefaultPPolicyDN; if (empty($ppolicyDN) || ((int)$this->connection->turnOnPasswordChange !== 1)) { - return;//password expiry handling disabled + //password expiry handling disabled + return; } $uid = $params['uid']; if (isset($uid) && $uid === $this->getUsername()) { //retrieve relevant user attributes $result = $this->access->search('objectclass=*', $this->dn, ['pwdpolicysubentry', 'pwdgraceusetime', 'pwdreset', 'pwdchangedtime']); - if (array_key_exists('pwdpolicysubentry', $result[0])) { - $pwdPolicySubentry = $result[0]['pwdpolicysubentry']; - if ($pwdPolicySubentry && (count($pwdPolicySubentry) > 0)) { - $ppolicyDN = $pwdPolicySubentry[0];//custom ppolicy DN + if (!empty($result)) { + if (array_key_exists('pwdpolicysubentry', $result[0])) { + $pwdPolicySubentry = $result[0]['pwdpolicysubentry']; + if ($pwdPolicySubentry && (count($pwdPolicySubentry) > 0)) { + $ppolicyDN = $pwdPolicySubentry[0];//custom ppolicy DN + } } - } - $pwdGraceUseTime = array_key_exists('pwdgraceusetime', $result[0]) ? $result[0]['pwdgraceusetime'] : []; - $pwdReset = array_key_exists('pwdreset', $result[0]) ? $result[0]['pwdreset'] : []; - $pwdChangedTime = array_key_exists('pwdchangedtime', $result[0]) ? $result[0]['pwdchangedtime'] : []; + $pwdGraceUseTime = array_key_exists('pwdgraceusetime', $result[0]) ? $result[0]['pwdgraceusetime'] : []; + $pwdReset = array_key_exists('pwdreset', $result[0]) ? $result[0]['pwdreset'] : []; + $pwdChangedTime = array_key_exists('pwdchangedtime', $result[0]) ? $result[0]['pwdchangedtime'] : []; + } //retrieve relevant password policy attributes $cacheKey = 'ppolicyAttributes' . $ppolicyDN; @@ -688,19 +772,19 @@ class User { if (!empty($pwdGraceAuthNLimit) && count($pwdGraceUseTime) < (int)$pwdGraceAuthNLimit[0]) { //at least one more grace login available? $this->config->setUserValue($uid, 'user_ldap', 'needsPasswordReset', 'true'); - header('Location: '.\OC::$server->getURLGenerator()->linkToRouteAbsolute( - 'user_ldap.renewPassword.showRenewPasswordForm', ['user' => $uid])); + header('Location: ' . Server::get(IURLGenerator::class)->linkToRouteAbsolute( + 'user_ldap.renewPassword.showRenewPasswordForm', ['user' => $uid])); } else { //no more grace login available - header('Location: '.\OC::$server->getURLGenerator()->linkToRouteAbsolute( - 'user_ldap.renewPassword.showLoginFormInvalidPassword', ['user' => $uid])); + header('Location: ' . Server::get(IURLGenerator::class)->linkToRouteAbsolute( + 'user_ldap.renewPassword.showLoginFormInvalidPassword', ['user' => $uid])); } exit(); } //handle pwdReset attribute - if (!empty($pwdReset) && $pwdReset[0] === 'TRUE') { //user must change his password + if (!empty($pwdReset) && $pwdReset[0] === 'TRUE') { //user must change their password $this->config->setUserValue($uid, 'user_ldap', 'needsPasswordReset', 'true'); - header('Location: '.\OC::$server->getURLGenerator()->linkToRouteAbsolute( - 'user_ldap.renewPassword.showRenewPasswordForm', ['user' => $uid])); + header('Location: ' . Server::get(IURLGenerator::class)->linkToRouteAbsolute( + 'user_ldap.renewPassword.showRenewPasswordForm', ['user' => $uid])); exit(); } //handle password expiry warning @@ -711,7 +795,7 @@ class User { $pwdExpireWarningInt = (int)$pwdExpireWarning[0]; if ($pwdMaxAgeInt > 0 && $pwdExpireWarningInt > 0) { $pwdChangedTimeDt = \DateTime::createFromFormat('YmdHisZ', $pwdChangedTime[0]); - $pwdChangedTimeDt->add(new \DateInterval('PT'.$pwdMaxAgeInt.'S')); + $pwdChangedTimeDt->add(new \DateInterval('PT' . $pwdMaxAgeInt . 'S')); $currentDateTime = new \DateTime(); $secondsToExpiry = $pwdChangedTimeDt->getTimestamp() - $currentDateTime->getTimestamp(); if ($secondsToExpiry <= $pwdExpireWarningInt) { @@ -728,7 +812,7 @@ class User { ->setUser($uid) ->setDateTime($currentDateTime) ->setObject('pwd_exp_warn', $uid) - ->setSubject('pwd_exp_warn_days', [(int) ceil($secondsToExpiry / 60 / 60 / 24)]) + ->setSubject('pwd_exp_warn_days', [(int)ceil($secondsToExpiry / 60 / 60 / 24)]) ; $this->notificationManager->notify($notification); } diff --git a/apps/user_ldap/lib/UserPluginManager.php b/apps/user_ldap/lib/UserPluginManager.php index 2d99d887604..ed87fea6fde 100644 --- a/apps/user_ldap/lib/UserPluginManager.php +++ b/apps/user_ldap/lib/UserPluginManager.php @@ -1,38 +1,19 @@ <?php + /** - * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br) - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Filis Futsarov <filisko@users.noreply.github.com> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP; use OC\User\Backend; +use OCP\Server; +use Psr\Log\LoggerInterface; class UserPluginManager { - public $test = false; - - private $respondToActions = 0; + private int $respondToActions = 0; - private $which = [ + private array $which = [ Backend::CREATE_USER => null, Backend::SET_PASSWORD => null, Backend::GET_HOME => null, @@ -43,6 +24,8 @@ class UserPluginManager { 'deleteUser' => null ]; + private bool $suppressDeletion = false; + /** * @return int All implemented actions, except for 'deleteUser' */ @@ -62,12 +45,12 @@ class UserPluginManager { foreach ($this->which as $action => $v) { if (is_int($action) && (bool)($respondToActions & $action)) { $this->which[$action] = $plugin; - \OC::$server->getLogger()->debug("Registered action ".$action." to plugin ".get_class($plugin), ['app' => 'user_ldap']); + Server::get(LoggerInterface::class)->debug('Registered action ' . $action . ' to plugin ' . get_class($plugin), ['app' => 'user_ldap']); } } - if (method_exists($plugin,'deleteUser')) { + if (method_exists($plugin, 'deleteUser')) { $this->which['deleteUser'] = $plugin; - \OC::$server->getLogger()->debug("Registered action deleteUser to plugin ".get_class($plugin), ['app' => 'user_ldap']); + Server::get(LoggerInterface::class)->debug('Registered action deleteUser to plugin ' . get_class($plugin), ['app' => 'user_ldap']); } } @@ -92,7 +75,7 @@ class UserPluginManager { $plugin = $this->which[Backend::CREATE_USER]; if ($plugin) { - return $plugin->createUser($username,$password); + return $plugin->createUser($username, $password); } throw new \Exception('No plugin implements createUser in this LDAP Backend.'); } @@ -108,13 +91,13 @@ class UserPluginManager { $plugin = $this->which[Backend::SET_PASSWORD]; if ($plugin) { - return $plugin->setPassword($uid,$password); + return $plugin->setPassword($uid, $password); } throw new \Exception('No plugin implements setPassword in this LDAP Backend.'); } /** - * checks whether the user is allowed to change his avatar in Nextcloud + * checks whether the user is allowed to change their avatar in Nextcloud * @param string $uid the Nextcloud user name * @return boolean either the user can or cannot * @throws \Exception @@ -176,7 +159,7 @@ class UserPluginManager { /** * Count the number of users - * @return int|bool + * @return int|false * @throws \Exception */ public function countUsers() { @@ -192,7 +175,7 @@ class UserPluginManager { * @return bool */ public function canDeleteUser() { - return $this->which['deleteUser'] !== null; + return !$this->suppressDeletion && $this->which['deleteUser'] !== null; } /** @@ -203,8 +186,21 @@ class UserPluginManager { public function deleteUser($uid) { $plugin = $this->which['deleteUser']; if ($plugin) { + if ($this->suppressDeletion) { + return false; + } return $plugin->deleteUser($uid); } throw new \Exception('No plugin implements deleteUser in this LDAP Backend.'); } + + /** + * @param bool $value + * @return bool – the value before the change + */ + public function setSuppressDeletion(bool $value): bool { + $old = $this->suppressDeletion; + $this->suppressDeletion = $value; + return $old; + } } diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index 79f230ae00b..c3f56f5ff9b 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -1,81 +1,40 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Daniel Kesselberg <mail@danielkesselberg.de> - * @author Dominik Schmidt <dev@dominik-schmidt.de> - * @author felixboehm <felix@webhippie.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roger Szabo <roger.szabo@web.de> - * @author root <root@localhost.localdomain> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Tom Needham <tom@owncloud.com> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; use OC\ServerNotAvailableException; use OC\User\Backend; use OC\User\NoUserException; use OCA\User_LDAP\Exceptions\NotOnLDAP; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; -use OCP\IConfig; -use OCP\ILogger; -use OCP\IUserSession; +use OCP\IUserBackend; use OCP\Notification\IManager as INotificationManager; -use OCP\Util; - -class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP { - /** @var \OCP\IConfig */ - protected $ocConfig; - - /** @var INotificationManager */ - protected $notificationManager; - - /** @var UserPluginManager */ - protected $userPluginManager; - - /** - * @param Access $access - * @param \OCP\IConfig $ocConfig - * @param \OCP\Notification\IManager $notificationManager - * @param IUserSession $userSession - */ - public function __construct(Access $access, IConfig $ocConfig, INotificationManager $notificationManager, IUserSession $userSession, UserPluginManager $userPluginManager) { +use OCP\User\Backend\ICountMappedUsersBackend; +use OCP\User\Backend\ILimitAwareCountUsersBackend; +use OCP\User\Backend\IProvideEnabledStateBackend; +use OCP\UserInterface; +use Psr\Log\LoggerInterface; + +class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, IUserLDAP, ILimitAwareCountUsersBackend, ICountMappedUsersBackend, IProvideEnabledStateBackend { + public function __construct( + Access $access, + protected INotificationManager $notificationManager, + protected UserPluginManager $userPluginManager, + protected LoggerInterface $logger, + protected DeletedUsersIndex $deletedUsersIndex, + ) { parent::__construct($access); - $this->ocConfig = $ocConfig; - $this->notificationManager = $notificationManager; - $this->userPluginManager = $userPluginManager; } /** - * checks whether the user is allowed to change his avatar in Nextcloud + * checks whether the user is allowed to change their avatar in Nextcloud * * @param string $uid the Nextcloud user name * @return boolean either the user can or cannot @@ -108,11 +67,12 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn * @return string|false * @throws \Exception */ - public function loginName2UserName($loginName) { + public function loginName2UserName($loginName, bool $forceLdapRefetch = false) { $cacheKey = 'loginName2UserName-' . $loginName; $username = $this->access->connection->getFromCache($cacheKey); - if ($username !== null) { + $ignoreCache = ($username === false && $forceLdapRefetch); + if ($username !== null && !$ignoreCache) { return $username; } @@ -127,13 +87,16 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn } $username = $user->getUsername(); $this->access->connection->writeToCache($cacheKey, $username); + if ($forceLdapRefetch) { + $user->processAttributes($ldapRecord); + } return $username; } catch (NotOnLDAP $e) { $this->access->connection->writeToCache($cacheKey, false); return false; } } - + /** * returns the username for the given LDAP DN, if available * @@ -156,8 +119,8 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $attrs = $this->access->userManager->getAttributes(); $users = $this->access->fetchUsersByLoginName($loginName, $attrs); if (count($users) < 1) { - throw new NotOnLDAP('No user available for the given login name on ' . - $this->access->connection->ldapHost . ':' . $this->access->connection->ldapPort); + throw new NotOnLDAP('No user available for the given login name on ' + . $this->access->connection->ldapHost . ':' . $this->access->connection->ldapPort); } return $users[0]; } @@ -170,20 +133,19 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn * @return false|string */ public function checkPassword($uid, $password) { - try { - $ldapRecord = $this->getLDAPUserByLoginName($uid); - } catch (NotOnLDAP $e) { - \OC::$server->getLogger()->logException($e, ['app' => 'user_ldap', 'level' => ILogger::DEBUG]); + $username = $this->loginName2UserName($uid, true); + if ($username === false) { return false; } - $dn = $ldapRecord['dn'][0]; + $dn = $this->access->username2dn($username); $user = $this->access->userManager->get($dn); if (!$user instanceof User) { - Util::writeLog('user_ldap', - 'LDAP Login: Could not get user object for DN ' . $dn . - '. Maybe the LDAP entry has no set display name attribute?', - ILogger::WARN); + $this->logger->warning( + 'LDAP Login: Could not get user object for DN ' . $dn + . '. Maybe the LDAP entry has no set display name attribute?', + ['app' => 'user_ldap'] + ); return false; } if ($user->getUsername() !== false) { @@ -193,7 +155,6 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn } $this->access->cacheUserExists($user->getUsername()); - $user->processAttributes($ldapRecord); $user->markLogin(); return $user->getUsername(); @@ -216,8 +177,8 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $user = $this->access->userManager->get($uid); if (!$user instanceof User) { - throw new \Exception('LDAP setPassword: Could not get user object for uid ' . $uid . - '. Maybe the LDAP entry has no set display name attribute?'); + throw new \Exception('LDAP setPassword: Could not get user object for uid ' . $uid + . '. Maybe the LDAP entry has no set display name attribute?'); } if ($user->getUsername() !== false && $this->access->setPassword($user->getDN(), $password)) { $ldapDefaultPPolicyDN = $this->access->connection->ldapDefaultPPolicyDN; @@ -247,7 +208,7 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn */ public function getUsers($search = '', $limit = 10, $offset = 0) { $search = $this->access->escapeFilterPart($search, true); - $cachekey = 'getUsers-'.$search.'-'.$limit.'-'.$offset; + $cachekey = 'getUsers-' . $search . '-' . $limit . '-' . $offset; //check if users are cached, if so return $ldap_users = $this->access->connection->getFromCache($cachekey); @@ -266,16 +227,20 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $this->access->getFilterPartForUserSearch($search) ]); - Util::writeLog('user_ldap', - 'getUsers: Options: search '.$search.' limit '.$limit.' offset '.$offset.' Filter: '.$filter, - ILogger::DEBUG); + $this->logger->debug( + 'getUsers: Options: search ' . $search . ' limit ' . $limit . ' offset ' . $offset . ' Filter: ' . $filter, + ['app' => 'user_ldap'] + ); //do the search and translate results to Nextcloud names $ldap_users = $this->access->fetchListOfUsers( $filter, $this->access->userManager->getAttributes(true), $limit, $offset); $ldap_users = $this->access->nextcloudUserNames($ldap_users); - Util::writeLog('user_ldap', 'getUsers: '.count($ldap_users). ' Users found', ILogger::DEBUG); + $this->logger->debug( + 'getUsers: ' . count($ldap_users) . ' Users found', + ['app' => 'user_ldap'] + ); $this->access->connection->writeToCache($cachekey, $ldap_users); return $ldap_users; @@ -284,13 +249,12 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn /** * checks whether a user is still available on LDAP * - * @param string|\OCA\User_LDAP\User\User $user either the Nextcloud user - * name or an instance of that user - * @return bool + * @param string|User $user either the Nextcloud user + * name or an instance of that user * @throws \Exception * @throws \OC\ServerNotAvailableException */ - public function userExistsOnLDAP($user) { + public function userExistsOnLDAP($user, bool $ignoreCache = false): bool { if (is_string($user)) { $user = $this->access->userManager->get($user); } @@ -299,9 +263,11 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn } $uid = $user instanceof User ? $user->getUsername() : $user->getOCName(); $cacheKey = 'userExistsOnLDAP' . $uid; - $userExists = $this->access->connection->getFromCache($cacheKey); - if (!is_null($userExists)) { - return (bool)$userExists; + if (!$ignoreCache) { + $userExists = $this->access->connection->getFromCache($cacheKey); + if (!is_null($userExists)) { + return (bool)$userExists; + } } $dn = $user->getDN(); @@ -320,8 +286,6 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn return false; } $this->access->getUserMapper()->setDNbyUUID($newDn, $uuid); - $this->access->connection->writeToCache($cacheKey, true); - return true; } catch (ServerNotAvailableException $e) { throw $e; } catch (\Exception $e) { @@ -345,21 +309,22 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn * @throws \Exception when connection could not be established */ public function userExists($uid) { - $userExists = $this->access->connection->getFromCache('userExists'.$uid); + $userExists = $this->access->connection->getFromCache('userExists' . $uid); if (!is_null($userExists)) { return (bool)$userExists; } - //getting dn, if false the user does not exist. If dn, he may be mapped only, requires more checking. - $user = $this->access->userManager->get($uid); + $userExists = $this->access->userManager->exists($uid); - if (is_null($user)) { - Util::writeLog('user_ldap', 'No DN found for '.$uid.' on '. - $this->access->connection->ldapHost, ILogger::DEBUG); - $this->access->connection->writeToCache('userExists'.$uid, false); + if (!$userExists) { + $this->logger->debug( + 'No DN found for ' . $uid . ' on ' . $this->access->connection->ldapHost, + ['app' => 'user_ldap'] + ); + $this->access->connection->writeToCache('userExists' . $uid, false); return false; } - $this->access->connection->writeToCache('userExists'.$uid, true); + $this->access->connection->writeToCache('userExists' . $uid, true); return true; } @@ -377,14 +342,29 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn } } - $marked = $this->ocConfig->getUserValue($uid, 'user_ldap', 'isDeleted', 0); - if ((int)$marked === 0) { - \OC::$server->getLogger()->notice( - 'User '.$uid . ' is not marked as deleted, not cleaning up.', - ['app' => 'user_ldap']); - return false; + $marked = $this->deletedUsersIndex->isUserMarked($uid); + if (!$marked) { + try { + $user = $this->access->userManager->get($uid); + if (($user instanceof User) && !$this->userExistsOnLDAP($uid, true)) { + $user->markUser(); + $marked = true; + } + } catch (\Exception $e) { + $this->logger->debug( + $e->getMessage(), + ['app' => 'user_ldap', 'exception' => $e] + ); + } + if (!$marked) { + $this->logger->notice( + 'User ' . $uid . ' is not marked as deleted, not cleaning up.', + ['app' => 'user_ldap'] + ); + return false; + } } - \OC::$server->getLogger()->info('Cleaning up after user ' . $uid, + $this->logger->info('Cleaning up after user ' . $uid, ['app' => 'user_ldap']); $this->access->getUserMapper()->unmap($uid); // we don't emit unassign signals here, since it is implicit to delete signals fired from core @@ -411,7 +391,7 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn return $this->userPluginManager->getHome($uid); } - $cacheKey = 'getHome'.$uid; + $cacheKey = 'getHome' . $uid; $path = $this->access->connection->getFromCache($cacheKey); if (!is_null($path)) { return $path; @@ -443,7 +423,7 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn return false; } - $cacheKey = 'getDisplayName'.$uid; + $cacheKey = 'getDisplayName' . $uid; if (!is_null($displayName = $this->access->connection->getFromCache($cacheKey))) { return $displayName; } @@ -470,11 +450,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $user = $this->access->userManager->get($uid); if ($user instanceof User) { - $displayName = $user->composeAndStoreDisplayName($displayName, $displayName2); + $displayName = $user->composeAndStoreDisplayName($displayName, (string)$displayName2); $this->access->connection->writeToCache($cacheKey, $displayName); } if ($user instanceof OfflineUser) { - /** @var OfflineUser $user*/ $displayName = $user->getDisplayName(); } return $displayName; @@ -502,12 +481,12 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn * Get a list of all display names * * @param string $search - * @param string|null $limit - * @param string|null $offset + * @param int|null $limit + * @param int|null $offset * @return array an array of all displayNames (value) and the corresponding uids (key) */ public function getDisplayNames($search = '', $limit = null, $offset = null) { - $cacheKey = 'getDisplayNames-'.$search.'-'.$limit.'-'.$offset; + $cacheKey = 'getDisplayNames-' . $search . '-' . $limit . '-' . $offset; if (!is_null($displayNames = $this->access->connection->getFromCache($cacheKey))) { return $displayNames; } @@ -549,24 +528,26 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn /** * counts the users in LDAP - * - * @return int|bool */ - public function countUsers() { + public function countUsers(int $limit = 0): int|false { if ($this->userPluginManager->implementsActions(Backend::COUNT_USERS)) { return $this->userPluginManager->countUsers(); } $filter = $this->access->getFilterForUserCount(); - $cacheKey = 'countUsers-'.$filter; + $cacheKey = 'countUsers-' . $filter . '-' . $limit; if (!is_null($entries = $this->access->connection->getFromCache($cacheKey))) { return $entries; } - $entries = $this->access->countUsers($filter); + $entries = $this->access->countUsers($filter, limit:$limit); $this->access->connection->writeToCache($cacheKey, $entries); return $entries; } + public function countMappedUsers(): int { + return $this->access->getUserMapper()->count(); + } + /** * Backend name to be shown in user management * @return string the name of the backend to be shown @@ -574,7 +555,7 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn public function getBackendName() { return 'LDAP'; } - + /** * Return access for LDAP interaction. * @param string $uid @@ -583,13 +564,13 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn public function getLDAPAccess($uid) { return $this->access; } - + /** * Return LDAP connection resource from a cloned connection. * The cloned connection needs to be closed manually. * of the current access. * @param string $uid - * @return resource of the LDAP connection + * @return \LDAP\Connection The LDAP connection */ public function getNewLDAPConnection($uid) { $connection = clone $this->access->getConnection(); @@ -617,9 +598,8 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $uuid, true ); - $this->access->cacheUserExists($username); } else { - \OC::$server->getLogger()->warning( + $this->logger->warning( 'Failed to map created LDAP user with userid {userid}, because UUID could not be determined', [ 'app' => 'user_ldap', @@ -628,11 +608,28 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn ); } } else { - throw new \UnexpectedValueException("LDAP Plugin: Method createUser changed to return the user DN instead of boolean."); + throw new \UnexpectedValueException('LDAP Plugin: Method createUser changed to return the user DN instead of boolean.'); } } - return (bool) $dn; + return (bool)$dn; } return false; } + + public function isUserEnabled(string $uid, callable $queryDatabaseValue): bool { + if ($this->deletedUsersIndex->isUserMarked($uid) && ((int)$this->access->connection->markRemnantsAsDisabled === 1)) { + return false; + } else { + return $queryDatabaseValue(); + } + } + + public function setUserEnabled(string $uid, bool $enabled, callable $queryDatabaseValue, callable $setDatabaseValue): bool { + $setDatabaseValue($enabled); + return $enabled; + } + + public function getDisabledUserList(?int $limit = null, int $offset = 0, string $search = ''): array { + throw new \Exception('This is implemented directly in User_Proxy'); + } } diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php index e8d0a6d6948..0d41f495ce9 100644 --- a/apps/user_ldap/lib/User_Proxy.php +++ b/apps/user_ldap/lib/User_Proxy.php @@ -1,65 +1,47 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christopher Schäpers <kondou@ts.unde.re> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roger Szabo <roger.szabo@web.de> - * @author root <root@localhost.localdomain> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; +use OCA\User_LDAP\User\DeletedUsersIndex; +use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; -use OCP\IConfig; -use OCP\IUserSession; +use OCP\IUserBackend; use OCP\Notification\IManager as INotificationManager; +use OCP\User\Backend\ICountMappedUsersBackend; +use OCP\User\Backend\ILimitAwareCountUsersBackend; +use OCP\User\Backend\IProvideEnabledStateBackend; +use OCP\UserInterface; +use Psr\Log\LoggerInterface; -class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP { - private $backends = []; - /** @var User_LDAP */ - private $refBackend = null; - +/** + * @template-extends Proxy<User_LDAP> + */ +class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP, ILimitAwareCountUsersBackend, ICountMappedUsersBackend, IProvideEnabledStateBackend { public function __construct( - Helper $helper, + private Helper $helper, ILDAPWrapper $ldap, - IConfig $ocConfig, - INotificationManager $notificationManager, - IUserSession $userSession, - UserPluginManager $userPluginManager + AccessFactory $accessFactory, + private INotificationManager $notificationManager, + private UserPluginManager $userPluginManager, + private LoggerInterface $logger, + private DeletedUsersIndex $deletedUsersIndex, ) { - parent::__construct($ldap); - $serverConfigPrefixes = $helper->getServerConfigurationPrefixes(true); - foreach ($serverConfigPrefixes as $configPrefix) { - $this->backends[$configPrefix] = - new User_LDAP($this->getAccess($configPrefix), $ocConfig, $notificationManager, $userSession, $userPluginManager); - - if (is_null($this->refBackend)) { - $this->refBackend = &$this->backends[$configPrefix]; - } - } + parent::__construct($helper, $ldap, $accessFactory); + } + + protected function newInstance(string $configPrefix): User_LDAP { + return new User_LDAP( + $this->getAccess($configPrefix), + $this->notificationManager, + $this->userPluginManager, + $this->logger, + $this->deletedUsersIndex, + ); } /** @@ -71,6 +53,8 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, * @return mixed the result of the method or false */ protected function walkBackends($id, $method, $parameters) { + $this->setup(); + $uid = $id; $cacheKey = $this->getUserCacheKey($uid); foreach ($this->backends as $configPrefix => $backend) { @@ -99,6 +83,8 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, * @return mixed the result of the method or false */ protected function callOnLastSeenOn($id, $method, $parameters, $passOnWhen) { + $this->setup(); + $uid = $id; $cacheKey = $this->getUserCacheKey($uid); $prefix = $this->getFromCache($cacheKey); @@ -129,6 +115,7 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, } protected function activeBackends(): int { + $this->setup(); return count($this->backends); } @@ -142,6 +129,7 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, * compared with \OC\User\Backend::CREATE_USER etc. */ public function implementsActions($actions) { + $this->setup(); //it's the same across all our user backends obviously return $this->refBackend->implementsActions($actions); } @@ -152,6 +140,7 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, * @return string the name of the backend to be shown */ public function getBackendName() { + $this->setup(); return $this->refBackend->getBackendName(); } @@ -164,6 +153,8 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, * @return string[] an array of all uids */ public function getUsers($search = '', $limit = 10, $offset = 0) { + $this->setup(); + //we do it just as the /OC_User implementation: do not play around with limit and offset but ask all backends $users = []; foreach ($this->backends as $backend) { @@ -203,13 +194,12 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, /** * check if a user exists on LDAP * - * @param string|\OCA\User_LDAP\User\User $user either the Nextcloud user - * name or an instance of that user - * @return boolean + * @param string|User $user either the Nextcloud user + * name or an instance of that user */ - public function userExistsOnLDAP($user) { + public function userExistsOnLDAP($user, bool $ignoreCache = false): bool { $id = ($user instanceof User) ? $user->getUsername() : $user; - return $this->handleRequest($id, 'userExistsOnLDAP', [$user]); + return $this->handleRequest($id, 'userExistsOnLDAP', [$user, $ignoreCache]); } /** @@ -279,7 +269,7 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, } /** - * checks whether the user is allowed to change his avatar in Nextcloud + * checks whether the user is allowed to change their avatar in Nextcloud * * @param string $uid the Nextcloud user name * @return boolean either the user can or cannot @@ -292,11 +282,13 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, * Get a list of all display names and user ids. * * @param string $search - * @param string|null $limit - * @param string|null $offset + * @param int|null $limit + * @param int|null $offset * @return array an array of all displayNames (value) and the corresponding uids (key) */ public function getDisplayNames($search = '', $limit = null, $offset = null) { + $this->setup(); + //we do it just as the /OC_User implementation: do not play around with limit and offset but ask all backends $users = []; foreach ($this->backends as $backend) { @@ -336,26 +328,46 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, * @return bool */ public function hasUserListings() { + $this->setup(); return $this->refBackend->hasUserListings(); } /** * Count the number of users - * - * @return int|bool */ - public function countUsers() { + public function countUsers(int $limit = 0): int|false { + $this->setup(); + $users = false; foreach ($this->backends as $backend) { - $backendUsers = $backend->countUsers(); + $backendUsers = $backend->countUsers($limit); if ($backendUsers !== false) { - $users += $backendUsers; + $users = (int)$users + $backendUsers; + if ($limit > 0) { + if ($users >= $limit) { + break; + } + $limit -= $users; + } } } return $users; } /** + * Count the number of mapped users + */ + public function countMappedUsers(): int { + $this->setup(); + + $users = 0; + foreach ($this->backends as $backend) { + $users += $backend->countMappedUsers(); + } + return $users; + } + + /** * Return access for LDAP interaction. * * @param string $uid @@ -370,7 +382,7 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, * The connection needs to be closed manually. * * @param string $uid - * @return resource of the LDAP connection + * @return \LDAP\Connection The LDAP connection */ public function getNewLDAPConnection($uid) { return $this->handleRequest($uid, 'getNewLDAPConnection', [$uid]); @@ -386,4 +398,37 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, public function createUser($username, $password) { return $this->handleRequest($username, 'createUser', [$username, $password]); } + + public function isUserEnabled(string $uid, callable $queryDatabaseValue): bool { + return $this->handleRequest($uid, 'isUserEnabled', [$uid, $queryDatabaseValue]); + } + + public function setUserEnabled(string $uid, bool $enabled, callable $queryDatabaseValue, callable $setDatabaseValue): bool { + return $this->handleRequest($uid, 'setUserEnabled', [$uid, $enabled, $queryDatabaseValue, $setDatabaseValue]); + } + + public function getDisabledUserList(?int $limit = null, int $offset = 0, string $search = ''): array { + if ((int)$this->getAccess(array_key_first($this->backends) ?? '')->connection->markRemnantsAsDisabled !== 1) { + return []; + } + $disabledUsers = $this->deletedUsersIndex->getUsers(); + if ($search !== '') { + $disabledUsers = array_filter( + $disabledUsers, + fn (OfflineUser $user): bool + => mb_stripos($user->getOCName(), $search) !== false + || mb_stripos($user->getUID(), $search) !== false + || mb_stripos($user->getDisplayName(), $search) !== false + || mb_stripos($user->getEmail(), $search) !== false, + ); + } + return array_map( + fn (OfflineUser $user) => $user->getOCName(), + array_slice( + $disabledUsers, + $offset, + $limit + ) + ); + } } diff --git a/apps/user_ldap/lib/Wizard.php b/apps/user_ldap/lib/Wizard.php index 0dde8199a02..15a9f9cb212 100644 --- a/apps/user_ldap/lib/Wizard.php +++ b/apps/user_ldap/lib/Wizard.php @@ -1,54 +1,25 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Alexander Bergolth <leo@strike.wu.ac.at> - * @author Allan Nordhøy <epost@anotheragency.no> - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Jean-Louis Dupond <jean-louis@dupond.be> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Nicolas Grekas <nicolas.grekas@gmail.com> - * @author Robin Appelman <robin@icewind.nl> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Stefan Weil <sw@weilnetz.de> - * @author Tobias Perschon <tobias@perschon.at> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * @author Xuanwo <xuanwo@yunify.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\User_LDAP; use OC\ServerNotAvailableException; -use OCP\ILogger; +use OCP\IL10N; +use OCP\L10N\IFactory as IL10NFactory; +use OCP\Server; +use OCP\Util; +use Psr\Log\LoggerInterface; class Wizard extends LDAPUtility { - /** @var \OCP\IL10N */ - protected static $l; - protected $access; - protected $cr; - protected $configuration; - protected $result; - protected $resultCache = []; + protected static ?IL10N $l = null; + protected ?\LDAP\Connection $cr = null; + protected WizardResult $result; + protected LoggerInterface $logger; public const LRESULT_PROCESSED_OK = 2; public const LRESULT_PROCESSED_INVALID = 3; @@ -63,20 +34,17 @@ class Wizard extends LDAPUtility { public const LDAP_NW_TIMEOUT = 4; - /** - * Constructor - * @param Configuration $configuration an instance of Configuration - * @param ILDAPWrapper $ldap an instance of ILDAPWrapper - * @param Access $access - */ - public function __construct(Configuration $configuration, ILDAPWrapper $ldap, Access $access) { + public function __construct( + protected Configuration $configuration, + ILDAPWrapper $ldap, + protected Access $access, + ) { parent::__construct($ldap); - $this->configuration = $configuration; - if (is_null(Wizard::$l)) { - Wizard::$l = \OC::$server->getL10N('user_ldap'); + if (is_null(static::$l)) { + static::$l = Server::get(IL10NFactory::class)->get('user_ldap'); } - $this->access = $access; $this->result = new WizardResult(); + $this->logger = Server::get(LoggerInterface::class); } public function __destruct() { @@ -90,11 +58,13 @@ class Wizard extends LDAPUtility { * * @param string $filter the LDAP search filter * @param string $type a string being either 'users' or 'groups'; - * @return int * @throws \Exception */ public function countEntries(string $filter, string $type): int { - $reqs = ['ldapHost', 'ldapPort', 'ldapBase']; + $reqs = ['ldapHost', 'ldapBase']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } if ($type === 'users') { $reqs[] = 'ldapUserFilter'; } @@ -118,24 +88,13 @@ class Wizard extends LDAPUtility { } /** - * formats the return value of a count operation to the string to be - * inserted. - * - * @param int $count - * @return string + * @return WizardResult|false */ - private function formatCountResult(int $count): string { - if ($count > 1000) { - return '> 1000'; - } - return (string)$count; - } - public function countGroups() { $filter = $this->configuration->ldapGroupFilter; if (empty($filter)) { - $output = self::$l->n('%s group found', '%s groups found', 0, [0]); + $output = self::$l->n('%n group found', '%n groups found', 0); $this->result->addChange('ldap_group_count', $output); return $this->result; } @@ -149,30 +108,36 @@ class Wizard extends LDAPUtility { } return false; } - $output = self::$l->n( - '%s group found', - '%s groups found', - $groupsTotal, - [$this->formatCountResult($groupsTotal)] - ); + + if ($groupsTotal > 1000) { + $output = self::$l->t('> 1000 groups found'); + } else { + $output = self::$l->n( + '%n group found', + '%n groups found', + $groupsTotal + ); + } $this->result->addChange('ldap_group_count', $output); return $this->result; } /** - * @return WizardResult * @throws \Exception */ - public function countUsers() { + public function countUsers(): WizardResult { $filter = $this->access->getFilterForUserCount(); $usersTotal = $this->countEntries($filter, 'users'); - $output = self::$l->n( - '%s user found', - '%s users found', - $usersTotal, - [$this->formatCountResult($usersTotal)] - ); + if ($usersTotal > 1000) { + $output = self::$l->t('> 1000 users found'); + } else { + $output = self::$l->n( + '%n user found', + '%n users found', + $usersTotal + ); + } $this->result->addChange('ldap_user_count', $output); return $this->result; } @@ -180,31 +145,25 @@ class Wizard extends LDAPUtility { /** * counts any objects in the currently set base dn * - * @return WizardResult * @throws \Exception */ - public function countInBaseDN() { + public function countInBaseDN(): WizardResult { // we don't need to provide a filter in this case $total = $this->countEntries('', 'objects'); - if ($total === false) { - throw new \Exception('invalid results received'); - } $this->result->addChange('ldap_test_base', $total); return $this->result; } /** * counts users with a specified attribute - * @param string $attr - * @param bool $existsCheck - * @return int|bool + * @return int|false */ - public function countUsersWithAttribute($attr, $existsCheck = false) { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - 'ldapUserFilter', - ])) { + public function countUsersWithAttribute(string $attr, bool $existsCheck = false) { + $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } @@ -213,7 +172,7 @@ class Wizard extends LDAPUtility { $attr . '=*' ]); - $limit = ($existsCheck === false) ? null : 1; + $limit = $existsCheck ? null : 1; return $this->access->countUsers($filter, ['dn'], $limit); } @@ -221,15 +180,15 @@ class Wizard extends LDAPUtility { /** * detects the display name attribute. If a setting is already present that * returns at least one hit, the detection will be canceled. - * @return WizardResult|bool + * @return WizardResult|false * @throws \Exception */ public function detectUserDisplayNameAttribute() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - 'ldapUserFilter', - ])) { + $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } @@ -267,11 +226,11 @@ class Wizard extends LDAPUtility { * @return WizardResult|bool */ public function detectEmailAttribute() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - 'ldapUserFilter', - ])) { + $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } @@ -300,9 +259,11 @@ class Wizard extends LDAPUtility { if ($winner !== '') { $this->applyFind('ldap_email_attr', $winner); if ($writeLog) { - \OCP\Util::writeLog('user_ldap', 'The mail attribute has ' . - 'automatically been reset, because the original value ' . - 'did not return any results.', ILogger::INFO); + $this->logger->info( + 'The mail attribute has automatically been reset, ' + . 'because the original value did not return any results.', + ['app' => 'user_ldap'] + ); } } @@ -310,20 +271,24 @@ class Wizard extends LDAPUtility { } /** - * @return WizardResult + * @return WizardResult|false * @throws \Exception */ public function determineAttributes() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - 'ldapUserFilter', - ])) { + $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } $attributes = $this->getUserAttributes(); + if (!is_array($attributes)) { + throw new \Exception('Failed to determine user attributes'); + } + natcasesort($attributes); $attributes = array_values($attributes); @@ -339,15 +304,15 @@ class Wizard extends LDAPUtility { /** * detects the available LDAP attributes - * @return array|false The instance's WizardResult instance + * @return array|false * @throws \Exception */ private function getUserAttributes() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - 'ldapUserFilter', - ])) { + $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } $cr = $this->getConnection(); @@ -361,8 +326,12 @@ class Wizard extends LDAPUtility { if (!$this->ldap->isResource($rr)) { return false; } + /** @var \LDAP\Result $rr */ $er = $this->ldap->firstEntry($cr, $rr); $attributes = $this->ldap->getAttributes($cr, $er); + if ($attributes === false) { + return false; + } $pureAttributes = []; for ($i = 0; $i < $attributes['count']; $i++) { $pureAttributes[] = $attributes[$i]; @@ -377,8 +346,8 @@ class Wizard extends LDAPUtility { */ public function determineGroupsForGroups() { return $this->determineGroups('ldap_groupfilter_groups', - 'ldapGroupFilterGroups', - false); + 'ldapGroupFilterGroups', + false); } /** @@ -387,22 +356,20 @@ class Wizard extends LDAPUtility { */ public function determineGroupsForUsers() { return $this->determineGroups('ldap_userfilter_groups', - 'ldapUserFilterGroups'); + 'ldapUserFilterGroups'); } /** * detects the available LDAP groups - * @param string $dbKey - * @param string $confKey - * @param bool $testMemberOf * @return WizardResult|false the instance's WizardResult instance * @throws \Exception */ - private function determineGroups($dbKey, $confKey, $testMemberOf = true) { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - ])) { + private function determineGroups(string $dbKey, string $confKey, bool $testMemberOf = true) { + $reqs = ['ldapHost', 'ldapBase']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } $cr = $this->getConnection(); @@ -413,7 +380,7 @@ class Wizard extends LDAPUtility { $this->fetchGroups($dbKey, $confKey); if ($testMemberOf) { - $this->configuration->hasMemberOfFilterSupport = $this->testMemberOf(); + $this->configuration->hasMemberOfFilterSupport = (string)$this->testMemberOf(); $this->result->markChange(); if (!$this->configuration->hasMemberOfFilterSupport) { throw new \Exception('memberOf is not supported by the server'); @@ -426,17 +393,14 @@ class Wizard extends LDAPUtility { /** * fetches all groups from LDAP and adds them to the result object * - * @param string $dbKey - * @param string $confKey - * @return array $groupEntries * @throws \Exception */ - public function fetchGroups($dbKey, $confKey) { + public function fetchGroups(string $dbKey, string $confKey): array { $obclasses = ['posixGroup', 'group', 'zimbraDistributionList', 'groupOfNames', 'groupOfUniqueNames']; $filterParts = []; foreach ($obclasses as $obclass) { - $filterParts[] = 'objectclass='.$obclass; + $filterParts[] = 'objectclass=' . $obclass; } //we filter for everything //- that looks like a group and @@ -453,7 +417,7 @@ class Wizard extends LDAPUtility { // detection will fail later $result = $this->access->searchGroups($filter, ['cn', 'dn'], $limit, $offset); foreach ($result as $item) { - if (!isset($item['cn']) && !is_array($item['cn']) && !isset($item['cn'][0])) { + if (!isset($item['cn']) || !is_array($item['cn']) || !isset($item['cn'][0])) { // just in case - no issue known continue; } @@ -478,11 +442,15 @@ class Wizard extends LDAPUtility { return $groupEntries; } + /** + * @return WizardResult|false + */ public function determineGroupMemberAssoc() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapGroupFilter', - ])) { + $reqs = ['ldapHost', 'ldapGroupFilter']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } $attribute = $this->detectGroupMemberAssoc(); @@ -501,10 +469,11 @@ class Wizard extends LDAPUtility { * @throws \Exception */ public function determineGroupObjectClasses() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - ])) { + $reqs = ['ldapHost', 'ldapBase']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } $cr = $this->getConnection(); @@ -514,24 +483,25 @@ class Wizard extends LDAPUtility { $obclasses = ['groupOfNames', 'groupOfUniqueNames', 'group', 'posixGroup', '*']; $this->determineFeature($obclasses, - 'objectclass', - 'ldap_groupfilter_objectclass', - 'ldapGroupFilterObjectclass', - false); + 'objectclass', + 'ldap_groupfilter_objectclass', + 'ldapGroupFilterObjectclass', + false); return $this->result; } /** * detects the available object classes - * @return WizardResult + * @return WizardResult|false * @throws \Exception */ public function determineUserObjectClasses() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - ])) { + $reqs = ['ldapHost', 'ldapBase']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } $cr = $this->getConnection(); @@ -545,10 +515,10 @@ class Wizard extends LDAPUtility { //if filter is empty, it is probably the first time the wizard is called //then, apply suggestions. $this->determineFeature($obclasses, - 'objectclass', - 'ldap_userfilter_objectclass', - 'ldapUserFilterObjectclass', - empty($filter)); + 'objectclass', + 'ldap_userfilter_objectclass', + 'ldapUserFilterObjectclass', + empty($filter)); return $this->result; } @@ -558,10 +528,11 @@ class Wizard extends LDAPUtility { * @throws \Exception */ public function getGroupFilter() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - ])) { + $reqs = ['ldapHost', 'ldapBase']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } //make sure the use display name is set @@ -569,7 +540,7 @@ class Wizard extends LDAPUtility { if ($displayName === '') { $d = $this->configuration->getDefaults(); $this->applyFind('ldap_group_display_name', - $d['ldap_group_display_name']); + $d['ldap_group_display_name']); } $filter = $this->composeLdapFilter(self::LFILTER_GROUP_LIST); @@ -582,10 +553,11 @@ class Wizard extends LDAPUtility { * @throws \Exception */ public function getUserListFilter() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - ])) { + $reqs = ['ldapHost', 'ldapBase']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } //make sure the use display name is set @@ -604,15 +576,15 @@ class Wizard extends LDAPUtility { } /** - * @return bool|WizardResult + * @return WizardResult|false * @throws \Exception */ public function getUserLoginFilter() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - 'ldapUserFilter', - ])) { + $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } @@ -626,23 +598,19 @@ class Wizard extends LDAPUtility { } /** - * @return bool|WizardResult - * @param string $loginName + * @return WizardResult|false * @throws \Exception */ - public function testLoginName($loginName) { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - 'ldapBase', - 'ldapLoginFilter', - ])) { + public function testLoginName(string $loginName) { + $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } $cr = $this->access->connection->getConnectionResource(); - if (!$this->ldap->isResource($cr)) { - throw new \Exception('connection error'); - } if (mb_strpos($this->access->connection->ldapLoginFilter, '%uid', 0, 'UTF-8') === false) { @@ -672,16 +640,15 @@ class Wizard extends LDAPUtility { $this->checkHost(); $portSettings = $this->getPortSettingsToTry(); - if (!is_array($portSettings)) { - throw new \Exception(print_r($portSettings, true)); - } - //proceed from the best configuration and return on first success foreach ($portSettings as $setting) { $p = $setting['port']; $t = $setting['tls']; - \OCP\Util::writeLog('user_ldap', 'Wiz: trying port '. $p . ', TLS '. $t, ILogger::DEBUG); - //connectAndBind may throw Exception, it needs to be catched by the + $this->logger->debug( + 'Wiz: trying port ' . $p . ', TLS ' . $t, + ['app' => 'user_ldap'] + ); + //connectAndBind may throw Exception, it needs to be caught by the //callee of this method try { @@ -699,11 +666,14 @@ class Wizard extends LDAPUtility { if ($settingsFound === true) { $config = [ - 'ldapPort' => $p, - 'ldapTLS' => (int)$t + 'ldapPort' => (string)$p, + 'ldapTLS' => (string)$t, ]; $this->configuration->setConfiguration($config); - \OCP\Util::writeLog('user_ldap', 'Wiz: detected Port ' . $p, ILogger::DEBUG); + $this->logger->debug( + 'Wiz: detected Port ' . $p, + ['app' => 'user_ldap'] + ); $this->result->addChange('ldap_port', $p); return $this->result; } @@ -718,9 +688,11 @@ class Wizard extends LDAPUtility { * @return WizardResult|false WizardResult on success, false otherwise */ public function guessBaseDN() { - if (!$this->checkRequirements(['ldapHost', - 'ldapPort', - ])) { + $reqs = ['ldapHost']; + if (!$this->configuration->usesLdapi()) { + $reqs[] = 'ldapPort'; + } + if (!$this->checkRequirements($reqs)) { return false; } @@ -738,7 +710,7 @@ class Wizard extends LDAPUtility { //this did not help :( //Let's see whether we can parse the Host URL and convert the domain to //a base DN - $helper = new Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $helper = Server::get(Helper::class); $domain = $helper->getDomainFromURL($this->configuration->ldapHost); if (!$domain) { return false; @@ -764,7 +736,7 @@ class Wizard extends LDAPUtility { * @param string $value the (detected) value * */ - private function applyFind($key, $value) { + private function applyFind(string $key, string $value): void { $this->result->addChange($key, $value); $this->configuration->setConfiguration([$key => $value]); } @@ -774,23 +746,23 @@ class Wizard extends LDAPUtility { * field. In this case the port will be stripped off, but also stored as * setting. */ - private function checkHost() { + private function checkHost(): void { $host = $this->configuration->ldapHost; $hostInfo = parse_url($host); //removes Port from Host if (is_array($hostInfo) && isset($hostInfo['port'])) { $port = $hostInfo['port']; - $host = str_replace(':'.$port, '', $host); + $host = str_replace(':' . $port, '', $host); $this->applyFind('ldap_host', $host); - $this->applyFind('ldap_port', $port); + $this->applyFind('ldap_port', (string)$port); } } /** * tries to detect the group member association attribute which is * one of 'uniqueMember', 'memberUid', 'member', 'gidNumber' - * @return string|false, string with the attribute name, false on error + * @return string|false string with the attribute name, false on error * @throws \Exception */ private function detectGroupMemberAssoc() { @@ -808,8 +780,9 @@ class Wizard extends LDAPUtility { if (!$this->ldap->isResource($rr)) { return false; } + /** @var \LDAP\Result $rr */ $er = $this->ldap->firstEntry($cr, $rr); - while (is_resource($er)) { + while ($this->ldap->isResource($er)) { $this->ldap->getDN($cr, $er); $attrs = $this->ldap->getAttributes($cr, $er); $result = []; @@ -836,7 +809,7 @@ class Wizard extends LDAPUtility { * @return bool true on success, false otherwise * @throws \Exception */ - private function testBaseDN($base) { + private function testBaseDN(string $base): bool { $cr = $this->getConnection(); if (!$cr) { throw new \Exception('Could not connect to LDAP'); @@ -848,10 +821,13 @@ class Wizard extends LDAPUtility { if (!$this->ldap->isResource($rr)) { $errorNo = $this->ldap->errno($cr); $errorMsg = $this->ldap->error($cr); - \OCP\Util::writeLog('user_ldap', 'Wiz: Could not search base '.$base. - ' Error '.$errorNo.': '.$errorMsg, ILogger::INFO); + $this->logger->info( + 'Wiz: Could not search base ' . $base . ' Error ' . $errorNo . ': ' . $errorMsg, + ['app' => 'user_ldap'] + ); return false; } + /** @var \LDAP\Result $rr */ $entries = $this->ldap->countEntries($cr, $rr); return ($entries !== false) && ($entries > 0); } @@ -865,7 +841,7 @@ class Wizard extends LDAPUtility { * @return bool true if it does, false otherwise * @throws \Exception */ - private function testMemberOf() { + private function testMemberOf(): bool { $cr = $this->getConnection(); if (!$cr) { throw new \Exception('Could not connect to LDAP'); @@ -879,13 +855,12 @@ class Wizard extends LDAPUtility { /** * creates an LDAP Filter from given configuration - * @param integer $filterType int, for which use case the filter shall be created - * can be any of self::LFILTER_USER_LIST, self::LFILTER_LOGIN or - * self::LFILTER_GROUP_LIST - * @return string|false string with the filter on success, false otherwise + * @param int $filterType int, for which use case the filter shall be created + * can be any of self::LFILTER_USER_LIST, self::LFILTER_LOGIN or + * self::LFILTER_GROUP_LIST * @throws \Exception */ - private function composeLdapFilter($filterType) { + private function composeLdapFilter(int $filterType): string { $filter = ''; $parts = 0; switch ($filterType) { @@ -895,7 +870,7 @@ class Wizard extends LDAPUtility { if (is_array($objcs) && count($objcs) > 0) { $filter .= '(|'; foreach ($objcs as $objc) { - $filter .= '(objectclass=' . $objc . ')'; + $filter .= '(objectclass=' . ldap_escape($objc, '', LDAP_ESCAPE_FILTER) . ')'; } $filter .= ')'; $parts++; @@ -911,20 +886,21 @@ class Wizard extends LDAPUtility { } $base = $this->configuration->ldapBase[0]; foreach ($cns as $cn) { - $rr = $this->ldap->search($cr, $base, 'cn=' . $cn, ['dn', 'primaryGroupToken']); + $rr = $this->ldap->search($cr, $base, 'cn=' . ldap_escape($cn, '', LDAP_ESCAPE_FILTER), ['dn', 'primaryGroupToken']); if (!$this->ldap->isResource($rr)) { continue; } + /** @var \LDAP\Result $rr */ $er = $this->ldap->firstEntry($cr, $rr); $attrs = $this->ldap->getAttributes($cr, $er); $dn = $this->ldap->getDN($cr, $er); if ($dn === false || $dn === '') { continue; } - $filterPart = '(memberof=' . $dn . ')'; + $filterPart = '(memberof=' . ldap_escape($dn, '', LDAP_ESCAPE_FILTER) . ')'; if (isset($attrs['primaryGroupToken'])) { $pgt = $attrs['primaryGroupToken'][0]; - $primaryFilterPart = '(primaryGroupID=' . $pgt .')'; + $primaryFilterPart = '(primaryGroupID=' . ldap_escape($pgt, '', LDAP_ESCAPE_FILTER) . ')'; $filterPart = '(|' . $filterPart . $primaryFilterPart . ')'; } $filter .= $filterPart; @@ -948,7 +924,7 @@ class Wizard extends LDAPUtility { if (is_array($objcs) && count($objcs) > 0) { $filter .= '(|'; foreach ($objcs as $objc) { - $filter .= '(objectclass=' . $objc . ')'; + $filter .= '(objectclass=' . ldap_escape($objc, '', LDAP_ESCAPE_FILTER) . ')'; } $filter .= ')'; $parts++; @@ -958,7 +934,7 @@ class Wizard extends LDAPUtility { if (is_array($cns) && count($cns) > 0) { $filter .= '(|'; foreach ($cns as $cn) { - $filter .= '(cn=' . $cn . ')'; + $filter .= '(cn=' . ldap_escape($cn, '', LDAP_ESCAPE_FILTER) . ')'; } $filter .= ')'; } @@ -974,6 +950,9 @@ class Wizard extends LDAPUtility { $loginpart = '=%uid'; $filterUsername = ''; $userAttributes = $this->getUserAttributes(); + if ($userAttributes === false) { + throw new \Exception('Failed to get user attributes'); + } $userAttributes = array_change_key_case(array_flip($userAttributes)); $parts = 0; @@ -1021,11 +1000,14 @@ class Wizard extends LDAPUtility { $filterLogin .= ')'; } - $filter = '(&'.$ulf.$filterLogin.')'; + $filter = '(&' . $ulf . $filterLogin . ')'; break; } - \OCP\Util::writeLog('user_ldap', 'Wiz: Final filter '.$filter, ILogger::DEBUG); + $this->logger->debug( + 'Wiz: Final filter ' . $filter, + ['app' => 'user_ldap'] + ); return $filter; } @@ -1035,21 +1017,24 @@ class Wizard extends LDAPUtility { * * @param int $port the port to connect with * @param bool $tls whether startTLS is to be used - * @return bool * @throws \Exception */ - private function connectAndBind($port, $tls) { + private function connectAndBind(int $port, bool $tls): bool { //connect, does not really trigger any server communication $host = $this->configuration->ldapHost; - $hostInfo = parse_url($host); - if (!$hostInfo) { + $hostInfo = parse_url((string)$host); + if (!is_string($host) || !$hostInfo) { throw new \Exception(self::$l->t('Invalid Host')); } - \OCP\Util::writeLog('user_ldap', 'Wiz: Attempting to connect ', ILogger::DEBUG); - $cr = $this->ldap->connect($host, $port); - if (!is_resource($cr)) { + $this->logger->debug( + 'Wiz: Attempting to connect', + ['app' => 'user_ldap'] + ); + $cr = $this->ldap->connect($host, (string)$port); + if (!$this->ldap->isResource($cr)) { throw new \Exception(self::$l->t('Invalid Host')); } + /** @var \LDAP\Connection $cr */ //set LDAP options $this->ldap->setOption($cr, LDAP_OPT_PROTOCOL_VERSION, 3); @@ -1064,22 +1049,27 @@ class Wizard extends LDAPUtility { } } - \OCP\Util::writeLog('user_ldap', 'Wiz: Attemping to Bind ', ILogger::DEBUG); + $this->logger->debug( + 'Wiz: Attempting to Bind', + ['app' => 'user_ldap'] + ); //interesting part: do the bind! $login = $this->ldap->bind($cr, $this->configuration->ldapAgentName, $this->configuration->ldapAgentPassword ); $errNo = $this->ldap->errno($cr); - $error = ldap_error($cr); + $error = $this->ldap->error($cr); $this->ldap->unbind($cr); } catch (ServerNotAvailableException $e) { return false; } if ($login === true) { - $this->ldap->unbind($cr); - \OCP\Util::writeLog('user_ldap', 'Wiz: Bind successful to Port '. $port . ' TLS ' . (int)$tls, ILogger::DEBUG); + $this->logger->debug( + 'Wiz: Bind successful to Port ' . $port . ' TLS ' . (int)$tls, + ['app' => 'user_ldap'] + ); return true; } @@ -1093,9 +1083,9 @@ class Wizard extends LDAPUtility { /** * checks whether a valid combination of agent and password has been * provided (either two values or nothing for anonymous connect) - * @return bool, true if everything is fine, false otherwise + * @return bool true if everything is fine, false otherwise */ - private function checkAgentRequirements() { + private function checkAgentRequirements(): bool { $agent = $this->configuration->ldapAgentName; $pwd = $this->configuration->ldapAgentPassword; @@ -1105,11 +1095,7 @@ class Wizard extends LDAPUtility { ; } - /** - * @param array $reqs - * @return bool - */ - private function checkRequirements($reqs) { + private function checkRequirements(array $reqs): bool { $this->checkAgentRequirements(); foreach ($reqs as $option) { $value = $this->configuration->$option; @@ -1126,12 +1112,12 @@ class Wizard extends LDAPUtility { * @param string[] $filters array, the filters that shall be used in the search * @param string $attr the attribute of which a list of values shall be returned * @param int $dnReadLimit the amount of how many DNs should be analyzed. - * The lower, the faster + * The lower, the faster * @param string $maxF string. if not null, this variable will have the filter that - * yields most result entries + * yields most result entries * @return array|false an array with the values on success, false otherwise */ - public function cumulativeSearchOnAttribute($filters, $attr, $dnReadLimit = 3, &$maxF = null) { + public function cumulativeSearchOnAttribute(array $filters, string $attr, int $dnReadLimit = 3, ?string &$maxF = null) { $dnRead = []; $foundItems = []; $maxEntries = 0; @@ -1144,6 +1130,7 @@ class Wizard extends LDAPUtility { if (!$this->ldap->isResource($cr)) { return false; } + /** @var \LDAP\Connection $cr */ $lastFilter = null; if (isset($filters[count($filters) - 1])) { $lastFilter = $filters[count($filters) - 1]; @@ -1158,6 +1145,7 @@ class Wizard extends LDAPUtility { if (!$this->ldap->isResource($rr)) { continue; } + /** @var \LDAP\Result $rr */ $entries = $this->ldap->countEntries($cr, $rr); $getEntryFunc = 'firstEntry'; if (($entries !== false) && ($entries > 0)) { @@ -1175,20 +1163,19 @@ class Wizard extends LDAPUtility { $rr = $entry; //will be expected by nextEntry next round $attributes = $this->ldap->getAttributes($cr, $entry); $dn = $this->ldap->getDN($cr, $entry); - if ($dn === false || in_array($dn, $dnRead)) { + if ($attributes === false || $dn === false || in_array($dn, $dnRead)) { continue; } $newItems = []; - $state = $this->getAttributeValuesFromEntry($attributes, - $attr, - $newItems); + $state = $this->getAttributeValuesFromEntry( + $attributes, + $attr, + $newItems + ); $dnReadCount++; $foundItems = array_merge($foundItems, $newItems); - $this->resultCache[$dn][$attr] = $newItems; $dnRead[] = $dn; - } while (($state === self::LRESULT_PROCESSED_SKIP - || $this->ldap->isResource($entry)) - && ($dnReadLimit === 0 || $dnReadCount < $dnReadLimit)); + } while ($dnReadLimit === 0 || $dnReadCount < $dnReadLimit); } } @@ -1201,20 +1188,20 @@ class Wizard extends LDAPUtility { * @param string $attr the attribute to look for * @param string $dbkey the dbkey of the setting the feature is connected to * @param string $confkey the confkey counterpart for the $dbkey as used in the - * Configuration class + * Configuration class * @param bool $po whether the objectClass with most result entries - * shall be pre-selected via the result - * @return array|false list of found items. + * shall be pre-selected via the result + * @return array list of found items. * @throws \Exception */ - private function determineFeature($objectclasses, $attr, $dbkey, $confkey, $po = false) { + private function determineFeature(array $objectclasses, string $attr, string $dbkey, string $confkey, bool $po = false): array { $cr = $this->getConnection(); if (!$cr) { throw new \Exception('Could not connect to LDAP'); } $p = 'objectclass='; foreach ($objectclasses as $key => $value) { - $objectclasses[$key] = $p.$value; + $objectclasses[$key] = $p . $value; } $maxEntryObjC = ''; @@ -1222,9 +1209,9 @@ class Wizard extends LDAPUtility { //When looking for objectclasses, testing few entries is sufficient, $dig = 3; - $availableFeatures = - $this->cumulativeSearchOnAttribute($objectclasses, $attr, - $dig, $maxEntryObjC); + $availableFeatures + = $this->cumulativeSearchOnAttribute($objectclasses, $attr, + $dig, $maxEntryObjC); if (is_array($availableFeatures) && count($availableFeatures) > 0) { natcasesort($availableFeatures); @@ -1251,21 +1238,20 @@ class Wizard extends LDAPUtility { /** * appends a list of values fr - * @param resource $result the return value from ldap_get_attributes + * @param array $result the return value from ldap_get_attributes * @param string $attribute the attribute values to look for * @param array &$known new values will be appended here - * @return int, state on of the class constants LRESULT_PROCESSED_OK, - * LRESULT_PROCESSED_INVALID or LRESULT_PROCESSED_SKIP + * @return int state on of the class constants LRESULT_PROCESSED_OK, + * LRESULT_PROCESSED_INVALID or LRESULT_PROCESSED_SKIP */ - private function getAttributeValuesFromEntry($result, $attribute, &$known) { - if (!is_array($result) - || !isset($result['count']) + private function getAttributeValuesFromEntry(array $result, string $attribute, array &$known): int { + if (!isset($result['count']) || !$result['count'] > 0) { return self::LRESULT_PROCESSED_INVALID; } // strtolower on all keys for proper comparison - $result = \OCP\Util::mb_array_change_key_case($result); + $result = Util::mb_array_change_key_case($result); $attribute = strtolower($attribute); if (isset($result[$attribute])) { foreach ($result[$attribute] as $key => $val) { @@ -1283,9 +1269,9 @@ class Wizard extends LDAPUtility { } /** - * @return bool|mixed + * @return \LDAP\Connection|false a link resource on success, otherwise false */ - private function getConnection() { + private function getConnection(): \LDAP\Connection|false { if (!is_null($this->cr)) { return $this->cr; } @@ -1295,18 +1281,22 @@ class Wizard extends LDAPUtility { $this->configuration->ldapPort ); + if ($cr === false) { + return false; + } + $this->ldap->setOption($cr, LDAP_OPT_PROTOCOL_VERSION, 3); $this->ldap->setOption($cr, LDAP_OPT_REFERRALS, 0); $this->ldap->setOption($cr, LDAP_OPT_NETWORK_TIMEOUT, self::LDAP_NW_TIMEOUT); - if ($this->configuration->ldapTLS === 1) { + if ($this->configuration->ldapTLS) { $this->ldap->startTls($cr); } $lo = @$this->ldap->bind($cr, - $this->configuration->ldapAgentName, - $this->configuration->ldapAgentPassword); + $this->configuration->ldapAgentName, + $this->configuration->ldapAgentPassword); if ($lo === true) { - $this->$cr = $cr; + $this->cr = $cr; return $cr; } @@ -1314,9 +1304,9 @@ class Wizard extends LDAPUtility { } /** - * @return array + * @return array<array{port:int,tls:bool}> */ - private function getDefaultLdapPortSettings() { + private function getDefaultLdapPortSettings(): array { static $settings = [ ['port' => 7636, 'tls' => false], ['port' => 636, 'tls' => false], @@ -1329,9 +1319,9 @@ class Wizard extends LDAPUtility { } /** - * @return array + * @return array<array{port:int,tls:bool}> */ - private function getPortSettingsToTry() { + private function getPortSettingsToTry(): array { //389 ← LDAP / Unencrypted or StartTLS //636 ← LDAPS / SSL //7xxx ← UCS. need to be checked first, because both ports may be open @@ -1348,11 +1338,13 @@ class Wizard extends LDAPUtility { $portSettings[] = ['port' => $port, 'tls' => true]; } $portSettings[] = ['port' => $port, 'tls' => false]; + } elseif ($this->configuration->usesLdapi()) { + $portSettings[] = ['port' => 0, 'tls' => false]; } //default ports $portSettings = array_merge($portSettings, - $this->getDefaultLdapPortSettings()); + $this->getDefaultLdapPortSettings()); return $portSettings; } diff --git a/apps/user_ldap/lib/WizardResult.php b/apps/user_ldap/lib/WizardResult.php index 3c8f638736e..d6fd67d4204 100644 --- a/apps/user_ldap/lib/WizardResult.php +++ b/apps/user_ldap/lib/WizardResult.php @@ -1,32 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP; class WizardResult { @@ -42,7 +20,7 @@ class WizardResult { $this->changes[$key] = $value; } - + public function markChange() { $this->markedChange = true; } diff --git a/apps/user_ldap/openapi.json b/apps/user_ldap/openapi.json new file mode 100644 index 00000000000..0881d2e7d51 --- /dev/null +++ b/apps/user_ldap/openapi.json @@ -0,0 +1,477 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "user_ldap", + "version": "0.0.1", + "description": "This application enables administrators to connect Nextcloud to an LDAP-based user directory.", + "license": { + "name": "agpl" + } + }, + "components": { + "securitySchemes": { + "basic_auth": { + "type": "http", + "scheme": "basic" + }, + "bearer_auth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "OCSMeta": { + "type": "object", + "required": [ + "status", + "statuscode" + ], + "properties": { + "status": { + "type": "string" + }, + "statuscode": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "totalitems": { + "type": "string" + }, + "itemsperpage": { + "type": "string" + } + } + } + } + }, + "paths": { + "/ocs/v2.php/apps/user_ldap/api/v1/config": { + "post": { + "operationId": "configapi-create", + "summary": "Create a new (empty) configuration and return the resulting prefix", + "description": "This endpoint requires admin access", + "tags": [ + "configapi" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Config created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "configID" + ], + "properties": { + "configID": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/user_ldap/api/v1/config/{configID}": { + "get": { + "operationId": "configapi-show", + "summary": "Get a configuration", + "description": "Output can look like this: <?xml version=\"1.0\"?> <ocs> <meta> <status>ok</status> <statuscode>200</statuscode> <message>OK</message> </meta> <data> <ldapHost>ldaps://my.ldap.server</ldapHost> <ldapPort>7770</ldapPort> <ldapBackupHost></ldapBackupHost> <ldapBackupPort></ldapBackupPort> <ldapBase>ou=small,dc=my,dc=ldap,dc=server</ldapBase> <ldapBaseUsers>ou=users,ou=small,dc=my,dc=ldap,dc=server</ldapBaseUsers> <ldapBaseGroups>ou=small,dc=my,dc=ldap,dc=server</ldapBaseGroups> <ldapAgentName>cn=root,dc=my,dc=ldap,dc=server</ldapAgentName> <ldapAgentPassword>clearTextWithShowPassword=1</ldapAgentPassword> <ldapTLS>1</ldapTLS> <turnOffCertCheck>0</turnOffCertCheck> <ldapIgnoreNamingRules/> <ldapUserDisplayName>displayname</ldapUserDisplayName> <ldapUserDisplayName2>uid</ldapUserDisplayName2> <ldapUserFilterObjectclass>inetOrgPerson</ldapUserFilterObjectclass> <ldapUserFilterGroups></ldapUserFilterGroups> <ldapUserFilter>(&(objectclass=nextcloudUser)(nextcloudEnabled=TRUE))</ldapUserFilter> <ldapUserFilterMode>1</ldapUserFilterMode> <ldapGroupFilter>(&(|(objectclass=nextcloudGroup)))</ldapGroupFilter> <ldapGroupFilterMode>0</ldapGroupFilterMode> <ldapGroupFilterObjectclass>nextcloudGroup</ldapGroupFilterObjectclass> <ldapGroupFilterGroups></ldapGroupFilterGroups> <ldapGroupDisplayName>cn</ldapGroupDisplayName> <ldapGroupMemberAssocAttr>memberUid</ldapGroupMemberAssocAttr> <ldapLoginFilter>(&(|(objectclass=inetOrgPerson))(uid=%uid))</ldapLoginFilter> <ldapLoginFilterMode>0</ldapLoginFilterMode> <ldapLoginFilterEmail>0</ldapLoginFilterEmail> <ldapLoginFilterUsername>1</ldapLoginFilterUsername> <ldapLoginFilterAttributes></ldapLoginFilterAttributes> <ldapQuotaAttribute></ldapQuotaAttribute> <ldapQuotaDefault></ldapQuotaDefault> <ldapEmailAttribute>mail</ldapEmailAttribute> <ldapCacheTTL>20</ldapCacheTTL> <ldapUuidUserAttribute>auto</ldapUuidUserAttribute> <ldapUuidGroupAttribute>auto</ldapUuidGroupAttribute> <ldapOverrideMainServer></ldapOverrideMainServer> <ldapConfigurationActive>1</ldapConfigurationActive> <ldapAttributesForUserSearch>uid;sn;givenname</ldapAttributesForUserSearch> <ldapAttributesForGroupSearch></ldapAttributesForGroupSearch> <ldapExperiencedAdmin>0</ldapExperiencedAdmin> <homeFolderNamingRule></homeFolderNamingRule> <hasMemberOfFilterSupport></hasMemberOfFilterSupport> <useMemberOfToDetectMembership>1</useMemberOfToDetectMembership> <ldapExpertUsernameAttr>uid</ldapExpertUsernameAttr> <ldapExpertUUIDUserAttr>uid</ldapExpertUUIDUserAttr> <ldapExpertUUIDGroupAttr></ldapExpertUUIDGroupAttr> <lastJpegPhotoLookup>0</lastJpegPhotoLookup> <ldapNestedGroups>0</ldapNestedGroups> <ldapPagingSize>500</ldapPagingSize> <turnOnPasswordChange>1</turnOnPasswordChange> <ldapDynamicGroupMemberURL></ldapDynamicGroupMemberURL> </data> </ocs>\nThis endpoint requires admin access", + "tags": [ + "configapi" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "configID", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "showPassword", + "in": "query", + "description": "Whether to show the password", + "schema": { + "type": "integer", + "default": 0, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Config returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Config not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "configapi-modify", + "summary": "Modify a configuration", + "description": "This endpoint requires admin access", + "tags": [ + "configapi" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "configData" + ], + "properties": { + "configData": { + "type": "object", + "description": "New config", + "additionalProperties": { + "type": "object" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "configID", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Config returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "400": { + "description": "Modifying config is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "404": { + "description": "Config not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "configapi-delete", + "summary": "Delete a LDAP configuration", + "description": "This endpoint requires admin access", + "tags": [ + "configapi" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "configID", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Config deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "404": { + "description": "Config not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + } + }, + "tags": [] +} diff --git a/apps/user_ldap/openapi.json.license b/apps/user_ldap/openapi.json.license new file mode 100644 index 00000000000..83559daa9dc --- /dev/null +++ b/apps/user_ldap/openapi.json.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +SPDX-License-Identifier: AGPL-3.0-or-later
\ No newline at end of file diff --git a/apps/user_ldap/templates/part.settingcontrols.php b/apps/user_ldap/templates/part.settingcontrols.php index a418885f47e..4105fa751b9 100644 --- a/apps/user_ldap/templates/part.settingcontrols.php +++ b/apps/user_ldap/templates/part.settingcontrols.php @@ -1,10 +1,18 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2013-2017 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +?> <div class="ldapSettingControls"> <button type="button" class="ldap_action_test_connection" name="ldap_action_test_connection"> <?php p($l->t('Test Configuration'));?> </button> <a href="<?php p(link_to_docs('admin-ldap')); ?>" target="_blank" rel="noreferrer noopener"> - <img src="<?php print_unescaped(image_path('', 'actions/info.svg')); ?>" + <img src="<?php print_unescaped(image_path('core', 'actions/info.svg')); ?>" style="height:1.75ex" /> <?php p($l->t('Help'));?> </a> diff --git a/apps/user_ldap/templates/part.wizard-groupfilter.php b/apps/user_ldap/templates/part.wizard-groupfilter.php index a059b466812..bab08d85da8 100644 --- a/apps/user_ldap/templates/part.wizard-groupfilter.php +++ b/apps/user_ldap/templates/part.wizard-groupfilter.php @@ -1,3 +1,11 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2013-2015 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +?> <fieldset id="ldapWizard4"> <div> <p> @@ -27,13 +35,21 @@ <p class="ldapManyGroupsSupport hidden"> <label></label> <select class="ldapGroupList ldapGroupListAvailable" multiple="multiple" + aria-describedby="ldapGroupListAvailable_instructions" title="<?php p($l->t('Available groups'));?>"></select> + <p class="hidden-visually" id="ldapGroupListAvailable_instructions"> + <?php p($l->t('Available groups'));?> + </p> <span class="buttonSpan"> <button class="ldapGroupListSelect" type="button">></button><br/> <button class="ldapGroupListDeselect" type="button"><</button> </span> <select class="ldapGroupList ldapGroupListSelected" multiple="multiple" + aria-describedby="ldapGroupListSelected_instructions" title="<?php p($l->t('Selected groups'));?>"></select> + <p class="hidden-visually" id="ldapGroupListSelected_instructions"> + <?php p($l->t('Selected groups'));?> + </p> </p> <p> <label><a id='toggleRawGroupFilter' class='ldapToggle'>↓ <?php p($l->t('Edit LDAP Query'));?></a></label> @@ -45,8 +61,13 @@ <p id="rawGroupFilterContainer" class="invisible"> <textarea type="text" id="ldap_group_filter" name="ldap_group_filter" placeholder="<?php p($l->t('Edit LDAP Query'));?>" + aria-describedby="rawGroupFilterContainer_instructions" title="<?php p($l->t('The filter specifies which LDAP groups shall have access to the %s instance.', [$theme->getName()]));?>"> </textarea> + <p class="hidden-visually" id="rawGroupFilterContainer_instructions"> + <?php p($l->t('The filter specifies which LDAP groups shall have access to the %s instance.', [$theme->getName()]));?> + </p> + </p> <p> <div class="ldapWizardInfo invisible"> </div> diff --git a/apps/user_ldap/templates/part.wizard-loginfilter.php b/apps/user_ldap/templates/part.wizard-loginfilter.php index c7cbabb7aba..541a5c06c8c 100644 --- a/apps/user_ldap/templates/part.wizard-loginfilter.php +++ b/apps/user_ldap/templates/part.wizard-loginfilter.php @@ -1,3 +1,11 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2013-2017 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +?> <fieldset id="ldapWizard3"> <div> <p> @@ -5,21 +13,29 @@ </p> <p> <label for="ldap_loginfilter_username"> - <?php p($l->t('LDAP / AD Username:'));?> + <?php p($l->t('LDAP/AD Username:'));?> </label> <input type="checkbox" id="ldap_loginfilter_username" - title="<?php p($l->t('Allows login against the LDAP / AD username, which is either "uid" or "sAMAccountName" and will be detected.'));?>" + aria-describedby="ldap_loginfilter_username_instructions" + title="<?php p($l->t('Allows login against the LDAP/AD username, which is either "uid" or "sAMAccountName" and will be detected.'));?>" name="ldap_loginfilter_username" value="1" /> + <p class="hidden-visually" id="ldap_loginfilter_username_instructions"> + <?php p($l->t('Allows login against the LDAP/AD username, which is either "uid" or "sAMAccountName" and will be detected.'));?> + </p> </p> <p> <label for="ldap_loginfilter_email"> - <?php p($l->t('LDAP / AD Email Address:'));?> + <?php p($l->t('LDAP/AD Email Address:'));?> </label> <input type="checkbox" id="ldap_loginfilter_email" title="<?php p($l->t('Allows login against an email attribute. "mail" and "mailPrimaryAddress" allowed.'));?>" + aria-describedby="ldap_loginfilter_email_instructions" name="ldap_loginfilter_email" value="1" /> + <p class="hidden-visually" id="ldap_loginfilter_email_instructions"> + <?php p($l->t('Allows login against an email attribute. "mail" and "mailPrimaryAddress" allowed.'));?> + </p> </p> <p> <label for="ldap_loginfilter_attributes"> @@ -41,8 +57,12 @@ <textarea type="text" id="ldap_login_filter" name="ldap_login_filter" class="ldapFilterInputElement" placeholder="<?php p($l->t('Edit LDAP Query'));?>" + aria-describedby="ldap_login_filter_instructions" title="<?php p($l->t('Defines the filter to apply, when login is attempted. "%%uid" replaces the username in the login action. Example: "uid=%%uid"'));?>"> </textarea> + <p class="hidden-visually" id="ldap_login_filter_instructions"> + <?php p($l->t('Defines the filter to apply, when login is attempted. "%%uid" replaces the username in the login action. Example: "uid=%%uid"'));?> + </p> </p> <p> <div class="ldapWizardInfo invisible"> </div> @@ -51,7 +71,11 @@ <input type="text" id="ldap_test_loginname" name="ldap_test_loginname" placeholder="<?php p($l->t('Test Loginname'));?>" class="ldapVerifyInput" - title="Attempts to receive a DN for the given loginname and the current login filter"/> + aria-describedby="ldap_test_loginname_instructions" + title="<?php p($l->t('Attempts to receive a DN for the given loginname and the current login filter'));?>"/> + <p class="hidden-visually" id="ldap_test_loginname_instructions"> + <?php p($l->t('Attempts to receive a DN for the given loginname and the current login filter'));?> + </p> <button class="ldapVerifyLoginName" name="ldapTestLoginSettings" type="button" disabled="disabled"> <?php p($l->t('Verify settings'));?> </button> diff --git a/apps/user_ldap/templates/part.wizard-server.php b/apps/user_ldap/templates/part.wizard-server.php index ff8630c62cd..9fb67342247 100644 --- a/apps/user_ldap/templates/part.wizard-server.php +++ b/apps/user_ldap/templates/part.wizard-server.php @@ -1,27 +1,47 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2013-2017 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +?> <fieldset id="ldapWizard1"> <p> <select id="ldap_serverconfig_chooser" name="ldap_serverconfig_chooser"> - <?php - $i = 1; - $sel = ' selected'; - foreach ($_['serverConfigurationPrefixes'] as $prefix) { - ?> +<?php +$i = 1; +$sel = ' selected'; +foreach ($_['serverConfigurationPrefixes'] as $prefix) { + ?> <option value="<?php p($prefix); ?>"<?php p($sel); - $sel = ''; ?>><?php p($l->t('%s. Server:', [$i++])); ?> <?php p(' '.$_['serverConfigurationHosts'][$prefix]); ?></option> - <?php - } - ?> + $sel = ''; ?>><?php p($l->t('%s. Server:', [$i++])); ?> <?php p(' ' . $_['serverConfigurationHosts'][$prefix]); ?></option> +<?php +} +?> </select> <button type="button" id="ldap_action_add_configuration" + aria-describedby="ldap_action_add_configuration_instructions" name="ldap_action_add_configuration" class="icon-add icon-default-style" title="<?php p($l->t('Add a new configuration'));?>"> </button> + <p class="hidden-visually" id="ldap_action_add_configuration_instructions"> + <?php p($l->t('Add a new configuration'));?> + </p> <button type="button" id="ldap_action_copy_configuration" name="ldap_action_copy_configuration" + aria-describedby="ldap_action_copy_configuration_instructions" class="ldapIconCopy icon-default-style" title="<?php p($l->t('Copy current configuration into new directory binding'));?>"> </button> + <p class="hidden-visually" id="ldap_action_copy_configuration_instructions"> + <?php p($l->t('Copy current configuration into new directory binding'));?> + </p> <button type="button" id="ldap_action_delete_configuration" + aria-describedby="ldap_action_delete_configuration_instructions" name="ldap_action_delete_configuration" class="icon-delete icon-default-style" title="<?php p($l->t('Delete the current configuration'));?>"> </button> + <p class="hidden-visually" id="ldap_action_delete_configuration_instructions"> + <?php p($l->t('Delete the current configuration'));?> + </p> </p> <div class="hostPortCombinator"> @@ -30,9 +50,13 @@ <div class="table"> <input type="text" class="host" id="ldap_host" name="ldap_host" + aria-describedby="ldap_host_instructions" placeholder="<?php p($l->t('Host'));?>" title="<?php p($l->t('You can omit the protocol, unless you require SSL. If so, start with ldaps://'));?>" /> + <p class="hidden-visually" id="ldap_host_instructions"> + <?php p($l->t('You can omit the protocol, unless you require SSL. If so, start with ldaps://'));?> + </p> <span class="hostPortCombinatorSpan"> <input type="number" id="ldap_port" name="ldap_port" placeholder="<?php p($l->t('Port'));?>" /> @@ -47,17 +71,25 @@ <div class="tablerow"> <input type="text" id="ldap_dn" name="ldap_dn" class="tablecell" + aria-describedby="ldap_dn_instructions" placeholder="<?php p($l->t('User DN'));?>" autocomplete="off" title="<?php p($l->t('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.'));?>" /> + <p class="hidden-visually" id="ldap_dn_instructions"> + <?php p($l->t('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.'));?> + </p> </div> <div class="tablerow"> <input type="password" id="ldap_agent_password" class="tablecell" name="ldap_agent_password" + aria-describedby="ldap_agent_password_instructions" placeholder="<?php p($l->t('Password'));?>" autocomplete="off" title="<?php p($l->t('For anonymous access, leave DN and Password empty.'));?>" /> + <p class="hidden-visually" id="ldap_agent_password_instructions"> + <?php p($l->t('For anonymous access, leave DN and Password empty.'));?> + </p> <button class="ldapSaveAgentCredentials" name="ldapSaveAgentCredentials" type="button"> <?php p($l->t('Save Credentials'));?> </button> @@ -67,9 +99,13 @@ <div class="tablerow"> <textarea id="ldap_base" name="ldap_base" class="tablecell" + aria-describedby="ldap_base_instructions" placeholder="<?php p($l->t('One Base DN per line'));?>" title="<?php p($l->t('You can specify Base DN for users and groups in the Advanced tab'));?>"> </textarea> + <p class="hidden-visually" id="ldap_base_instructions"> + <?php p($l->t('You can specify Base DN for users and groups in the Advanced tab'));?> + </p> <button class="ldapDetectBase" name="ldapDetectBase" type="button"> <?php p($l->t('Detect Base DN'));?> </button> @@ -81,8 +117,12 @@ <div class="tablerow left"> <input type="checkbox" id="ldap_experienced_admin" value="1" name="ldap_experienced_admin" class="tablecell" + aria-describedby="ldap_experienced_admin_instructions" title="<?php p($l->t('Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.'));?>" /> + <p class="hidden-visually" id="ldap_experienced_admin_instructions"> + <?php p($l->t('Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.'));?> + </p> <label for="ldap_experienced_admin" class="tablecell"> <?php p($l->t('Manually enter LDAP filters (recommended for large directories)'));?> </label> diff --git a/apps/user_ldap/templates/part.wizard-userfilter.php b/apps/user_ldap/templates/part.wizard-userfilter.php index 2b8c3adb686..ab505c65d44 100644 --- a/apps/user_ldap/templates/part.wizard-userfilter.php +++ b/apps/user_ldap/templates/part.wizard-userfilter.php @@ -1,3 +1,11 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2013-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +?> <fieldset id="ldapWizard2"> <div> <p> @@ -30,13 +38,21 @@ <p class="ldapManyGroupsSupport hidden"> <label></label> <select class="ldapGroupList ldapGroupListAvailable" multiple="multiple" + aria-describedby="ldapGroupListAvailable_instructions" title="<?php p($l->t('Available groups'));?>"></select> + <p class="hidden-visually" id="ldapGroupListAvailable_instructions"> + <?php p($l->t('Available groups'));?> + </p> <span class="buttonSpan"> <button class="ldapGroupListSelect" type="button">></button><br/> <button class="ldapGroupListDeselect" type="button"><</button> </span> <select class="ldapGroupList ldapGroupListSelected" multiple="multiple" + aria-describedby="ldapGroupListSelected_instructions" title="<?php p($l->t('Selected groups'));?>"></select> + <p class="hidden-visually" id="ldapGroupListSelected_instructions"> + <?php p($l->t('Selected groups'));?> + </p> </p> <p> <label><a id='toggleRawUserFilter' class='ldapToggle'>↓ <?php p($l->t('Edit LDAP Query'));?></a></label> @@ -49,8 +65,12 @@ <textarea type="text" id="ldap_userlist_filter" name="ldap_userlist_filter" class="ldapFilterInputElement" placeholder="<?php p($l->t('Edit LDAP Query'));?>" + aria-describedby="ldap_userlist_filter_instructions" title="<?php p($l->t('The filter specifies which LDAP users shall have access to the %s instance.', [$theme->getName()]));?>"> </textarea> + <p class="hidden-visually" id="ldap_userlist_filter_instructions"> + <?php p($l->t('The filter specifies which LDAP users shall have access to the %s instance.', [$theme->getName()]));?> + </p> </p> <p> <div class="ldapWizardInfo invisible"> </div> diff --git a/apps/user_ldap/templates/part.wizardcontrols.php b/apps/user_ldap/templates/part.wizardcontrols.php index bd84b23c76d..2c6b1f16d67 100644 --- a/apps/user_ldap/templates/part.wizardcontrols.php +++ b/apps/user_ldap/templates/part.wizardcontrols.php @@ -1,3 +1,11 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017-2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2013-2017 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +?> <div class="ldapWizardControls"> <span class="ldap_saving hidden"><?php p($l->t('Saving'));?> <img class="wizSpinner" src="<?php p(image_path('core', 'loading.gif')); ?>"/></span> <span class="ldap_config_state_indicator"></span> <span class="ldap_config_state_indicator_sign"></span> @@ -10,7 +18,7 @@ </button> <a href="<?php p(link_to_docs('admin-ldap')); ?>" target="_blank" rel="noreferrer noopener"> - <img src="<?php print_unescaped(image_path('', 'actions/info.svg')); ?>" + <img src="<?php print_unescaped(image_path('core', 'actions/info.svg')); ?>" style="height:1.75ex" /> <span class="ldap_grey"><?php p($l->t('Help'));?></span> </a> diff --git a/apps/user_ldap/templates/renewpassword.php b/apps/user_ldap/templates/renewpassword.php index dca7a459c83..3345be29c13 100644 --- a/apps/user_ldap/templates/renewpassword.php +++ b/apps/user_ldap/templates/renewpassword.php @@ -1,12 +1,16 @@ -<?php /** @var \OCP\IL10N $l */ ?> <?php -script('user_ldap', [ - 'renewPassword', -]); + +/** + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +/** @var \OCP\IL10N $l */ + +\OCP\Util::addScript('user_ldap', 'renewPassword', 'core'); style('user_ldap', 'renewPassword'); ?> -<form method="post" name="renewpassword" id="renewpassword" action="<?php p(\OC::$server->getURLGenerator()->linkToRoute('user_ldap.renewPassword.tryRenewPassword')); ?>"> +<form method="post" name="renewpassword" id="renewpassword" action="<?php p(\OCP\Server::get(\OCP\IURLGenerator::class)->linkToRoute('user_ldap.renewPassword.tryRenewPassword')); ?>"> <fieldset> <div class="warning title"> <?php p($l->t('Please renew your password.')); ?><br> @@ -32,7 +36,7 @@ style('user_ldap', 'renewPassword'); <p class="grouptop"> <input type="password" id="oldPassword" name="oldPassword" placeholder="<?php echo $l->t('Current password');?>" - autofocus autocomplete="off" autocapitalize="off" autocorrect="off" required/> + autofocus autocomplete="off" autocapitalize="off" spellcheck="false" required/> <label for="oldPassword" class="infield"><?php p($l->t('Current password')); ?></label> </p> @@ -41,10 +45,10 @@ style('user_ldap', 'renewPassword'); <label id="newPassword-label" for="newPassword" class="infield"><?php p($l->t('New password')); ?></label> <input type="password" id="newPassword" name="newPassword" placeholder="<?php echo $l->t('New password');?>" - data-typetoggle="#personal-show" autofocus autocomplete="off" autocapitalize="off" autocorrect="off" required/> + data-typetoggle="#personal-show" autofocus autocomplete="off" autocapitalize="off" spellcheck="false" required/> </p> - - <input type="submit" id="submit" class="login primary icon-confirm-white" title="" value="<?php p($l->t('Renew password')); ?>"/> + + <input type="submit" id="submit" class="login primary icon-confirm-white" value="<?php p($l->t('Renew password')); ?>"/> <?php if (!empty($_['invalidpassword'])) { ?> <p class="warning"> diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index 32dfdd12abe..9117a9f533c 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -1,10 +1,15 @@ <?php -vendor_script('user_ldap', 'ui-multiselect/src/jquery.multiselect'); +/** + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2011-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ -vendor_style('user_ldap', 'ui-multiselect/jquery.multiselect'); +style('user_ldap', 'vendor/ui-multiselect/jquery.multiselect'); script('user_ldap', [ + 'vendor/ui-multiselect/src/jquery.multiselect', 'wizard/controller', 'wizard/configModel', 'wizard/view', @@ -55,7 +60,7 @@ style('user_ldap', 'settings'); ?> <form id="ldap" class="section" action="#" method="post"> - <h2><?php p($l->t('LDAP / AD integration')); ?></h2> + <h2><?php p($l->t('LDAP/AD integration')); ?></h2> <div id="ldapSettings"> <ul> @@ -68,9 +73,9 @@ style('user_ldap', 'settings'); </ul> <?php if (!function_exists('ldap_connect')) { - print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>'); + print_unescaped('<p class="ldapwarning">' . $l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.') . '</p>'); } - ?> +?> <?php require_once __DIR__ . '/part.wizard-server.php'; ?> <?php require_once __DIR__ . '/part.wizard-userfilter.php'; ?> <?php require_once __DIR__ . '/part.wizard-loginfilter.php'; ?> @@ -79,54 +84,69 @@ style('user_ldap', 'settings'); <div id="ldapAdvancedAccordion"> <h3><?php p($l->t('Connection Settings'));?></h3> <div> - <p><label for="ldap_configuration_active"><?php p($l->t('Configuration Active'));?></label><input type="checkbox" id="ldap_configuration_active" name="ldap_configuration_active" value="1" data-default="<?php p($_['ldap_configuration_active_default']); ?>" title="<?php p($l->t('When unchecked, this configuration will be skipped.'));?>" /></p> - <p><label for="ldap_backup_host"><?php p($l->t('Backup (Replica) Host'));?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php p($_['ldap_backup_host_default']); ?>" title="<?php p($l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.'));?>"></p> + <p><label for="ldap_configuration_active"><?php p($l->t('Configuration Active'));?></label><input type="checkbox" id="ldap_configuration_active" name="ldap_configuration_active" value="1" data-default="<?php p($_['ldap_configuration_active_default']); ?>" aria-describedby="ldap_configuration_active_instructions" title="<?php p($l->t('When unchecked, this configuration will be skipped.'));?>" /><p class="hidden-visually" id="ldap_configuration_active_instructions"><?php p($l->t('When unchecked, this configuration will be skipped.'));?></p></p> + <p><label for="ldap_backup_host"><?php p($l->t('Backup (Replica) Host'));?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php p($_['ldap_backup_host_default']); ?>" aria-describedby="ldap_backup_host_instructions" title="<?php p($l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.'));?>"><p class="hidden-visually" id="ldap_backup_host_instructions"><?php p($l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.'));?></p></p> <p><label for="ldap_backup_port"><?php p($l->t('Backup (Replica) Port'));?></label><input type="number" id="ldap_backup_port" name="ldap_backup_port" data-default="<?php p($_['ldap_backup_port_default']); ?>" /></p> - <p><label for="ldap_override_main_server"><?php p($l->t('Disable Main Server'));?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php p($_['ldap_override_main_server_default']); ?>" title="<?php p($l->t('Only connect to the replica server.'));?>" /></p> - <p><label for="ldap_turn_off_cert_check"><?php p($l->t('Turn off SSL certificate validation.'));?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php p($l->t('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.', [$theme->getName()]));?>" data-default="<?php p($_['ldap_turn_off_cert_check_default']); ?>" value="1"><br/></p> - <p><label for="ldap_cache_ttl"><?php p($l->t('Cache Time-To-Live'));?></label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" title="<?php p($l->t('in seconds. A change empties the cache.'));?>" data-default="<?php p($_['ldap_cache_ttl_default']); ?>" /></p> + <p><label for="ldap_override_main_server"><?php p($l->t('Disable Main Server'));?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php p($_['ldap_override_main_server_default']); ?>" aria-describedby="ldap_override_main_server_instructions" title="<?php p($l->t('Only connect to the replica server.'));?>" /><p class="hidden-visually" id="ldap_override_main_server_instructions"><?php p($l->t('Only connect to the replica server.'));?></p></p> + <p><label for="ldap_turn_off_cert_check"><?php p($l->t('Turn off SSL certificate validation.'));?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" aria-describedby="ldap_turn_off_cert_check_instructions" title="<?php p($l->t('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.', [$theme->getName()]));?>" data-default="<?php p($_['ldap_turn_off_cert_check_default']); ?>" value="1"><p class="hidden-visually" id="ldap_turn_off_cert_check_instructions"><?php p($l->t('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.', [$theme->getName()]));?></p><br/></p> + <p><label for="ldap_cache_ttl"><?php p($l->t('Cache Time-To-Live'));?></label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" aria-describedby="ldap_cache_ttl_instructions" title="<?php p($l->t('in seconds. A change empties the cache.'));?>" data-default="<?php p($_['ldap_cache_ttl_default']); ?>" /><p class="hidden-visually" id="ldap_cache_ttl_instructions"><?php p($l->t('in seconds. A change empties the cache.'));?></p></p> </div> <h3><?php p($l->t('Directory Settings'));?></h3> <div> - <p><label for="ldap_display_name"><?php p($l->t('User Display Name Field'));?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php p($_['ldap_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the user\'s display name.'));?>" /></p> - <p><label for="ldap_user_display_name_2"><?php p($l->t('2nd User Display Name Field'));?></label><input type="text" id="ldap_user_display_name_2" name="ldap_user_display_name_2" data-default="<?php p($_['ldap_user_display_name_2_default']); ?>" title="<?php p($l->t('Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.'));?>" /></p> - <p><label for="ldap_base_users"><?php p($l->t('Base User Tree'));?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php p($l->t('One User Base DN per line'));?>" data-default="<?php p($_['ldap_base_users_default']); ?>" title="<?php p($l->t('Base User Tree'));?>"></textarea></p> - <p><label for="ldap_attributes_for_user_search"><?php p($l->t('User Search Attributes'));?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_user_search_default']); ?>" title="<?php p($l->t('User Search Attributes'));?>"></textarea></p> - <p><label for="ldap_group_display_name"><?php p($l->t('Group Display Name Field'));?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php p($_['ldap_group_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.'));?>" /></p> - <p><label for="ldap_base_groups"><?php p($l->t('Base Group Tree'));?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php p($l->t('One Group Base DN per line'));?>" data-default="<?php p($_['ldap_base_groups_default']); ?>" title="<?php p($l->t('Base Group Tree'));?>"></textarea></p> - <p><label for="ldap_attributes_for_group_search"><?php p($l->t('Group Search Attributes'));?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_group_search_default']); ?>" title="<?php p($l->t('Group Search Attributes'));?>"></textarea></p> + <p><label for="ldap_display_name"><?php p($l->t('User Display Name Field'));?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php p($_['ldap_display_name_default']); ?>" aria-describedby="ldap_display_name_instructions" title="<?php p($l->t('The LDAP attribute to use to generate the user\'s display name.'));?>" /><p class="hidden-visually" id="ldap_display_name_instructions"><?php p($l->t('The LDAP attribute to use to generate the user\'s display name.'));?></p></p> + <p><label for="ldap_user_display_name_2"><?php p($l->t('2nd User Display Name Field'));?></label><input type="text" id="ldap_user_display_name_2" name="ldap_user_display_name_2" data-default="<?php p($_['ldap_user_display_name_2_default']); ?>" aria-describedby="ldap_user_display_name_2_instructions" title="<?php p($l->t('Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.'));?>" /><p class="hidden-visually" id="ldap_user_display_name_2_instructions"><?php p($l->t('Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.'));?></p></p> + <p><label for="ldap_base_users"><?php p($l->t('Base User Tree'));?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php p($l->t('One User Base DN per line'));?>" data-default="<?php p($_['ldap_base_users_default']); ?>" aria-describedby="ldap_base_users_instructions" title="<?php p($l->t('Base User Tree'));?>"></textarea><p class="hidden-visually" id="ldap_base_users_instructions"><?php p($l->t('Base User Tree'));?></p></p> + <p><label for="ldap_attributes_for_user_search"><?php p($l->t('User Search Attributes'));?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_user_search_default']); ?>" aria-describedby="ldap_attributes_for_user_search_instructions" title="<?php p($l->t('User Search Attributes'));?>"></textarea><p class="hidden-visually" id="ldap_attributes_for_user_search_instructions"><?php p($l->t('User Search Attributes'));?></p></p> + <p><label for="ldap_mark_remnants_as_disabled"><?php p($l->t('Disable users missing from LDAP'));?></label><input type="checkbox" id="ldap_mark_remnants_as_disabled" name="ldap_mark_remnants_as_disabled" value="1" data-default="<?php p($_['ldap_mark_remnants_as_disabled_default']); ?>" aria-describedby="ldap_mark_remnants_as_disabled_instructions" title="<?php p($l->t('When switched on, users imported from LDAP which are then missing will be disabled'));?>" /><p class="hidden-visually" id="ldap_mark_remnants_as_disabled_instructions"><?php p($l->t('When switched on, users imported from LDAP which are then missing will be disabled'));?></p></p> + <p><label for="ldap_group_display_name"><?php p($l->t('Group Display Name Field'));?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php p($_['ldap_group_display_name_default']); ?>" aria-describedby="ldap_group_display_name_instructions" title="<?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.'));?>" /><p class="hidden-visually" id="ldap_group_display_name_instructions"><?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.'));?></p></p> + <p><label for="ldap_base_groups"><?php p($l->t('Base Group Tree'));?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php p($l->t('One Group Base DN per line'));?>" data-default="<?php p($_['ldap_base_groups_default']); ?>" aria-describedby="ldap_base_groups_instructions" title="<?php p($l->t('Base Group Tree'));?>"></textarea><p class="hidden-visually" id="ldap_base_groups_instructions"><?php p($l->t('Base Group Tree'));?></p></p> + <p><label for="ldap_attributes_for_group_search"><?php p($l->t('Group Search Attributes'));?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_group_search_default']); ?>" aria-describedby="ldap_attributes_for_group_search_instructions" title="<?php p($l->t('Group Search Attributes'));?>"></textarea><p class="hidden-visually" id="ldap_attributes_for_group_search_instructions"><?php p($l->t('Group Search Attributes'));?></p></p> <p><label for="ldap_group_member_assoc_attribute"><?php p($l->t('Group-Member association'));?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php p($_['ldap_group_member_assoc_attribute_default']); ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'uniqueMember')) { - p(' selected'); - } ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) { - p(' selected'); - } ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) { - p(' selected'); - } ?>>member (AD)</option><option value="gidNumber"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'gidNumber')) { - p(' selected'); - } ?>>gidNumber</option><option value="zimbraMailForwardingAddress"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'zimbraMailForwardingAddress')) { - p(' selected'); - } ?>>zimbraMailForwardingAddress</option></select></p> - <p><label for="ldap_dynamic_group_member_url"><?php p($l->t('Dynamic Group Member URL'));?></label><input type="text" id="ldap_dynamic_group_member_url" name="ldap_dynamic_group_member_url" title="<?php p($l->t('The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)'));?>" data-default="<?php p($_['ldap_dynamic_group_member_url_default']); ?>" /></p> - <p><label for="ldap_nested_groups"><?php p($l->t('Nested Groups'));?></label><input type="checkbox" id="ldap_nested_groups" name="ldap_nested_groups" value="1" data-default="<?php p($_['ldap_nested_groups_default']); ?>" title="<?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)'));?>" /></p> - <p><label for="ldap_paging_size"><?php p($l->t('Paging chunksize'));?></label><input type="number" id="ldap_paging_size" name="ldap_paging_size" title="<?php p($l->t('Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)'));?>" data-default="<?php p($_['ldap_paging_size_default']); ?>" /></p> - <p><label for="ldap_turn_on_pwd_change"><?php p($l->t('Enable LDAP password changes per user'));?></label><span class="inlinetable"><span class="tablerow left"><input type="checkbox" id="ldap_turn_on_pwd_change" name="ldap_turn_on_pwd_change" value="1" data-default="<?php p($_['ldap_turn_on_pwd_change_default']); ?>" title="<?php p($l->t('Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.'));?>" /><span class="tablecell"><?php p($l->t('(New password is sent as plain text to LDAP)'));?></span></span> + p(' selected'); + } ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) { + p(' selected'); + } ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) { + p(' selected'); + } ?>>member (AD)</option><option value="gidNumber"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'gidNumber')) { + p(' selected'); + } ?>>gidNumber</option><option value="zimbraMailForwardingAddress"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'zimbraMailForwardingAddress')) { + p(' selected'); + } ?>>zimbraMailForwardingAddress</option></select></p> + <p><label for="ldap_dynamic_group_member_url"><?php p($l->t('Dynamic Group Member URL'));?></label><input type="text" id="ldap_dynamic_group_member_url" name="ldap_dynamic_group_member_url" aria-describedby="ldap_dynamic_group_member_url_instructions" title="<?php p($l->t('The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)'));?>" data-default="<?php p($_['ldap_dynamic_group_member_url_default']); ?>" /><p class="hidden-visually" id="ldap_dynamic_group_member_url_instructions"><?php p($l->t('The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)'));?></p></p> + <p><label for="ldap_nested_groups"><?php p($l->t('Nested Groups'));?></label><input type="checkbox" id="ldap_nested_groups" name="ldap_nested_groups" value="1" data-default="<?php p($_['ldap_nested_groups_default']); ?>" aria-describedby="ldap_nested_groups_instructions" title="<?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)'));?>" /><p class="hidden-visually" id="ldap_nested_groups_instructions"><?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)'));?></p></p> + <p><label for="ldap_paging_size"><?php p($l->t('Paging chunksize'));?></label><input type="number" id="ldap_paging_size" name="ldap_paging_size" aria-describedby="ldap_paging_size_instructions" title="<?php p($l->t('Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)'));?>" data-default="<?php p($_['ldap_paging_size_default']); ?>" /><p class="hidden-visually" id="ldap_paging_size_instructions"><?php p($l->t('Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)'));?></p></p> + <p><label for="ldap_turn_on_pwd_change"><?php p($l->t('Enable LDAP password changes per user'));?></label><span class="inlinetable"><span class="tablerow left"><input type="checkbox" id="ldap_turn_on_pwd_change" name="ldap_turn_on_pwd_change" value="1" data-default="<?php p($_['ldap_turn_on_pwd_change_default']); ?>" aria-describedby="ldap_turn_on_pwd_change_instructions" title="<?php p($l->t('Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.'));?>" /><p class="hidden-visually" id="ldap_turn_on_pwd_change_instructions"><?php p($l->t('Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.'));?></p><span class="tablecell"><?php p($l->t('(New password is sent as plain text to LDAP)'));?></span></span> </span><br/></p> - <p><label for="ldap_default_ppolicy_dn"><?php p($l->t('Default password policy DN'));?></label><input type="text" id="ldap_default_ppolicy_dn" name="ldap_default_ppolicy_dn" title="<?php p($l->t('The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.'));?>" data-default="<?php p($_['ldap_default_ppolicy_dn_default']); ?>" /></p> + <p><label for="ldap_default_ppolicy_dn"><?php p($l->t('Default password policy DN'));?></label><input type="text" id="ldap_default_ppolicy_dn" name="ldap_default_ppolicy_dn" aria-describedby="ldap_default_ppolicy_dn_instructions" title="<?php p($l->t('The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.'));?>" data-default="<?php p($_['ldap_default_ppolicy_dn_default']); ?>" /><p class="hidden-visually" id="ldap_default_ppolicy_dn_instructions"><?php p($l->t('The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.'));?></p></p> </div> <h3><?php p($l->t('Special Attributes'));?></h3> <div> - <p><label for="ldap_quota_attr"><?php p($l->t('Quota Field'));?></label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" data-default="<?php p($_['ldap_quota_attr_default']); ?>" title="<?php p($l->t('Leave empty for user\'s default quota. Otherwise, specify an LDAP/AD attribute.'));?>" /></p> - <p><label for="ldap_quota_def"><?php p($l->t('Quota Default'));?></label><input type="text" id="ldap_quota_def" name="ldap_quota_def" data-default="<?php p($_['ldap_quota_def_default']); ?>" title="<?php p($l->t('Override default quota for LDAP users who do not have a quota set in the Quota Field.'));?>" /></p> - <p><label for="ldap_email_attr"><?php p($l->t('Email Field'));?></label><input type="text" id="ldap_email_attr" name="ldap_email_attr" data-default="<?php p($_['ldap_email_attr_default']); ?>" title="<?php p($l->t('Set the user\'s email from their LDAP attribute. Leave it empty for default behaviour.'));?>" /></p> - <p><label for="home_folder_naming_rule"><?php p($l->t('User Home Folder Naming Rule'));?></label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" title="<?php p($l->t('Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.'));?>" data-default="<?php p($_['home_folder_naming_rule_default']); ?>" /></p> - <p><label for="ldap_ext_storage_home_attribute"> <?php p($l->t('"$home" Placeholder Field')); ?></label><input type="text" id="ldap_ext_storage_home_attribute" name="ldap_ext_storage_home_attribute" title="<?php p($l->t('$home in an external storage configuration will be replaced with the value of the specified attribute')); ?>" data-default="<?php p($_['ldap_ext_storage_home_attribute_default']); ?>"></p> + <p><label for="ldap_quota_attr"><?php p($l->t('Quota Field'));?></label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" data-default="<?php p($_['ldap_quota_attr_default']); ?>" aria-describedby="ldap_quota_attr_instructions" title="<?php p($l->t('Leave empty for user\'s default quota. Otherwise, specify an LDAP/AD attribute.'));?>" /><p class="hidden-visually" id="ldap_quota_attr_instructions"><?php p($l->t('Leave empty for user\'s default quota. Otherwise, specify an LDAP/AD attribute.'));?></p></p> + <p><label for="ldap_quota_def"><?php p($l->t('Quota Default'));?></label><input type="text" id="ldap_quota_def" name="ldap_quota_def" data-default="<?php p($_['ldap_quota_def_default']); ?>" aria-describedby="ldap_quota_def_instructions" title="<?php p($l->t('Override default quota for LDAP users who do not have a quota set in the Quota Field.'));?>" /><p class="hidden-visually" id="ldap_quota_def_instructions"><?php p($l->t('Override default quota for LDAP users who do not have a quota set in the Quota Field.'));?></p></p> + <p><label for="ldap_email_attr"><?php p($l->t('Email Field'));?></label><input type="text" id="ldap_email_attr" name="ldap_email_attr" data-default="<?php p($_['ldap_email_attr_default']); ?>" aria-describedby="ldap_email_attr_instructions" title="<?php p($l->t('Set the user\'s email from their LDAP attribute. Leave it empty for default behaviour.'));?>" /><p class="hidden-visually" id="ldap_email_attr_instructions"><?php p($l->t('Set the user\'s email from their LDAP attribute. Leave it empty for default behaviour.'));?></p></p> + <p><label for="home_folder_naming_rule"><?php p($l->t('User Home Folder Naming Rule'));?></label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" aria-describedby="home_folder_naming_rule_instructions" title="<?php p($l->t('Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.'));?>" data-default="<?php p($_['home_folder_naming_rule_default']); ?>" /><p class="hidden-visually" id="home_folder_naming_rule_instructions"><?php p($l->t('Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.'));?></p></p> + <p><label for="ldap_ext_storage_home_attribute"> <?php p($l->t('"$home" Placeholder Field')); ?></label><input type="text" id="ldap_ext_storage_home_attribute" name="ldap_ext_storage_home_attribute" aria-describedby="ldap_ext_storage_home_attribute_instructions" title="<?php p($l->t('$home in an external storage configuration will be replaced with the value of the specified attribute')); ?>" data-default="<?php p($_['ldap_ext_storage_home_attribute_default']); ?>"><p class="hidden-visually" id="ldap_ext_storage_home_attribute_instructions"><?php p($l->t('$home in an external storage configuration will be replaced with the value of the specified attribute')); ?></p></p> + </div> + <h3><?php p($l->t('User Profile Attributes'));?></h3> + <div> + <p><label for="ldap_attr_phone"> <?php p($l->t('Phone Field')); ?></label><input type="text" id="ldap_attr_phone" name="ldap_attr_phone" title="<?php p($l->t('User profile Phone will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_phone_default']); ?>"></p> + <p><label for="ldap_attr_website"> <?php p($l->t('Website Field')); ?></label><input type="text" id="ldap_attr_website" name="ldap_attr_website" title="<?php p($l->t('User profile Website will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_website_default']); ?>"></p> + <p><label for="ldap_attr_address"> <?php p($l->t('Address Field')); ?></label><input type="text" id="ldap_attr_address" name="ldap_attr_address" title="<?php p($l->t('User profile Address will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_address_default']); ?>"></p> + <p><label for="ldap_attr_twitter"> <?php p($l->t('Twitter Field')); ?></label><input type="text" id="ldap_attr_twitter" name="ldap_attr_twitter" title="<?php p($l->t('User profile Twitter will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_twitter_default']); ?>"></p> + <p><label for="ldap_attr_fediverse"> <?php p($l->t('Fediverse Field')); ?></label><input type="text" id="ldap_attr_fediverse" name="ldap_attr_fediverse" title="<?php p($l->t('User profile Fediverse will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_fediverse_default']); ?>"></p> + <p><label for="ldap_attr_organisation"> <?php p($l->t('Organisation Field')); ?></label><input type="text" id="ldap_attr_organisation" name="ldap_attr_organisation" title="<?php p($l->t('User profile Organisation will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_organisation_default']); ?>"></p> + <p><label for="ldap_attr_role"> <?php p($l->t('Role Field')); ?></label><input type="text" id="ldap_attr_role" name="ldap_attr_role" title="<?php p($l->t('User profile Role will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_role_default']); ?>"></p> + <p><label for="ldap_attr_headline"> <?php p($l->t('Headline Field')); ?></label><input type="text" id="ldap_attr_headline" name="ldap_attr_headline" title="<?php p($l->t('User profile Headline will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_headline_default']); ?>"></p> + <p><label for="ldap_attr_biography"> <?php p($l->t('Biography Field')); ?></label><input type="text" id="ldap_attr_biography" name="ldap_attr_biography" title="<?php p($l->t('User profile Biography will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_biography_default']); ?>"></p> + <p><label for="ldap_attr_birthdate"> <?php p($l->t('Birthdate Field')); ?></label><input type="text" id="ldap_attr_birthdate" name="ldap_attr_birthdate" title="<?php p($l->t('User profile Date of birth will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_birthdate_default']); ?>"></p> + <p></p><label for="ldap_attr_pronouns"> <?php p($l->t('Pronouns Field')); ?></label><input type="text" id="ldap_attr_pronouns" name="ldap_attr_pronouns" title="<?php p($l->t('User profile Pronouns will be set from the specified attribute')); ?>" data-default="<?php p($_['ldap_attr_pronouns_default']); ?>"></p> </div> </div> <?php print_unescaped($_['settingControls']); ?> </fieldset> <fieldset id="ldapSettings-2"> <p><strong><?php p($l->t('Internal Username'));?></strong></p> - <p class="ldapIndent"><?php p($l->t('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. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users.'));?></p> + <p class="ldapIndent"><?php p($l->t('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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.'));?></p> <p class="ldapIndent"><label for="ldap_expert_username_attr"><?php p($l->t('Internal Username Attribute:'));?></label><input type="text" id="ldap_expert_username_attr" name="ldap_expert_username_attr" data-default="<?php p($_['ldap_expert_username_attr_default']); ?>" /></p> <p><strong><?php p($l->t('Override UUID detection'));?></strong></p> <p class="ldapIndent"><?php p($l->t('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.'));?></p> diff --git a/apps/user_ldap/tests/.htaccess b/apps/user_ldap/tests/.htaccess index 6fde30e763a..e62a37927bf 100755 --- a/apps/user_ldap/tests/.htaccess +++ b/apps/user_ldap/tests/.htaccess @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors +# SPDX-FileCopyrightText: 2015 ownCloud, Inc. +# SPDX-License-Identifier: AGPL-3.0-only +# # Generated by ownCloud on 2015-06-18 14:16:40 # line below if for Apache 2.4 <ifModule mod_authz_core.c> diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php index a532bd6fd7a..54be29d0f86 100644 --- a/apps/user_ldap/tests/AccessTest.php +++ b/apps/user_ldap/tests/AccessTest.php @@ -1,58 +1,37 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch> - * - * @author Andreas Fischer <bantu@owncloud.com> - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author root <root@localhost.localdomain> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests; +use OC\ServerNotAvailableException; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; use OCA\User_LDAP\Exceptions\ConstraintViolationException; -use OCA\User_LDAP\FilesystemHelper; use OCA\User_LDAP\Helper; use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\LDAP; -use OCA\User_LDAP\LogWrapper; use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\HintException; +use OCP\IAppConfig; use OCP\IAvatarManager; use OCP\IConfig; use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; +use OCP\Server; use OCP\Share\IManager; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; /** @@ -63,30 +42,25 @@ use Test\TestCase; * @package OCA\User_LDAP\Tests */ class AccessTest extends TestCase { - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject */ - protected $userMapper; - /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $shareManager; - /** @var GroupMapping|\PHPUnit\Framework\MockObject\MockObject */ - protected $groupMapper; - /** @var Connection|\PHPUnit\Framework\MockObject\MockObject */ - private $connection; - /** @var LDAP|\PHPUnit\Framework\MockObject\MockObject */ - private $ldap; - /** @var Manager|\PHPUnit\Framework\MockObject\MockObject */ - private $userManager; - /** @var Helper|\PHPUnit\Framework\MockObject\MockObject */ - private $helper; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - private $config; - /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */ - private $ncUserManager; - /** @var Access */ - private $access; + protected UserMapping&MockObject $userMapper; + protected IManager&MockObject $shareManager; + protected GroupMapping&MockObject $groupMapper; + private Connection&MockObject $connection; + private LDAP&MockObject $ldap; + private Manager&MockObject $userManager; + private Helper&MockObject $helper; + private IConfig&MockObject $config; + private IUserManager&MockObject $ncUserManager; + private LoggerInterface&MockObject $logger; + private IAppConfig&MockObject $appConfig; + private IEventDispatcher&MockObject $dispatcher; + private Access $access; protected function setUp(): void { - $this->connection = $this->createMock(Connection::class); $this->ldap = $this->createMock(LDAP::class); + $this->connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->ldap]) + ->getMock(); $this->userManager = $this->createMock(Manager::class); $this->helper = $this->createMock(Helper::class); $this->config = $this->createMock(IConfig::class); @@ -94,68 +68,80 @@ class AccessTest extends TestCase { $this->groupMapper = $this->createMock(GroupMapping::class); $this->ncUserManager = $this->createMock(IUserManager::class); $this->shareManager = $this->createMock(IManager::class); + $this->logger = $this->createMock(LoggerInterface::class); + $this->appConfig = $this->createMock(IAppConfig::class); + $this->dispatcher = $this->createMock(IEventDispatcher::class); $this->access = new Access( - $this->connection, $this->ldap, + $this->connection, $this->userManager, $this->helper, $this->config, - $this->ncUserManager + $this->ncUserManager, + $this->logger, + $this->appConfig, + $this->dispatcher, ); + $this->dispatcher->expects($this->any())->method('dispatchTyped'); $this->access->setUserMapper($this->userMapper); $this->access->setGroupMapper($this->groupMapper); } private function getConnectorAndLdapMock() { + /** @var ILDAPWrapper&MockObject */ $lw = $this->createMock(ILDAPWrapper::class); + /** @var Connection&MockObject */ $connector = $this->getMockBuilder(Connection::class) - ->setConstructorArgs([$lw, null, null]) + ->setConstructorArgs([$lw, '', null]) ->getMock(); + $connector->expects($this->any()) + ->method('getConnectionResource') + ->willReturn(ldap_connect('ldap://example.com')); + /** @var Manager&MockObject */ $um = $this->getMockBuilder(Manager::class) ->setConstructorArgs([ $this->createMock(IConfig::class), - $this->createMock(FilesystemHelper::class), - $this->createMock(LogWrapper::class), + $this->createMock(LoggerInterface::class), $this->createMock(IAvatarManager::class), $this->createMock(Image::class), $this->createMock(IUserManager::class), $this->createMock(INotificationManager::class), $this->shareManager]) ->getMock(); - $helper = new Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $helper = Server::get(Helper::class); return [$lw, $connector, $um, $helper]; } - public function testEscapeFilterPartValidChars() { + public function testEscapeFilterPartValidChars(): void { $input = 'okay'; - $this->assertTrue($input === $this->access->escapeFilterPart($input)); + $this->assertSame($input, $this->access->escapeFilterPart($input)); } - public function testEscapeFilterPartEscapeWildcard() { + public function testEscapeFilterPartEscapeWildcard(): void { $input = '*'; - $expected = '\\\\*'; - $this->assertTrue($expected === $this->access->escapeFilterPart($input)); + $expected = '\\2a'; + $this->assertSame($expected, $this->access->escapeFilterPart($input)); } - public function testEscapeFilterPartEscapeWildcard2() { + public function testEscapeFilterPartEscapeWildcard2(): void { $input = 'foo*bar'; - $expected = 'foo\\\\*bar'; - $this->assertTrue($expected === $this->access->escapeFilterPart($input)); + $expected = 'foo\\2abar'; + $this->assertSame($expected, $this->access->escapeFilterPart($input)); } /** - * @dataProvider convertSID2StrSuccessData * @param array $sidArray * @param $sidExpected */ - public function testConvertSID2StrSuccess(array $sidArray, $sidExpected) { + #[\PHPUnit\Framework\Attributes\DataProvider('convertSID2StrSuccessData')] + public function testConvertSID2StrSuccess(array $sidArray, $sidExpected): void { $sidBinary = implode('', $sidArray); $this->assertSame($sidExpected, $this->access->convertSID2Str($sidBinary)); } - public function convertSID2StrSuccessData() { + public static function convertSID2StrSuccessData(): array { return [ [ [ @@ -182,14 +168,14 @@ class AccessTest extends TestCase { ]; } - public function testConvertSID2StrInputError() { + public function testConvertSID2StrInputError(): void { $sidIllegal = 'foobar'; $sidExpected = ''; $this->assertSame($sidExpected, $this->access->convertSID2Str($sidIllegal)); } - public function testGetDomainDNFromDNSuccess() { + public function testGetDomainDNFromDNSuccess(): void { $inputDN = 'uid=zaphod,cn=foobar,dc=my,dc=server,dc=com'; $domainDN = 'dc=my,dc=server,dc=com'; @@ -201,7 +187,7 @@ class AccessTest extends TestCase { $this->assertSame($domainDN, $this->access->getDomainDNFromDN($inputDN)); } - public function testGetDomainDNFromDNError() { + public function testGetDomainDNFromDNError(): void { $inputDN = 'foobar'; $expected = ''; @@ -213,83 +199,82 @@ class AccessTest extends TestCase { $this->assertSame($expected, $this->access->getDomainDNFromDN($inputDN)); } - public function dnInputDataProvider() { - return [[ + public static function dnInputDataProvider(): array { + return [ [ - 'input' => 'foo=bar,bar=foo,dc=foobar', - 'interResult' => [ + 'foo=bar,bar=foo,dc=foobar', + [ 'count' => 3, 0 => 'foo=bar', 1 => 'bar=foo', 2 => 'dc=foobar' ], - 'expectedResult' => true + true ], [ - 'input' => 'foobarbarfoodcfoobar', - 'interResult' => false, - 'expectedResult' => false + 'foobarbarfoodcfoobar', + false, + false ] - ]]; + ]; } - /** - * @dataProvider dnInputDataProvider - * @param array $case - */ - public function testStringResemblesDN($case) { - list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject $config */ + #[\PHPUnit\Framework\Attributes\DataProvider('dnInputDataProvider')] + public function testStringResemblesDN(string $input, array|bool $interResult, bool $expectedResult): void { + [$lw, $con, $um, $helper] = $this->getConnectorAndLdapMock(); + /** @var IConfig&MockObject $config */ $config = $this->createMock(IConfig::class); - $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager); + $access = new Access($lw, $con, $um, $helper, $config, $this->ncUserManager, $this->logger, $this->appConfig, $this->dispatcher); $lw->expects($this->exactly(1)) ->method('explodeDN') - ->willReturnCallback(function ($dn) use ($case) { - if ($dn === $case['input']) { - return $case['interResult']; + ->willReturnCallback(function ($dn) use ($input, $interResult) { + if ($dn === $input) { + return $interResult; } return null; }); - $this->assertSame($case['expectedResult'], $access->stringResemblesDN($case['input'])); + $this->assertSame($expectedResult, $access->stringResemblesDN($input)); } - /** - * @dataProvider dnInputDataProvider - * @param $case - */ - public function testStringResemblesDNLDAPmod($case) { - list(, $con, $um, $helper) = $this->getConnectorAndLdapMock(); - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject $config */ + #[\PHPUnit\Framework\Attributes\DataProvider('dnInputDataProvider')] + public function testStringResemblesDNLDAPmod(string $input, array|bool $interResult, bool $expectedResult): void { + [, $con, $um, $helper] = $this->getConnectorAndLdapMock(); + /** @var IConfig&MockObject $config */ $config = $this->createMock(IConfig::class); $lw = new LDAP(); - $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager); + $access = new Access($lw, $con, $um, $helper, $config, $this->ncUserManager, $this->logger, $this->appConfig, $this->dispatcher); if (!function_exists('ldap_explode_dn')) { $this->markTestSkipped('LDAP Module not available'); } - $this->assertSame($case['expectedResult'], $access->stringResemblesDN($case['input'])); + $this->assertSame($expectedResult, $access->stringResemblesDN($input)); } - public function testCacheUserHome() { + public function testCacheUserHome(): void { $this->connection->expects($this->once()) ->method('writeToCache'); $this->access->cacheUserHome('foobar', '/foobars/path'); } - public function testBatchApplyUserAttributes() { + public function testBatchApplyUserAttributes(): void { $this->ldap->expects($this->any()) ->method('isResource') ->willReturn(true); + $this->connection + ->expects($this->any()) + ->method('getConnectionResource') + ->willReturn(ldap_connect('ldap://example.com')); + $this->ldap->expects($this->any()) ->method('getAttributes') ->willReturn(['displayname' => ['bar', 'count' => 1]]); - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject $mapperMock */ + /** @var UserMapping&MockObject $mapperMock */ $mapperMock = $this->createMock(UserMapping::class); $mapperMock->expects($this->any()) ->method('getNameByDN') @@ -333,8 +318,8 @@ class AccessTest extends TestCase { $this->access->batchApplyUserAttributes($data); } - public function testBatchApplyUserAttributesSkipped() { - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject $mapperMock */ + public function testBatchApplyUserAttributesSkipped(): void { + /** @var UserMapping&MockObject $mapperMock */ $mapperMock = $this->createMock(UserMapping::class); $mapperMock->expects($this->any()) ->method('getNameByDN') @@ -374,8 +359,8 @@ class AccessTest extends TestCase { $this->access->batchApplyUserAttributes($data); } - public function testBatchApplyUserAttributesDontSkip() { - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject $mapperMock */ + public function testBatchApplyUserAttributesDontSkip(): void { + /** @var UserMapping&MockObject $mapperMock */ $mapperMock = $this->createMock(UserMapping::class); $mapperMock->expects($this->any()) ->method('getNameByDN') @@ -415,7 +400,7 @@ class AccessTest extends TestCase { $this->access->batchApplyUserAttributes($data); } - public function dNAttributeProvider() { + public static function dNAttributeProvider(): array { // corresponds to Access::resemblesDN() return [ 'dn' => ['dn'], @@ -425,13 +410,10 @@ class AccessTest extends TestCase { ]; } - /** - * @dataProvider dNAttributeProvider - * @param $attribute - */ - public function testSanitizeDN($attribute) { - list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject $config */ + #[\PHPUnit\Framework\Attributes\DataProvider('dNAttributeProvider')] + public function testSanitizeDN(string $attribute): void { + [$lw, $con, $um, $helper] = $this->getConnectorAndLdapMock(); + /** @var IConfig&MockObject $config */ $config = $this->createMock(IConfig::class); $dnFromServer = 'cn=Mixed Cases,ou=Are Sufficient To,ou=Test,dc=example,dc=org'; @@ -445,13 +427,13 @@ class AccessTest extends TestCase { $attribute => ['count' => 1, $dnFromServer] ]); - $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager); + $access = new Access($lw, $con, $um, $helper, $config, $this->ncUserManager, $this->logger, $this->appConfig, $this->dispatcher); $values = $access->readAttribute('uid=whoever,dc=example,dc=org', $attribute); $this->assertSame($values[0], strtolower($dnFromServer)); } - public function testSetPasswordWithDisabledChanges() { + public function testSetPasswordWithDisabledChanges(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('LDAP password changes are disabled'); @@ -463,45 +445,39 @@ class AccessTest extends TestCase { $this->access->setPassword('CN=foo', 'MyPassword'); } - public function testSetPasswordWithLdapNotAvailable() { + public function testSetPasswordWithLdapNotAvailable(): void { $this->connection ->method('__get') ->willReturn(true); - $connection = $this->createMock(LDAP::class); + $connection = ldap_connect('ldap://example.com'); $this->connection ->expects($this->once()) ->method('getConnectionResource') - ->willReturn($connection); + ->willThrowException(new ServerNotAvailableException('Connection to LDAP server could not be established')); $this->ldap - ->expects($this->once()) - ->method('isResource') - ->with($connection) - ->willReturn(false); + ->expects($this->never()) + ->method('isResource'); - /** @noinspection PhpUnhandledExceptionInspection */ - $this->assertFalse($this->access->setPassword('CN=foo', 'MyPassword')); + $this->expectException(ServerNotAvailableException::class); + $this->expectExceptionMessage('Connection to LDAP server could not be established'); + $this->access->setPassword('CN=foo', 'MyPassword'); } - public function testSetPasswordWithRejectedChange() { - $this->expectException(\OC\HintException::class); + public function testSetPasswordWithRejectedChange(): void { + $this->expectException(HintException::class); $this->expectExceptionMessage('Password change rejected.'); $this->connection ->method('__get') ->willReturn(true); - $connection = $this->createMock(LDAP::class); + $connection = ldap_connect('ldap://example.com'); $this->connection - ->expects($this->once()) + ->expects($this->any()) ->method('getConnectionResource') ->willReturn($connection); $this->ldap ->expects($this->once()) - ->method('isResource') - ->with($connection) - ->willReturn(true); - $this->ldap - ->expects($this->once()) ->method('modReplace') ->with($connection, 'CN=foo', 'MyPassword') ->willThrowException(new ConstraintViolationException()); @@ -510,22 +486,17 @@ class AccessTest extends TestCase { $this->access->setPassword('CN=foo', 'MyPassword'); } - public function testSetPassword() { + public function testSetPassword(): void { $this->connection ->method('__get') ->willReturn(true); - $connection = $this->createMock(LDAP::class); + $connection = ldap_connect('ldap://example.com'); $this->connection - ->expects($this->once()) + ->expects($this->any()) ->method('getConnectionResource') ->willReturn($connection); $this->ldap ->expects($this->once()) - ->method('isResource') - ->with($connection) - ->willReturn(true); - $this->ldap - ->expects($this->once()) ->method('modReplace') ->with($connection, 'CN=foo', 'MyPassword') ->willReturn(true); @@ -538,7 +509,7 @@ class AccessTest extends TestCase { $base, $fakeConnection, $fakeSearchResultResource, - $fakeLdapEntries + $fakeLdapEntries, ) { $this->connection ->expects($this->any()) @@ -557,7 +528,7 @@ class AccessTest extends TestCase { ->expects($this->any()) ->method('isResource') ->willReturnCallback(function ($resource) { - return is_resource($resource); + return is_object($resource); }); $this->ldap ->expects($this->any()) @@ -577,7 +548,7 @@ class AccessTest extends TestCase { ->willReturnArgument(0); } - public function testSearchNoPagedSearch() { + public function testSearchNoPagedSearch(): void { // scenario: no pages search, 1 search base $filter = 'objectClass=nextcloudUser'; $base = 'ou=zombies,dc=foobar,dc=nextcloud,dc=com'; @@ -604,7 +575,7 @@ class AccessTest extends TestCase { $this->assertSame($expected, $result); } - public function testFetchListOfUsers() { + public function testFetchListOfUsers(): void { $filter = 'objectClass=nextcloudUser'; $base = 'ou=zombies,dc=foobar,dc=nextcloud,dc=com'; $attrs = ['dn', 'uid']; @@ -624,20 +595,21 @@ class AccessTest extends TestCase { ]; $expected = $fakeLdapEntries; unset($expected['count']); - array_walk($expected, function (&$v) { + array_walk($expected, function (&$v): void { $v['dn'] = [$v['dn']]; // dn is translated into an array internally for consistency }); $this->prepareMocksForSearchTests($base, $fakeConnection, $fakeSearchResultResource, $fakeLdapEntries); - $this->connection->expects($this->exactly($fakeLdapEntries['count'])) + // Called twice per user, for userExists and userExistsOnLdap + $this->connection->expects($this->exactly(2 * $fakeLdapEntries['count'])) ->method('writeToCache') ->with($this->stringStartsWith('userExists'), true); $this->userMapper->expects($this->exactly($fakeLdapEntries['count'])) ->method('getNameByDN') ->willReturnCallback(function ($fdn) { - $parts = ldap_explode_dn($fdn, false); + $parts = ldap_explode_dn($fdn, 0); return $parts[0]; }); @@ -646,8 +618,8 @@ class AccessTest extends TestCase { $this->assertSame($expected, $list); } - public function testFetchListOfGroupsKnown() { - $filter = 'objectClass=nextcloudGroup'; + public function testFetchListOfGroupsKnown(): void { + $filter = 'objectClass=nextcloudGroup'; $attributes = ['cn', 'gidNumber', 'dn']; $base = 'ou=SomeGroups,dc=my,dc=directory'; @@ -676,7 +648,7 @@ class AccessTest extends TestCase { $this->groupMapper->expects($this->never()) ->method('getNameByDN'); - $this->connection->expects($this->exactly(2)) + $this->connection->expects($this->exactly(1)) ->method('writeToCache'); $groups = $this->access->fetchListOfGroups($filter, $attributes); @@ -685,32 +657,43 @@ class AccessTest extends TestCase { $this->assertSame('Another Good Team', $groups[1]['cn'][0]); } - public function intUsernameProvider() { - // system dependent :-/ - $translitExpected = @iconv('UTF-8', 'ASCII//TRANSLIT', 'fränk') ? 'frank' : 'frnk'; - + public static function intUsernameProvider(): array { return [ ['alice', 'alice'], ['b/ob', 'bob'], ['charly🐬', 'charly'], ['debo rah', 'debo_rah'], ['epost@poste.test', 'epost@poste.test'], - ['fränk', $translitExpected], + ['fränk', 'frank'], + [' UPPÉR Case/[\]^`', 'UPPER_Case'], + [' gerda ', 'gerda'], + ['🕱🐵🐘🐑', null], + [ + 'OneNameToRuleThemAllOneNameToFindThemOneNameToBringThemAllAndInTheDarknessBindThem', + '81ff71b5dd0f0092e2dc977b194089120093746e273f2ef88c11003762783127' + ] + ]; + } + + public static function groupIDCandidateProvider(): array { + return [ + ['alice', 'alice'], + ['b/ob', 'b/ob'], + ['charly🐬', 'charly🐬'], + ['debo rah', 'debo rah'], + ['epost@poste.test', 'epost@poste.test'], + ['fränk', 'fränk'], [' gerda ', 'gerda'], - ['🕱🐵🐘🐑', null] + ['🕱🐵🐘🐑', '🕱🐵🐘🐑'], + [ + 'OneNameToRuleThemAllOneNameToFindThemOneNameToBringThemAllAndInTheDarknessBindThem', + '81ff71b5dd0f0092e2dc977b194089120093746e273f2ef88c11003762783127' + ] ]; } - /** - * @dataProvider intUsernameProvider - * - * @param $name - * @param $expected - */ - public function testSanitizeUsername($name, $expected) { - if ($name === 'fränk' && PHP_MAJOR_VERSION > 7) { - $this->markTestSkipped('Special chars do boom still on CI in php8'); - } + #[\PHPUnit\Framework\Attributes\DataProvider('intUsernameProvider')] + public function testSanitizeUsername(string $name, ?string $expected): void { if ($expected === null) { $this->expectException(\InvalidArgumentException::class); } @@ -718,7 +701,13 @@ class AccessTest extends TestCase { $this->assertSame($expected, $sanitizedName); } - public function testUserStateUpdate() { + #[\PHPUnit\Framework\Attributes\DataProvider('groupIDCandidateProvider')] + public function testSanitizeGroupIDCandidate(string $name, string $expected): void { + $sanitizedName = $this->access->sanitizeGroupIDCandidate($name); + $this->assertSame($expected, $sanitizedName); + } + + public function testUserStateUpdate(): void { $this->connection->expects($this->any()) ->method('__get') ->willReturnMap([ @@ -737,7 +726,7 @@ class AccessTest extends TestCase { ->with('detta') ->willReturnOnConsecutiveCalls($offlineUserMock, $regularUserMock); - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject $mapperMock */ + /** @var UserMapping&MockObject $mapperMock */ $mapperMock = $this->createMock(UserMapping::class); $mapperMock->expects($this->any()) ->method('getNameByDN') diff --git a/apps/user_ldap/tests/ConfigurationTest.php b/apps/user_ldap/tests/ConfigurationTest.php index 6239bab68b0..db92598fcfd 100644 --- a/apps/user_ldap/tests/ConfigurationTest.php +++ b/apps/user_ldap/tests/ConfigurationTest.php @@ -1,42 +1,24 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\Configuration; class ConfigurationTest extends \Test\TestCase { - /** @var Configuration */ - protected $configuration; + protected Configuration $configuration; protected function setUp(): void { parent::setUp(); $this->configuration = new Configuration('t01', false); } - public function configurationDataProvider() { + public static function configurationDataProvider(): array { $inputWithDN = [ 'cn=someUsers,dc=example,dc=org', ' ', @@ -104,15 +86,13 @@ class ConfigurationTest extends \Test\TestCase { ]; } - /** - * @dataProvider configurationDataProvider - */ - public function testSetValue($key, $input, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('configurationDataProvider')] + public function testSetValue(string $key, string|array $input, string|array $expected): void { $this->configuration->setConfiguration([$key => $input]); $this->assertSame($this->configuration->$key, $expected); } - public function avatarRuleValueProvider() { + public static function avatarRuleValueProvider(): array { return [ ['none', []], ['data:selfie', ['selfie']], @@ -123,18 +103,14 @@ class ConfigurationTest extends \Test\TestCase { ]; } - /** - * @dataProvider avatarRuleValueProvider - */ - public function testGetAvatarAttributes($setting, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('avatarRuleValueProvider')] + public function testGetAvatarAttributes(string $setting, array $expected): void { $this->configuration->setConfiguration(['ldapUserAvatarRule' => $setting]); $this->assertSame($expected, $this->configuration->getAvatarAttributes()); } - /** - * @dataProvider avatarRuleValueProvider - */ - public function testResolveRule($setting, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('avatarRuleValueProvider')] + public function testResolveRule(string $setting, array $expected): void { $this->configuration->setConfiguration(['ldapUserAvatarRule' => $setting]); // so far the only thing that can get resolved :) $this->assertSame($expected, $this->configuration->resolveRule('avatar')); diff --git a/apps/user_ldap/tests/ConnectionTest.php b/apps/user_ldap/tests/ConnectionTest.php index 1269a5d7e43..7116e15898f 100644 --- a/apps/user_ldap/tests/ConnectionTest.php +++ b/apps/user_ldap/tests/ConnectionTest.php @@ -1,37 +1,17 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Jarkko Lehtoranta <devel@jlranta.com> - * @author Joas Schilling <coding@schilljs.com> - * @author Julius Härtl <jus@bitgrid.net> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests; +use OC\ServerNotAvailableException; use OCA\User_LDAP\Connection; use OCA\User_LDAP\ILDAPWrapper; +use PHPUnit\Framework\MockObject\MockObject; /** * Class Test_Connection @@ -41,19 +21,16 @@ use OCA\User_LDAP\ILDAPWrapper; * @package OCA\User_LDAP\Tests */ class ConnectionTest extends \Test\TestCase { - /** @var \OCA\User_LDAP\ILDAPWrapper|\PHPUnit\Framework\MockObject\MockObject */ - protected $ldap; - - /** @var Connection */ - protected $connection; + protected ILDAPWrapper&MockObject $ldap; + protected Connection $connection; protected function setUp(): void { parent::setUp(); $this->ldap = $this->createMock(ILDAPWrapper::class); // we use a mock here to replace the cache mechanism, due to missing DI in LDAP backend. - $this->connection = $this->getMockBuilder('OCA\User_LDAP\Connection') - ->setMethods(['getFromCache', 'writeToCache']) + $this->connection = $this->getMockBuilder(Connection::class) + ->onlyMethods(['getFromCache', 'writeToCache']) ->setConstructorArgs([$this->ldap, '', null]) ->getMock(); @@ -62,7 +39,7 @@ class ConnectionTest extends \Test\TestCase { ->willReturn(true); } - public function testOriginalAgentUnchangedOnClone() { + public function testOriginalAgentUnchangedOnClone(): void { //background: upon login a bind is done with the user credentials //which is valid for the whole LDAP resource. It needs to be reset //to the agent's credentials @@ -89,7 +66,7 @@ class ConnectionTest extends \Test\TestCase { $this->assertSame($agentPawd, $agent['ldapAgentPassword']); } - public function testUseBackupServer() { + public function testUseBackupServer(): void { $mainHost = 'ldap://nixda.ldap'; $backupHost = 'ldap://fallback.ldap'; $config = [ @@ -115,17 +92,16 @@ class ConnectionTest extends \Test\TestCase { $this->ldap->expects($this->exactly(3)) ->method('connect') - ->willReturn('ldapResource'); + ->willReturn(ldap_connect('ldap://example.com')); $this->ldap->expects($this->any()) ->method('errno') ->willReturn(0); // Not called often enough? Then, the fallback to the backup server is broken. - $this->connection->expects($this->exactly(4)) + $this->connection->expects($this->exactly(2)) ->method('getFromCache') - ->with('overrideMainServer') - ->will($this->onConsecutiveCalls(false, false, true, true)); + ->with('overrideMainServer')->willReturnOnConsecutiveCalls(false, false, true, true); $this->connection->expects($this->once()) ->method('writeToCache') @@ -137,7 +113,7 @@ class ConnectionTest extends \Test\TestCase { ->willReturnCallback(function () use (&$isThrown) { if (!$isThrown) { $isThrown = true; - throw new \OC\ServerNotAvailableException(); + throw new ServerNotAvailableException(); } return true; }); @@ -148,7 +124,7 @@ class ConnectionTest extends \Test\TestCase { $this->connection->init(); } - public function testDontUseBackupServerOnFailedAuth() { + public function testDontUseBackupServerOnFailedAuth(): void { $mainHost = 'ldap://nixda.ldap'; $backupHost = 'ldap://fallback.ldap'; $config = [ @@ -174,7 +150,7 @@ class ConnectionTest extends \Test\TestCase { $this->ldap->expects($this->once()) ->method('connect') - ->willReturn('ldapResource'); + ->willReturn(ldap_connect('ldap://example.com')); $this->ldap->expects($this->any()) ->method('errno') @@ -195,7 +171,7 @@ class ConnectionTest extends \Test\TestCase { $this->connection->init(); } - public function testBindWithInvalidCredentials() { + public function testBindWithInvalidCredentials(): void { // background: Bind with invalid credentials should return false // and not throw a ServerNotAvailableException. @@ -222,7 +198,7 @@ class ConnectionTest extends \Test\TestCase { $this->ldap->expects($this->any()) ->method('connect') - ->willReturn('ldapResource'); + ->willReturn(ldap_connect('ldap://example.com')); $this->ldap->expects($this->once()) ->method('bind') @@ -235,12 +211,12 @@ class ConnectionTest extends \Test\TestCase { try { $this->assertFalse($this->connection->bind(), 'Connection::bind() should not return true with invalid credentials.'); - } catch (\OC\ServerNotAvailableException $e) { + } catch (ServerNotAvailableException $e) { $this->fail('Failed asserting that exception of type "OC\ServerNotAvailableException" is not thrown.'); } } - public function testStartTlsNegotiationFailure() { + public function testStartTlsNegotiationFailure(): void { // background: If Start TLS negotiation fails, // a ServerNotAvailableException should be thrown. @@ -265,7 +241,7 @@ class ConnectionTest extends \Test\TestCase { $this->ldap->expects($this->any()) ->method('connect') - ->willReturn('ldapResource'); + ->willReturn(ldap_connect('ldap://example.com')); $this->ldap->expects($this->any()) ->method('setOption') @@ -283,7 +259,7 @@ class ConnectionTest extends \Test\TestCase { ->method('startTls') ->willReturn(false); - $this->expectException(\OC\ServerNotAvailableException::class); + $this->expectException(ServerNotAvailableException::class); $this->expectExceptionMessage('Start TLS failed, when connecting to LDAP host ' . $host . '.'); $this->connection->init(); diff --git a/apps/user_ldap/tests/GroupLDAPPluginTest.php b/apps/user_ldap/tests/GroupLDAPPluginTest.php index baabdfb53c4..9f4cff64d6b 100644 --- a/apps/user_ldap/tests/GroupLDAPPluginTest.php +++ b/apps/user_ldap/tests/GroupLDAPPluginTest.php @@ -1,55 +1,33 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br) - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\GroupPluginManager; use OCP\GroupInterface; class GroupLDAPPluginTest extends \Test\TestCase { - - /** - * @return GroupPluginManager - */ - private function getGroupPluginManager() { + private function getGroupPluginManager(): GroupPluginManager { return new GroupPluginManager(); } - public function testImplementsActions() { + public function testImplementsActions(): void { $pluginManager = $this->getGroupPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy') - ->setMethods(['respondToActions']) + $plugin = $this->getMockBuilder(LDAPGroupPluginDummy::class) + ->onlyMethods(['respondToActions']) ->getMock(); $plugin->expects($this->any()) ->method('respondToActions') ->willReturn(GroupInterface::CREATE_GROUP); - $plugin2 = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy') - ->setMethods(['respondToActions']) + $plugin2 = $this->getMockBuilder(LDAPGroupPluginDummy::class) + ->onlyMethods(['respondToActions']) ->getMock(); $plugin2->expects($this->any()) @@ -64,11 +42,11 @@ class GroupLDAPPluginTest extends \Test\TestCase { $this->assertTrue($pluginManager->implementsActions(GroupInterface::ADD_TO_GROUP)); } - public function testCreateGroup() { + public function testCreateGroup(): void { $pluginManager = $this->getGroupPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy') - ->setMethods(['respondToActions', 'createGroup']) + $plugin = $this->getMockBuilder(LDAPGroupPluginDummy::class) + ->onlyMethods(['respondToActions', 'createGroup']) ->getMock(); $plugin->expects($this->any()) @@ -85,8 +63,8 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->createGroup('group'); } - - public function testCreateGroupNotRegistered() { + + public function testCreateGroupNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements createGroup in this LDAP Backend.'); @@ -94,11 +72,11 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->createGroup('foo'); } - public function testDeleteGroup() { + public function testDeleteGroup(): void { $pluginManager = $this->getGroupPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy') - ->setMethods(['respondToActions', 'deleteGroup']) + $plugin = $this->getMockBuilder(LDAPGroupPluginDummy::class) + ->onlyMethods(['respondToActions', 'deleteGroup']) ->getMock(); $plugin->expects($this->any()) @@ -109,14 +87,14 @@ class GroupLDAPPluginTest extends \Test\TestCase { ->method('deleteGroup') ->with( $this->equalTo('group') - ); + )->willReturn(true); $pluginManager->register($plugin); - $pluginManager->deleteGroup('group'); + $this->assertTrue($pluginManager->deleteGroup('group')); } - - public function testDeleteGroupNotRegistered() { + + public function testDeleteGroupNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements deleteGroup in this LDAP Backend.'); @@ -124,11 +102,11 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->deleteGroup('foo'); } - public function testAddToGroup() { + public function testAddToGroup(): void { $pluginManager = $this->getGroupPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy') - ->setMethods(['respondToActions', 'addToGroup']) + $plugin = $this->getMockBuilder(LDAPGroupPluginDummy::class) + ->onlyMethods(['respondToActions', 'addToGroup']) ->getMock(); $plugin->expects($this->any()) @@ -146,8 +124,8 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->addToGroup('uid', 'gid'); } - - public function testAddToGroupNotRegistered() { + + public function testAddToGroupNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements addToGroup in this LDAP Backend.'); @@ -155,11 +133,11 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->addToGroup('foo', 'bar'); } - public function testRemoveFromGroup() { + public function testRemoveFromGroup(): void { $pluginManager = $this->getGroupPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy') - ->setMethods(['respondToActions', 'removeFromGroup']) + $plugin = $this->getMockBuilder(LDAPGroupPluginDummy::class) + ->onlyMethods(['respondToActions', 'removeFromGroup']) ->getMock(); $plugin->expects($this->any()) @@ -177,8 +155,8 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->removeFromGroup('uid', 'gid'); } - - public function testRemoveFromGroupNotRegistered() { + + public function testRemoveFromGroupNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements removeFromGroup in this LDAP Backend.'); @@ -186,11 +164,11 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->removeFromGroup('foo', 'bar'); } - public function testCountUsersInGroup() { + public function testCountUsersInGroup(): void { $pluginManager = $this->getGroupPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy') - ->setMethods(['respondToActions', 'countUsersInGroup']) + $plugin = $this->getMockBuilder(LDAPGroupPluginDummy::class) + ->onlyMethods(['respondToActions', 'countUsersInGroup']) ->getMock(); $plugin->expects($this->any()) @@ -208,8 +186,8 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->countUsersInGroup('gid', 'search'); } - - public function testCountUsersInGroupNotRegistered() { + + public function testCountUsersInGroupNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements countUsersInGroup in this LDAP Backend.'); @@ -217,11 +195,11 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->countUsersInGroup('foo', 'bar'); } - public function testgetGroupDetails() { + public function testgetGroupDetails(): void { $pluginManager = $this->getGroupPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy') - ->setMethods(['respondToActions', 'getGroupDetails']) + $plugin = $this->getMockBuilder(LDAPGroupPluginDummy::class) + ->onlyMethods(['respondToActions', 'getGroupDetails']) ->getMock(); $plugin->expects($this->any()) @@ -238,8 +216,8 @@ class GroupLDAPPluginTest extends \Test\TestCase { $pluginManager->getGroupDetails('gid'); } - - public function testgetGroupDetailsNotRegistered() { + + public function testgetGroupDetailsNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements getGroupDetails in this LDAP Backend.'); diff --git a/apps/user_ldap/tests/Group_LDAPTest.php b/apps/user_ldap/tests/Group_LDAPTest.php index 4011d964a40..10182111768 100644 --- a/apps/user_ldap/tests/Group_LDAPTest.php +++ b/apps/user_ldap/tests/Group_LDAPTest.php @@ -1,34 +1,11 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * @author Vincent Petry <vincent@nextcloud.com> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * @author Xuanwo <xuanwo@yunify.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\Access; @@ -38,7 +15,15 @@ use OCA\User_LDAP\GroupPluginManager; use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\User\Manager; +use OCA\User_LDAP\User\OfflineUser; +use OCA\User_LDAP\User\User; +use OCA\User_LDAP\User_Proxy; use OCP\GroupInterface; +use OCP\IConfig; +use OCP\IUser; +use OCP\IUserManager; +use OCP\Security\ISecureRandom; +use OCP\Server; use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; @@ -50,17 +35,34 @@ use Test\TestCase; * @package OCA\User_LDAP\Tests */ class Group_LDAPTest extends TestCase { - public function testCountEmptySearchString() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); + private Access&MockObject $access; + private GroupPluginManager&MockObject $pluginManager; + private IConfig&MockObject $config; + private IUserManager&MockObject $ncUserManager; + private GroupLDAP $groupBackend; + + public function setUp(): void { + parent::setUp(); + + $this->access = $this->getAccessMock(); + $this->pluginManager = $this->createMock(GroupPluginManager::class); + $this->config = $this->createMock(IConfig::class); + $this->ncUserManager = $this->createMock(IUserManager::class); + } + + public function initBackend(): void { + $this->groupBackend = new GroupLDAP($this->access, $this->pluginManager, $this->config, $this->ncUserManager); + } + + public function testCountEmptySearchString(): void { $groupDN = 'cn=group,dc=foo,dc=bar'; - $this->enableGroups($access); + $this->enableGroups(); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('groupname2dn') ->willReturn($groupDN); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturnCallback(function ($dn) use ($groupDN) { if ($dn === $groupDN) { @@ -73,20 +75,20 @@ class Group_LDAPTest extends TestCase { } return []; }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('isDNPartOfBase') ->willReturn(true); // for primary groups - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('countUsers') ->willReturn(2); - $access->userManager->expects($this->any()) + $this->access->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['displayName', 'mail']); - $groupBackend = new GroupLDAP($access, $pluginManager); - $users = $groupBackend->countUsersInGroup('group'); + $this->initBackend(); + $users = $this->groupBackend->countUsersInGroup('group'); $this->assertSame(6, $users); } @@ -95,384 +97,342 @@ class Group_LDAPTest extends TestCase { * @return MockObject|Access */ private function getAccessMock() { - static $conMethods; - static $accMethods; - - if (is_null($conMethods) || is_null($accMethods)) { - $conMethods = get_class_methods(Connection::class); - $accMethods = get_class_methods(Access::class); - } $lw = $this->createMock(ILDAPWrapper::class); $connector = $this->getMockBuilder(Connection::class) - ->setMethods($conMethods) - ->setConstructorArgs([$lw, null, null]) + ->setConstructorArgs([$lw, '', null]) ->getMock(); - $access = $this->createMock(Access::class); + $this->access = $this->createMock(Access::class); + $this->access->connection = $connector; + $this->access->userManager = $this->createMock(Manager::class); - $access->expects($this->any()) - ->method('getConnection') - ->willReturn($connector); - - $access->userManager = $this->createMock(Manager::class); - - return $access; + return $this->access; } - /** - * @return MockObject|GroupPluginManager - */ - private function getPluginManagerMock() { - return $this->createMock(GroupPluginManager::class); - } - - private function enableGroups(Access $access) { - $access->connection = $this->createMock(Connection::class); - - $access->connection->expects($this->any()) + private function enableGroups(): void { + $this->access->connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($name) { if ($name === 'ldapDynamicGroupMemberURL') { return ''; + } elseif ($name === 'ldapBaseGroups') { + return []; } return 1; }); } - public function testCountWithSearchString() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testCountWithSearchString(): void { + $this->enableGroups(); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('groupname2dn') ->willReturn('cn=group,dc=foo,dc=bar'); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('fetchListOfUsers') ->willReturn([]); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturnCallback(function ($name) { //the search operation will call readAttribute, thus we need - //to anaylze the "dn". All other times we just need to return + //to analyze the "dn". All other times we just need to return //something that is neither null or false, but once an array //with the users in the group – so we do so all other times for - //simplicicity. - if (strpos($name, 'u') === 0) { + //simplicity. + if (str_starts_with($name, 'u')) { return strpos($name, '3'); } return ['u11', 'u22', 'u33', 'u34']; }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('dn2username') ->willReturnCallback(function () { - return 'foobar' . \OC::$server->getSecureRandom()->generate(7); + return 'foobar' . Server::get(ISecureRandom::class)->generate(7); }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('isDNPartOfBase') ->willReturn(true); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('escapeFilterPart') ->willReturnArgument(0); - $access->userManager->expects($this->any()) + $this->access->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['displayName', 'mail']); - $groupBackend = new GroupLDAP($access, $pluginManager); - $users = $groupBackend->countUsersInGroup('group', '3'); + $this->initBackend(); + $users = $this->groupBackend->countUsersInGroup('group', '3'); $this->assertSame(2, $users); } - public function testCountUsersWithPlugin() { + public function testCountUsersWithPlugin(): void { /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'countUsersInGroup']) + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'countUsersInGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::COUNT_USERS) ->willReturn(true); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('countUsersInGroup') ->with('gid', 'search') ->willReturn(42); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $this->assertEquals($ldap->countUsersInGroup('gid', 'search'), 42); + $this->initBackend(); + $this->assertEquals($this->groupBackend->countUsersInGroup('gid', 'search'), 42); } - public function testGidNumber2NameSuccess() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testGidNumber2NameSuccess(): void { + $this->enableGroups(); $userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('searchGroups') ->willReturn([['dn' => ['cn=foo,dc=barfoo,dc=bar']]]); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('dn2groupname') ->with('cn=foo,dc=barfoo,dc=bar') ->willReturn('MyGroup'); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $group = $groupBackend->gidNumber2Name('3117', $userDN); + $this->initBackend(); + $group = $this->groupBackend->gidNumber2Name('3117', $userDN); $this->assertSame('MyGroup', $group); } - public function testGidNumberID2NameNoGroup() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testGidNumberID2NameNoGroup(): void { + $this->enableGroups(); $userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('searchGroups') ->willReturn([]); - $access->expects($this->never()) + $this->access->expects($this->never()) ->method('dn2groupname'); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $group = $groupBackend->gidNumber2Name('3117', $userDN); + $this->initBackend(); + $group = $this->groupBackend->gidNumber2Name('3117', $userDN); $this->assertSame(false, $group); } - public function testGidNumberID2NameNoName() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testGidNumberID2NameNoName(): void { + $this->enableGroups(); $userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('searchGroups') ->willReturn([['dn' => ['cn=foo,dc=barfoo,dc=bar']]]); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('dn2groupname') ->willReturn(false); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $group = $groupBackend->gidNumber2Name('3117', $userDN); + $this->initBackend(); + $group = $this->groupBackend->gidNumber2Name('3117', $userDN); $this->assertSame(false, $group); } - public function testGetEntryGidNumberValue() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testGetEntryGidNumberValue(): void { + $this->enableGroups(); $dn = 'cn=foobar,cn=foo,dc=barfoo,dc=bar'; $attr = 'gidNumber'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('readAttribute') ->with($dn, $attr) ->willReturn(['3117']); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $gid = $groupBackend->getGroupGidNumber($dn); + $this->initBackend(); + $gid = $this->groupBackend->getGroupGidNumber($dn); $this->assertSame('3117', $gid); } - public function testGetEntryGidNumberNoValue() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testGetEntryGidNumberNoValue(): void { + $this->enableGroups(); $dn = 'cn=foobar,cn=foo,dc=barfoo,dc=bar'; $attr = 'gidNumber'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('readAttribute') ->with($dn, $attr) ->willReturn(false); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $gid = $groupBackend->getGroupGidNumber($dn); + $this->initBackend(); + $gid = $this->groupBackend->getGroupGidNumber($dn); $this->assertSame(false, $gid); } - public function testPrimaryGroupID2NameSuccess() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); + public function testPrimaryGroupID2NameSuccessCache(): void { + $this->enableGroups(); + + $userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar'; + $gid = '3117'; + + /** @var MockObject $connection */ + $connection = $this->access->connection; + $connection->expects($this->once()) + ->method('getFromCache') + ->with('primaryGroupIDtoName_' . $gid) + ->willReturn('MyGroup'); + + $this->access->expects($this->never()) + ->method('getSID'); + + $this->access->expects($this->never()) + ->method('searchGroups'); + + $this->access->expects($this->never()) + ->method('dn2groupname'); + + $this->initBackend(); + $group = $this->groupBackend->primaryGroupID2Name($gid, $userDN); + + $this->assertSame('MyGroup', $group); + } - $this->enableGroups($access); + public function testPrimaryGroupID2NameSuccess(): void { + $this->enableGroups(); $userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('getSID') ->with($userDN) ->willReturn('S-1-5-21-249921958-728525901-1594176202'); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('searchGroups') ->willReturn([['dn' => ['cn=foo,dc=barfoo,dc=bar']]]); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('dn2groupname') ->with('cn=foo,dc=barfoo,dc=bar') ->willReturn('MyGroup'); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $group = $groupBackend->primaryGroupID2Name('3117', $userDN); + $this->initBackend(); + $group = $this->groupBackend->primaryGroupID2Name('3117', $userDN); $this->assertSame('MyGroup', $group); } - public function testPrimaryGroupID2NameNoSID() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testPrimaryGroupID2NameNoSID(): void { + $this->enableGroups(); $userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('getSID') ->with($userDN) ->willReturn(false); - $access->expects($this->never()) + $this->access->expects($this->never()) ->method('searchGroups'); - $access->expects($this->never()) + $this->access->expects($this->never()) ->method('dn2groupname'); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $group = $groupBackend->primaryGroupID2Name('3117', $userDN); + $this->initBackend(); + $group = $this->groupBackend->primaryGroupID2Name('3117', $userDN); $this->assertSame(false, $group); } - public function testPrimaryGroupID2NameNoGroup() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testPrimaryGroupID2NameNoGroup(): void { + $this->enableGroups(); $userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('getSID') ->with($userDN) ->willReturn('S-1-5-21-249921958-728525901-1594176202'); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('searchGroups') ->willReturn([]); - $access->expects($this->never()) + $this->access->expects($this->never()) ->method('dn2groupname'); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $group = $groupBackend->primaryGroupID2Name('3117', $userDN); + $this->initBackend(); + $group = $this->groupBackend->primaryGroupID2Name('3117', $userDN); $this->assertSame(false, $group); } - public function testPrimaryGroupID2NameNoName() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testPrimaryGroupID2NameNoName(): void { + $this->enableGroups(); $userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('getSID') ->with($userDN) ->willReturn('S-1-5-21-249921958-728525901-1594176202'); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('searchGroups') ->willReturn([['dn' => ['cn=foo,dc=barfoo,dc=bar']]]); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('dn2groupname') ->willReturn(false); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $group = $groupBackend->primaryGroupID2Name('3117', $userDN); + $this->initBackend(); + $group = $this->groupBackend->primaryGroupID2Name('3117', $userDN); $this->assertSame(false, $group); } - public function testGetEntryGroupIDValue() { + public function testGetEntryGroupIDValue(): void { //tests getEntryGroupID via getGroupPrimaryGroupID //which is basically identical to getUserPrimaryGroupIDs - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + $this->enableGroups(); $dn = 'cn=foobar,cn=foo,dc=barfoo,dc=bar'; $attr = 'primaryGroupToken'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('readAttribute') ->with($dn, $attr) ->willReturn(['3117']); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $gid = $groupBackend->getGroupPrimaryGroupID($dn); + $this->initBackend(); + $gid = $this->groupBackend->getGroupPrimaryGroupID($dn); $this->assertSame('3117', $gid); } - public function testGetEntryGroupIDNoValue() { + public function testGetEntryGroupIDNoValue(): void { //tests getEntryGroupID via getGroupPrimaryGroupID //which is basically identical to getUserPrimaryGroupIDs - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + $this->enableGroups(); $dn = 'cn=foobar,cn=foo,dc=barfoo,dc=bar'; $attr = 'primaryGroupToken'; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('readAttribute') ->with($dn, $attr) ->willReturn(false); - $groupBackend = new GroupLDAP($access, $pluginManager); - - $gid = $groupBackend->getGroupPrimaryGroupID($dn); + $this->initBackend(); + $gid = $this->groupBackend->getGroupPrimaryGroupID($dn); $this->assertSame(false, $gid); } @@ -481,29 +441,26 @@ class Group_LDAPTest extends TestCase { * tests whether Group Backend behaves correctly when cache with uid and gid * is hit */ - public function testInGroupHitsUidGidCache() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testInGroupHitsUidGidCache(): void { + $this->enableGroups(); $uid = 'someUser'; $gid = 'someGroup'; $cacheKey = 'inGroup' . $uid . ':' . $gid; - $access->connection->expects($this->once()) + $this->access->connection->expects($this->once()) ->method('getFromCache') ->with($cacheKey) ->willReturn(true); - $access->expects($this->never()) + $this->access->expects($this->never()) ->method('username2dn'); - $groupBackend = new GroupLDAP($access, $pluginManager); - $groupBackend->inGroup($uid, $gid); + $this->initBackend(); + $this->groupBackend->inGroup($uid, $gid); } - public function groupWithMembersProvider() { + public static function groupWithMembersProvider(): array { return [ [ 'someGroup', @@ -518,19 +475,12 @@ class Group_LDAPTest extends TestCase { ]; } - /** - * @dataProvider groupWithMembersProvider - */ - public function testInGroupMember(string $gid, string $groupDn, array $memberDNs) { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $access->connection = $this->createMock(Connection::class); - + #[\PHPUnit\Framework\Attributes\DataProvider('groupWithMembersProvider')] + public function testInGroupMember(string $gid, string $groupDn, array $memberDNs): void { $uid = 'someUser'; $userDn = $memberDNs[0]; - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($name) { switch ($name) { @@ -545,38 +495,31 @@ class Group_LDAPTest extends TestCase { return 1; } }); - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('getFromCache') ->willReturn(null); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('username2dn') ->with($uid) ->willReturn($userDn); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('groupname2dn') ->willReturn($groupDn); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturn($memberDNs); - $groupBackend = new GroupLDAP($access, $pluginManager); - $this->assertTrue($groupBackend->inGroup($uid, $gid)); + $this->initBackend(); + $this->assertTrue($this->groupBackend->inGroup($uid, $gid)); } - /** - * @dataProvider groupWithMembersProvider - */ - public function testInGroupMemberNot(string $gid, string $groupDn, array $memberDNs) { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $access->connection = $this->createMock(Connection::class); - + #[\PHPUnit\Framework\Attributes\DataProvider('groupWithMembersProvider')] + public function testInGroupMemberNot(string $gid, string $groupDn, array $memberDNs): void { $uid = 'unelatedUser'; $userDn = 'uid=unrelatedUser,ou=unrelatedTeam,ou=unrelatedDepartment,dc=someDomain,dc=someTld'; - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($name) { switch ($name) { @@ -591,46 +534,38 @@ class Group_LDAPTest extends TestCase { return 1; } }); - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('getFromCache') ->willReturn(null); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('username2dn') ->with($uid) ->willReturn($userDn); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('groupname2dn') ->willReturn($groupDn); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturn($memberDNs); - $groupBackend = new GroupLDAP($access, $pluginManager); - $this->assertFalse($groupBackend->inGroup($uid, $gid)); + $this->initBackend(); + $this->assertFalse($this->groupBackend->inGroup($uid, $gid)); } - /** - * @dataProvider groupWithMembersProvider - */ - public function testInGroupMemberUid(string $gid, string $groupDn, array $memberDNs) { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - + #[\PHPUnit\Framework\Attributes\DataProvider('groupWithMembersProvider')] + public function testInGroupMemberUid(string $gid, string $groupDn, array $memberDNs): void { $memberUids = []; $userRecords = []; foreach ($memberDNs as $dn) { - $memberUids[] = ldap_explode_dn($dn, false)[0]; + $memberUids[] = ldap_explode_dn($dn, 0)[0]; $userRecords[] = ['dn' => [$dn]]; } - - $access->connection = $this->createMock(Connection::class); - $uid = 'someUser'; $userDn = $memberDNs[0]; - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($name) { switch ($name) { @@ -647,65 +582,59 @@ class Group_LDAPTest extends TestCase { return 1; } }); - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('getFromCache') ->willReturn(null); - $access->userManager->expects($this->any()) + $this->access->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['uid', 'mail', 'displayname']); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('username2dn') ->with($uid) ->willReturn($userDn); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('groupname2dn') ->willReturn($groupDn); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturn($memberUids); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('fetchListOfUsers') ->willReturn($userRecords); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('combineFilterWithOr') ->willReturn('(|(pseudo=filter)(filter=pseudo))'); - $groupBackend = new GroupLDAP($access, $pluginManager); - $this->assertTrue($groupBackend->inGroup($uid, $gid)); + $this->initBackend(); + $this->assertTrue($this->groupBackend->inGroup($uid, $gid)); } - public function testGetGroupsWithOffset() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testGetGroupsWithOffset(): void { + $this->enableGroups(); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('nextcloudGroupNames') ->willReturn(['group1', 'group2']); - $groupBackend = new GroupLDAP($access, $pluginManager); - $groups = $groupBackend->getGroups('', 2, 2); + $this->initBackend(); + $groups = $this->groupBackend->getGroups('', 2, 2); $this->assertSame(2, count($groups)); } /** - * tests that a user listing is complete, if all it's members have the group + * tests that a user listing is complete, if all its members have the group * as their primary. */ - public function testUsersInGroupPrimaryMembersOnly() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testUsersInGroupPrimaryMembersOnly(): void { + $this->enableGroups(); - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('getFromCache') ->willReturn(null); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturnCallback(function ($dn, $attr) { if ($attr === 'primaryGroupToken') { @@ -715,43 +644,40 @@ class Group_LDAPTest extends TestCase { } return []; }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('groupname2dn') ->willReturn('cn=foobar,dc=foo,dc=bar'); - $access->expects($this->exactly(2)) + $this->access->expects($this->exactly(2)) ->method('nextcloudUserNames') ->willReturnOnConsecutiveCalls(['lisa', 'bart', 'kira', 'brad'], ['walle', 'dino', 'xenia']); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('isDNPartOfBase') ->willReturn(true); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('combineFilterWithAnd') ->willReturn('pseudo=filter'); - $access->userManager->expects($this->any()) + $this->access->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['displayName', 'mail']); - $groupBackend = new GroupLDAP($access, $pluginManager); - $users = $groupBackend->usersInGroup('foobar'); + $this->initBackend(); + $users = $this->groupBackend->usersInGroup('foobar'); $this->assertSame(7, count($users)); } /** - * tests that a user listing is complete, if all it's members have the group + * tests that a user listing is complete, if all its members have the group * as their primary. */ - public function testUsersInGroupPrimaryAndUnixMembers() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); + public function testUsersInGroupPrimaryAndUnixMembers(): void { + $this->enableGroups(); - $this->enableGroups($access); - - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('getFromCache') ->willReturn(null); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturnCallback(function ($dn, $attr) { if ($attr === 'primaryGroupToken') { @@ -759,44 +685,41 @@ class Group_LDAPTest extends TestCase { } return []; }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('groupname2dn') ->willReturn('cn=foobar,dc=foo,dc=bar'); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('nextcloudUserNames') ->willReturn(['lisa', 'bart', 'kira', 'brad']); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('isDNPartOfBase') ->willReturn(true); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('combineFilterWithAnd') ->willReturn('pseudo=filter'); - $access->userManager->expects($this->any()) + $this->access->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['displayName', 'mail']); - $groupBackend = new GroupLDAP($access, $pluginManager); - $users = $groupBackend->usersInGroup('foobar'); + $this->initBackend(); + $users = $this->groupBackend->usersInGroup('foobar'); $this->assertSame(4, count($users)); } /** - * tests that a user counting is complete, if all it's members have the group + * tests that a user counting is complete, if all its members have the group * as their primary. */ - public function testCountUsersInGroupPrimaryMembersOnly() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testCountUsersInGroupPrimaryMembersOnly(): void { + $this->enableGroups(); - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('getFromCache') ->willReturn(null); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturnCallback(function ($dn, $attr) { if ($attr === 'primaryGroupToken') { @@ -804,65 +727,63 @@ class Group_LDAPTest extends TestCase { } return []; }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('groupname2dn') ->willReturn('cn=foobar,dc=foo,dc=bar'); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('countUsers') ->willReturn(4); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('isDNPartOfBase') ->willReturn(true); - $access->userManager->expects($this->any()) + $this->access->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['displayName', 'mail']); - $groupBackend = new GroupLDAP($access, $pluginManager); - $users = $groupBackend->countUsersInGroup('foobar'); + $this->initBackend(); + $users = $this->groupBackend->countUsersInGroup('foobar'); $this->assertSame(4, $users); } - public function testGetUserGroupsMemberOf() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $this->enableGroups($access); + public function testGetUserGroupsMemberOf(): void { + $this->enableGroups(); $dn = 'cn=userX,dc=foobar'; - $access->connection->hasPrimaryGroups = false; - $access->connection->hasGidNumber = false; + $this->access->connection->hasPrimaryGroups = false; + $this->access->connection->hasGidNumber = false; + + $expectedGroups = ['cn=groupA,dc=foobar', 'cn=groupB,dc=foobar']; - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('username2dn') ->willReturn($dn); - $access->expects($this->exactly(5)) - ->method('readAttribute') - ->will($this->onConsecutiveCalls(['cn=groupA,dc=foobar', 'cn=groupB,dc=foobar'], [], [], [], [])); - $access->expects($this->any()) + $this->access->expects($this->exactly(5)) + ->method('readAttribute')->willReturnOnConsecutiveCalls($expectedGroups, [], [], [], []); + $this->access->expects($this->any()) ->method('dn2groupname') ->willReturnArgument(0); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('groupname2dn') ->willReturnArgument(0); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('isDNPartOfBase') ->willReturn(true); - $groupBackend = new GroupLDAP($access, $pluginManager); - $groups = $groupBackend->getUserGroups('userX'); + $this->config->expects($this->once()) + ->method('setUserValue') + ->with('userX', 'user_ldap', 'cached-group-memberships-', \json_encode($expectedGroups)); + + $this->initBackend(); + $groups = $this->groupBackend->getUserGroups('userX'); $this->assertSame(2, count($groups)); } - public function testGetUserGroupsMemberOfDisabled() { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - - $access->connection = $this->createMock(Connection::class); - $access->connection->expects($this->any()) + public function testGetUserGroupsMemberOfDisabled(): void { + $this->access->connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($name) { if ($name === 'useMemberOfToDetectMembership') { @@ -875,69 +796,187 @@ class Group_LDAPTest extends TestCase { $dn = 'cn=userX,dc=foobar'; - $access->connection->hasPrimaryGroups = false; - $access->connection->hasGidNumber = false; + $this->access->connection->hasPrimaryGroups = false; + $this->access->connection->hasGidNumber = false; - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('username2dn') ->willReturn($dn); - $access->expects($this->never()) + $this->access->expects($this->never()) ->method('readAttribute') ->with($dn, 'memberOf'); - $access->expects($this->once()) + $this->access->expects($this->once()) ->method('nextcloudGroupNames') ->willReturn([]); - $groupBackend = new GroupLDAP($access, $pluginManager); - $groupBackend->getUserGroups('userX'); + // empty group result should not be oer + $this->config->expects($this->once()) + ->method('setUserValue') + ->with('userX', 'user_ldap', 'cached-group-memberships-', '[]'); + + $ldapUser = $this->createMock(User::class); + + $this->access->userManager->expects($this->any()) + ->method('get') + ->with('userX') + ->willReturn($ldapUser); + + $userBackend = $this->createMock(User_Proxy::class); + $userBackend->expects($this->once()) + ->method('userExistsOnLDAP') + ->with('userX', true) + ->willReturn(true); + + $ncUser = $this->createMock(IUser::class); + $ncUser->expects($this->any()) + ->method('getBackend') + ->willReturn($userBackend); + + $this->ncUserManager->expects($this->once()) + ->method('get') + ->with('userX') + ->willReturn($ncUser); + + $this->initBackend(); + $this->groupBackend->getUserGroups('userX'); + } + + public function testGetUserGroupsOfflineUser(): void { + $this->enableGroups(); + + $offlineUser = $this->createMock(OfflineUser::class); + + $this->config->expects($this->any()) + ->method('getUserValue') + ->with('userX', 'user_ldap', 'cached-group-memberships-', $this->anything()) + ->willReturn(\json_encode(['groupB', 'groupF'])); + + $this->access->userManager->expects($this->any()) + ->method('get') + ->with('userX') + ->willReturn($offlineUser); + + $this->initBackend(); + $returnedGroups = $this->groupBackend->getUserGroups('userX'); + $this->assertCount(2, $returnedGroups); + $this->assertContains('groupB', $returnedGroups); + $this->assertContains('groupF', $returnedGroups); + } + + /** + * regression tests against a case where a json object was stored instead of expected list + * @see https://github.com/nextcloud/server/issues/42374 + */ + public function testGetUserGroupsOfflineUserUnexpectedJson(): void { + $this->enableGroups(); + + $offlineUser = $this->createMock(OfflineUser::class); + + $this->config->expects($this->any()) + ->method('getUserValue') + ->with('userX', 'user_ldap', 'cached-group-memberships-', $this->anything()) + // results in a json object: {"0":"groupB","2":"groupF"} + ->willReturn(\json_encode([0 => 'groupB', 2 => 'groupF'])); + + $this->access->userManager->expects($this->any()) + ->method('get') + ->with('userX') + ->willReturn($offlineUser); + + $this->initBackend(); + $returnedGroups = $this->groupBackend->getUserGroups('userX'); + $this->assertCount(2, $returnedGroups); + $this->assertContains('groupB', $returnedGroups); + $this->assertContains('groupF', $returnedGroups); + } + + public function testGetUserGroupsUnrecognizedOfflineUser(): void { + $this->enableGroups(); + $dn = 'cn=userX,dc=foobar'; + + $ldapUser = $this->createMock(User::class); + + $userBackend = $this->createMock(User_Proxy::class); + $userBackend->expects($this->once()) + ->method('userExistsOnLDAP') + ->with('userX', true) + ->willReturn(false); + + $ncUser = $this->createMock(IUser::class); + $ncUser->expects($this->any()) + ->method('getBackend') + ->willReturn($userBackend); + + $this->config->expects($this->atLeastOnce()) + ->method('getUserValue') + ->with('userX', 'user_ldap', 'cached-group-memberships-', $this->anything()) + ->willReturn(\json_encode(['groupB', 'groupF'])); + + $this->access->expects($this->any()) + ->method('username2dn') + ->willReturn($dn); + + $this->access->userManager->expects($this->any()) + ->method('get') + ->with('userX') + ->willReturn($ldapUser); + + $this->ncUserManager->expects($this->once()) + ->method('get') + ->with('userX') + ->willReturn($ncUser); + + $this->initBackend(); + $returnedGroups = $this->groupBackend->getUserGroups('userX'); + $this->assertCount(2, $returnedGroups); + $this->assertContains('groupB', $returnedGroups); + $this->assertContains('groupF', $returnedGroups); } - public function nestedGroupsProvider(): array { + public static function nestedGroupsProvider(): array { return [ [true], [false], ]; } - /** - * @dataProvider nestedGroupsProvider - */ - public function testGetGroupsByMember(bool $nestedGroups) { - $access = $this->getAccessMock(); - $pluginManager = $this->getPluginManagerMock(); - + #[\PHPUnit\Framework\Attributes\DataProvider('nestedGroupsProvider')] + public function testGetGroupsByMember(bool $nestedGroups): void { $groupFilter = '(&(objectclass=nextcloudGroup)(nextcloudEnabled=TRUE))'; - $access->connection = $this->createMock(Connection::class); - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('__get') - ->willReturnCallback(function ($name) use ($nestedGroups, $groupFilter) { + ->willReturnCallback(function (string $name) use ($nestedGroups, $groupFilter) { switch ($name) { case 'useMemberOfToDetectMembership': return 0; case 'ldapDynamicGroupMemberURL': return ''; case 'ldapNestedGroups': - return $nestedGroups; + return (int)$nestedGroups; case 'ldapGroupMemberAssocAttr': return 'member'; case 'ldapGroupFilter': return $groupFilter; + case 'ldapBaseGroups': + return []; + case 'ldapGroupDisplayName': + return 'cn'; } return 1; }); $dn = 'cn=userX,dc=foobar'; - $access->connection->hasPrimaryGroups = false; - $access->connection->hasGidNumber = false; + $this->access->connection->hasPrimaryGroups = false; + $this->access->connection->hasGidNumber = false; - $access->expects($this->exactly(2)) + $this->access->expects($this->exactly(2)) ->method('username2dn') ->willReturn($dn); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('readAttribute') ->willReturn([]); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('combineFilterWithAnd') ->willReturnCallback(function (array $filterParts) { // ⚠ returns a pseudo-filter only, not real LDAP Filter syntax @@ -947,389 +986,380 @@ class Group_LDAPTest extends TestCase { $group1 = [ 'cn' => 'group1', 'dn' => ['cn=group1,ou=groups,dc=domain,dc=com'], + 'member' => [$dn], ]; $group2 = [ 'cn' => 'group2', 'dn' => ['cn=group2,ou=groups,dc=domain,dc=com'], + 'member' => [$dn], + ]; + $group3 = [ + 'cn' => 'group3', + 'dn' => ['cn=group3,ou=groups,dc=domain,dc=com'], + 'member' => [$group2['dn'][0]], ]; - $access->expects($this->once()) + $expectedGroups = ($nestedGroups ? [$group1, $group2, $group3] : [$group1, $group2]); + $expectedGroupsNames = ($nestedGroups ? ['group1', 'group2', 'group3'] : ['group1', 'group2']); + + $this->access->expects($this->any()) ->method('nextcloudGroupNames') - ->with([$group1, $group2]) - ->willReturn(['group1', 'group2']); - $access->expects($nestedGroups ? $this->atLeastOnce() : $this->once()) + ->with($expectedGroups) + ->willReturn($expectedGroupsNames); + $this->access->expects($nestedGroups ? $this->atLeastOnce() : $this->once()) ->method('fetchListOfGroups') - ->willReturnCallback(function ($filter, $attr, $limit, $offset) use ($nestedGroups, $groupFilter, $group1, $group2) { + ->willReturnCallback(function ($filter, $attr, $limit, $offset) use ($nestedGroups, $groupFilter, $group1, $group2, $group3, $dn) { static $firstRun = true; if (!$nestedGroups) { // When nested groups are enabled, groups cannot be filtered early as it would // exclude intermediate groups. But we can, and should, when working with flat groups. - $this->assertTrue(strpos($filter, $groupFilter) !== false); + $this->assertTrue(str_contains($filter, $groupFilter)); } - if ($firstRun) { - $firstRun = false; + [$memberFilter] = explode('&', $filter); + if ($memberFilter === 'member=' . $dn) { return [$group1, $group2]; + return []; + } elseif ($memberFilter === 'member=' . $group2['dn'][0]) { + return [$group3]; + } else { + return []; } - return []; }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('dn2groupname') ->willReturnCallback(function (string $dn) { return ldap_explode_dn($dn, 1)[0]; }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('groupname2dn') - ->willReturnCallback(function (string $gid) use ($group1, $group2) { + ->willReturnCallback(function (string $gid) use ($group1, $group2, $group3) { if ($gid === $group1['cn']) { return $group1['dn'][0]; } if ($gid === $group2['cn']) { return $group2['dn'][0]; } + if ($gid === $group3['cn']) { + return $group3['dn'][0]; + } }); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('isDNPartOfBase') ->willReturn(true); - $groupBackend = new GroupLDAP($access, $pluginManager); - $groups = $groupBackend->getUserGroups('userX'); - $this->assertEquals(['group1', 'group2'], $groups); + $this->initBackend(); + $groups = $this->groupBackend->getUserGroups('userX'); + $this->assertEquals($expectedGroupsNames, $groups); - $groupsAgain = $groupBackend->getUserGroups('userX'); - $this->assertEquals(['group1', 'group2'], $groupsAgain); + $groupsAgain = $this->groupBackend->getUserGroups('userX'); + $this->assertEquals($expectedGroupsNames, $groupsAgain); } - public function testCreateGroupWithPlugin() { - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'createGroup']) + public function testCreateGroupWithPlugin(): void { + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'createGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::CREATE_GROUP) ->willReturn(true); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('createGroup') ->with('gid') ->willReturn('result'); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $this->assertEquals($ldap->createGroup('gid'), true); + $this->initBackend(); + $this->assertTrue($this->groupBackend->createGroup('gid')); } - public function testCreateGroupFailing() { + public function testCreateGroupFailing(): void { $this->expectException(\Exception::class); - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'createGroup']) + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'createGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::CREATE_GROUP) ->willReturn(false); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $ldap->createGroup('gid'); + $this->initBackend(); + $this->groupBackend->createGroup('gid'); } - public function testDeleteGroupWithPlugin() { - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'deleteGroup']) + public function testDeleteGroupWithPlugin(): void { + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'deleteGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::DELETE_GROUP) ->willReturn(true); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('deleteGroup') ->with('gid') - ->willReturn('result'); + ->willReturn(true); $mapper = $this->getMockBuilder(GroupMapping::class) - ->setMethods(['unmap']) + ->onlyMethods(['unmap']) ->disableOriginalConstructor() ->getMock(); - $access = $this->getAccessMock(); - $access->expects($this->any()) + $this->access->expects($this->any()) ->method('getGroupMapper') ->willReturn($mapper); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $this->assertEquals($ldap->deleteGroup('gid'), 'result'); + $this->initBackend(); + $this->assertTrue($this->groupBackend->deleteGroup('gid')); } - public function testDeleteGroupFailing() { + public function testDeleteGroupFailing(): void { $this->expectException(\Exception::class); - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'deleteGroup']) + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'deleteGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::DELETE_GROUP) ->willReturn(false); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $ldap->deleteGroup('gid'); + $this->initBackend(); + $this->groupBackend->deleteGroup('gid'); } - public function testAddToGroupWithPlugin() { - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'addToGroup']) + public function testAddToGroupWithPlugin(): void { + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'addToGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::ADD_TO_GROUP) ->willReturn(true); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('addToGroup') ->with('uid', 'gid') ->willReturn('result'); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $this->assertEquals($ldap->addToGroup('uid', 'gid'), 'result'); + $this->initBackend(); + $this->assertEquals('result', $this->groupBackend->addToGroup('uid', 'gid')); } - public function testAddToGroupFailing() { + public function testAddToGroupFailing(): void { $this->expectException(\Exception::class); - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'addToGroup']) + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'addToGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::ADD_TO_GROUP) ->willReturn(false); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $ldap->addToGroup('uid', 'gid'); + $this->initBackend(); + $this->groupBackend->addToGroup('uid', 'gid'); } - public function testRemoveFromGroupWithPlugin() { - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'removeFromGroup']) + public function testRemoveFromGroupWithPlugin(): void { + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'removeFromGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::REMOVE_FROM_GROUP) ->willReturn(true); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('removeFromGroup') ->with('uid', 'gid') ->willReturn('result'); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $this->assertEquals($ldap->removeFromGroup('uid', 'gid'), 'result'); + $this->initBackend(); + $this->assertEquals('result', $this->groupBackend->removeFromGroup('uid', 'gid')); } - public function testRemoveFromGroupFailing() { + public function testRemoveFromGroupFailing(): void { $this->expectException(\Exception::class); - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'removeFromGroup']) + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'removeFromGroup']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::REMOVE_FROM_GROUP) ->willReturn(false); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $ldap->removeFromGroup('uid', 'gid'); + $this->initBackend(); + $this->groupBackend->removeFromGroup('uid', 'gid'); } - public function testGetGroupDetailsWithPlugin() { + public function testGetGroupDetailsWithPlugin(): void { /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'getGroupDetails']) + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'getGroupDetails']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::GROUP_DETAILS) ->willReturn(true); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('getGroupDetails') ->with('gid') ->willReturn('result'); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $this->assertEquals($ldap->getGroupDetails('gid'), 'result'); + $this->initBackend(); + $this->assertEquals('result', $this->groupBackend->getGroupDetails('gid')); } - - public function testGetGroupDetailsFailing() { + public function testGetGroupDetailsFailing(): void { $this->expectException(\Exception::class); - /** @var GroupPluginManager|MockObject $pluginManager */ - $pluginManager = $this->getMockBuilder(GroupPluginManager::class) - ->setMethods(['implementsActions', 'getGroupDetails']) + $this->pluginManager = $this->getMockBuilder(GroupPluginManager::class) + ->onlyMethods(['implementsActions', 'getGroupDetails']) ->getMock(); - $pluginManager->expects($this->once()) + $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(GroupInterface::GROUP_DETAILS) ->willReturn(false); - $access = $this->getAccessMock(); - $access->connection = $this->createMock(Connection::class); - - $ldap = new GroupLDAP($access, $pluginManager); - - $ldap->getGroupDetails('gid'); + $this->initBackend(); + $this->groupBackend->getGroupDetails('gid'); } - public function groupMemberProvider() { + public static function groupMemberProvider(): array { $base = 'dc=species,dc=earth'; - $groups0 = [ + $birdsDn = [ 'uid=3723,' . $base, 'uid=8372,' . $base, 'uid=8427,' . $base, 'uid=2333,' . $base, 'uid=4754,' . $base, ]; - $groups1 = [ + $birdsUid = [ '3723', '8372', '8427', '2333', '4754', ]; - $groups2Nested = ['6642', '1424']; - $expGroups2 = array_merge($groups1, $groups2Nested); + $animalsDn = [ + 'uid=lion,' . $base, + 'uid=tiger,' . $base, + ]; + $plantsDn = [ + 'uid=flower,' . $base, + 'uid=tree,' . $base, + ]; + $thingsDn = [ + 'uid=thing1,' . $base, + 'uid=thing2,' . $base, + ]; return [ [ #0 – test DNs - 'cn=Birds,' . $base, - $groups0, - ['cn=Birds,' . $base => $groups0] + ['cn=Birds,' . $base => $birdsDn], + ['cn=Birds,' . $base => $birdsDn] ], [ #1 – test uids - 'cn=Birds,' . $base, - $groups1, - ['cn=Birds,' . $base => $groups1] + ['cn=Birds,' . $base => $birdsUid], + ['cn=Birds,' . $base => $birdsUid] + ], + [ #2 – test simple nested group + ['cn=Animals,' . $base => array_merge($birdsDn, $animalsDn)], + [ + 'cn=Animals,' . $base => array_merge(['cn=Birds,' . $base], $animalsDn), + 'cn=Birds,' . $base => $birdsDn, + ] + ], + [ #3 – test recursive nested group + [ + 'cn=Animals,' . $base => array_merge($birdsDn, $animalsDn), + 'cn=Birds,' . $base => array_merge($birdsDn, $animalsDn), + ], + [ + 'cn=Animals,' . $base => array_merge(['cn=Birds,' . $base,'cn=Birds,' . $base,'cn=Animals,' . $base], $animalsDn), + 'cn=Birds,' . $base => array_merge(['cn=Animals,' . $base,'cn=Birds,' . $base], $birdsDn), + ] + ], + [ #4 – Complicated nested group + ['cn=Things,' . $base => array_merge($birdsDn, $animalsDn, $thingsDn, $plantsDn)], + [ + 'cn=Animals,' . $base => array_merge(['cn=Birds,' . $base], $animalsDn), + 'cn=Birds,' . $base => $birdsDn, + 'cn=Plants,' . $base => $plantsDn, + 'cn=Things,' . $base => array_merge(['cn=Animals,' . $base,'cn=Plants,' . $base], $thingsDn), + ] ], ]; } - /** - * @param string $groupDN - * @param string[] $expectedMembers - * @param array $groupsInfo - * @dataProvider groupMemberProvider - */ - public function testGroupMembers($groupDN, $expectedMembers, $groupsInfo = null) { - $access = $this->getAccessMock(); - $access->expects($this->any()) + #[\PHPUnit\Framework\Attributes\DataProvider('groupMemberProvider')] + public function testGroupMembers(array $expectedResult, array $groupsInfo): void { + $this->access->expects($this->any()) ->method('readAttribute') - ->willReturnCallback(function ($group) use ($groupDN, $expectedMembers, $groupsInfo) { + ->willReturnCallback(function ($group) use ($groupsInfo) { if (isset($groupsInfo[$group])) { return $groupsInfo[$group]; } return []; }); - $access->connection = $this->createMock(Connection::class); - if (count($groupsInfo) > 1) { - $access->connection->expects($this->any()) - ->method('__get') - ->willReturnCallback(function ($name) { - if ($name === 'ldapNestedGroups') { - return 1; - } - return null; - }); - } - - /** @var GroupPluginManager $pluginManager */ - $pluginManager = $this->createMock(GroupPluginManager::class); + $this->access->connection->expects($this->any()) + ->method('__get') + ->willReturnCallback(function (string $name) { + if ($name === 'ldapNestedGroups') { + return 1; + } elseif ($name === 'ldapGroupMemberAssocAttr') { + return 'attr'; + } + return null; + }); - $ldap = new GroupLDAP($access, $pluginManager); - $resultingMembers = $this->invokePrivate($ldap, '_groupMembers', [$groupDN]); + $this->initBackend(); + foreach ($expectedResult as $groupDN => $expectedMembers) { + $resultingMembers = $this->invokePrivate($this->groupBackend, '_groupMembers', [$groupDN]); - $this->assertEqualsCanonicalizing($expectedMembers, $resultingMembers); + sort($expectedMembers); + sort($resultingMembers); + $this->assertEquals($expectedMembers, $resultingMembers); + } } - public function displayNameProvider() { + public static function displayNameProvider(): array { return [ ['Graphic Novelists', ['Graphic Novelists']], ['', false], ]; } - /** - * @dataProvider displayNameProvider - */ - public function testGetDisplayName(string $expected, $ldapResult) { + #[\PHPUnit\Framework\Attributes\DataProvider('displayNameProvider')] + public function testGetDisplayName(string $expected, bool|array $ldapResult): void { $gid = 'graphic_novelists'; - $access = $this->getAccessMock(); - $access->expects($this->atLeastOnce()) + $this->access->expects($this->atLeastOnce()) ->method('readAttribute') ->willReturn($ldapResult); - $access->connection = $this->createMock(Connection::class); - $access->connection->expects($this->any()) + $this->access->connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($name) { if ($name === 'ldapGroupMemberAssocAttr') { @@ -1342,10 +1372,11 @@ class Group_LDAPTest extends TestCase { return null; }); - /** @var GroupPluginManager $pluginManager */ - $pluginManager = $this->createMock(GroupPluginManager::class); + $this->access->expects($this->any()) + ->method('groupname2dn') + ->willReturn('fakedn'); - $ldap = new GroupLDAP($access, $pluginManager); - $this->assertSame($expected, $ldap->getDisplayName($gid)); + $this->initBackend(); + $this->assertSame($expected, $this->groupBackend->getDisplayName($gid)); } } diff --git a/apps/user_ldap/tests/HelperTest.php b/apps/user_ldap/tests/HelperTest.php index 347e2c63820..adea600d900 100644 --- a/apps/user_ldap/tests/HelperTest.php +++ b/apps/user_ldap/tests/HelperTest.php @@ -1,80 +1,69 @@ <?php + +declare(strict_types=1); /** - * - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\Helper; -use OCP\IConfig; +use OCP\IAppConfig; +use OCP\IDBConnection; +use OCP\Server; +use PHPUnit\Framework\MockObject\MockObject; /** * @group DB */ class HelperTest extends \Test\TestCase { + private IAppConfig&MockObject $appConfig; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - private $config; - - /** @var Helper */ - private $helper; + private Helper $helper; protected function setUp(): void { parent::setUp(); - $this->config = $this->createMock(IConfig::class); - $this->helper = new Helper($this->config, \OC::$server->getDatabaseConnection()); + $this->appConfig = $this->createMock(IAppConfig::class); + $this->helper = new Helper( + $this->appConfig, + Server::get(IDBConnection::class) + ); } - public function testGetServerConfigurationPrefixes() { - $this->config->method('getAppKeys') - ->with($this->equalTo('user_ldap')) + public function testGetServerConfigurationPrefixes(): void { + $this->appConfig->method('getKeys') + ->with('user_ldap') ->willReturn([ 'foo', 'ldap_configuration_active', 's1ldap_configuration_active', ]); + $this->appConfig->method('getValueArray') + ->with('user_ldap', 'configuration_prefixes') + -> willReturnArgument(2); + $result = $this->helper->getServerConfigurationPrefixes(false); $this->assertEquals(['', 's1'], $result); } - public function testGetServerConfigurationPrefixesActive() { - $this->config->method('getAppKeys') - ->with($this->equalTo('user_ldap')) + public function testGetServerConfigurationPrefixesActive(): void { + $this->appConfig->method('getKeys') + ->with('user_ldap') ->willReturn([ 'foo', 'ldap_configuration_active', 's1ldap_configuration_active', ]); - $this->config->method('getAppValue') + $this->appConfig->method('getValueArray') + ->with('user_ldap', 'configuration_prefixes') + -> willReturnArgument(2); + + $this->appConfig->method('getValueString') ->willReturnCallback(function ($app, $key, $default) { - if ($app !== 'user_ldap') { - $this->fail('wrong app'); - } if ($key === 's1ldap_configuration_active') { return '1'; } @@ -86,21 +75,58 @@ class HelperTest extends \Test\TestCase { $this->assertEquals(['s1'], $result); } - public function testGetServerConfigurationHost() { - $this->config->method('getAppKeys') - ->with($this->equalTo('user_ldap')) + public function testGetServerConfigurationHostFromAppKeys(): void { + $this->appConfig->method('getKeys') + ->with('user_ldap') ->willReturn([ 'foo', 'ldap_host', 's1ldap_host', 's02ldap_host', + 'ldap_configuration_active', + 's1ldap_configuration_active', + 's02ldap_configuration_active', ]); - $this->config->method('getAppValue') + $this->appConfig->method('getValueArray') + ->with('user_ldap', 'configuration_prefixes') + -> willReturnArgument(2); + + $this->appConfig->method('getValueString') ->willReturnCallback(function ($app, $key, $default) { - if ($app !== 'user_ldap') { - $this->fail('wrong app'); + if ($key === 'ldap_host') { + return 'example.com'; } + if ($key === 's1ldap_host') { + return 'foo.bar.com'; + } + return $default; + }); + + $result = $this->helper->getServerConfigurationHosts(); + + $this->assertEquals([ + '' => 'example.com', + 's1' => 'foo.bar.com', + 's02' => '', + ], $result); + } + + public function testGetServerConfigurationHost(): void { + $this->appConfig + ->expects(self::never()) + ->method('getKeys'); + + $this->appConfig->method('getValueArray') + ->with('user_ldap', 'configuration_prefixes') + -> willReturn([ + '', + 's1', + 's02', + ]); + + $this->appConfig->method('getValueString') + ->willReturnCallback(function ($app, $key, $default) { if ($key === 'ldap_host') { return 'example.com'; } diff --git a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php index d0f2e8d4a95..00f8be18586 100644 --- a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php +++ b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php @@ -1,49 +1,32 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author root <root@localhost.localdomain> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Integration; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; -use OCA\User_LDAP\FilesystemHelper; use OCA\User_LDAP\GroupPluginManager; use OCA\User_LDAP\Helper; use OCA\User_LDAP\LDAP; -use OCA\User_LDAP\LogWrapper; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\UserPluginManager; +use OCP\IAvatarManager; +use OCP\IConfig; +use OCP\Image; +use OCP\IUserManager; +use OCP\Server; use OCP\Share\IManager; +use Psr\Log\LoggerInterface; abstract class AbstractIntegrationTest { - /** @var LDAP */ + /** @var LDAP */ protected $ldap; - /** @var Connection */ + /** @var Connection */ protected $connection; /** @var Access */ @@ -55,14 +38,19 @@ abstract class AbstractIntegrationTest { /** @var Helper */ protected $helper; - /** @var string */ - protected $base; - /** @var string[] */ protected $server; - public function __construct($host, $port, $bind, $pwd, $base) { - $this->base = $base; + /** + * @param string $base + */ + public function __construct( + $host, + $port, + $bind, + $pwd, + protected $base, + ) { $this->server = [ 'host' => $host, 'port' => $port, @@ -77,10 +65,10 @@ abstract class AbstractIntegrationTest { */ public function init() { \OC::$server->registerService(UserPluginManager::class, function () { - return new \OCA\User_LDAP\UserPluginManager(); + return new UserPluginManager(); }); \OC::$server->registerService(GroupPluginManager::class, function () { - return new \OCA\User_LDAP\GroupPluginManager(); + return new GroupPluginManager(); }); $this->initLDAPWrapper(); @@ -122,14 +110,13 @@ abstract class AbstractIntegrationTest { */ protected function initUserManager() { $this->userManager = new Manager( - \OC::$server->getConfig(), - new FilesystemHelper(), - new LogWrapper(), - \OC::$server->getAvatarManager(), - new \OCP\Image(), - \OC::$server->getUserManager(), - \OC::$server->getNotificationManager(), - \OC::$server->get(IManager::class) + Server::get(IConfig::class), + Server::get(LoggerInterface::class), + Server::get(IAvatarManager::class), + new Image(), + Server::get(IUserManager::class), + Server::get(\OCP\Notification\IManager::class), + Server::get(IManager::class) ); } @@ -137,14 +124,14 @@ abstract class AbstractIntegrationTest { * initializes the test Helper */ protected function initHelper() { - $this->helper = new Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $this->helper = Server::get(Helper::class); } /** * initializes the Access test instance */ protected function initAccess() { - $this->access = new Access($this->connection, $this->ldap, $this->userManager, $this->helper, \OC::$server->getConfig()); + $this->access = new Access($this->connection, $this->ldap, $this->userManager, $this->helper, Server::get(IConfig::class), Server::get(LoggerInterface::class)); } /** @@ -156,7 +143,7 @@ abstract class AbstractIntegrationTest { $methods = get_class_methods($this); $atLeastOneCaseRan = false; foreach ($methods as $method) { - if (strpos($method, 'case') === 0) { + if (str_starts_with($method, 'case')) { print("running $method " . PHP_EOL); try { if (!$this->$method()) { diff --git a/apps/user_ldap/tests/Integration/Bootstrap.php b/apps/user_ldap/tests/Integration/Bootstrap.php index afa92dac958..ef0909d4bea 100644 --- a/apps/user_ldap/tests/Integration/Bootstrap.php +++ b/apps/user_ldap/tests/Integration/Bootstrap.php @@ -1,26 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - define('CLI_TEST_RUN', true); -require_once __DIR__ . '/../../../../lib/base.php'; +require_once __DIR__ . '/../../../../lib/base.php'; require_once __DIR__ . '/setup-scripts/config.php'; diff --git a/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php b/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php index e78208e579c..3eec3df675a 100644 --- a/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php +++ b/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php @@ -1,33 +1,16 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Integration; use OC\ServerNotAvailableException; use OCA\User_LDAP\LDAP; +use OCP\App\IAppManager; +use OCP\Server; /** * Class ExceptionOnLostConnection @@ -40,44 +23,29 @@ use OCA\User_LDAP\LDAP; * */ class ExceptionOnLostConnection { - /** @var string */ - private $toxiProxyHost; - - /** @var string */ - private $toxiProxyName; - - /** @var string */ - private $ldapBase; - - /** @var string|null */ - private $ldapBindDN; - - /** @var string|null */ - private $ldapBindPwd; - - /** @var string */ + /** @var string */ private $ldapHost; - /** @var \OCA\User_LDAP\LDAP */ + /** @var LDAP */ private $ldap; - /** @var bool */ + /** @var bool */ private $originalProxyState; /** - * @param string $proxyHost host of toxiproxy as url, like http://localhost:8474 - * @param string $proxyName name of the LDAP proxy service as configured in toxiProxy + * @param string $toxiProxyHost host of toxiproxy as url, like http://localhost:8474 + * @param string $toxiProxyName name of the LDAP proxy service as configured in toxiProxy * @param string $ldapBase any valid LDAP base DN - * @param null $bindDN optional, bind DN if anonymous bind is not possible - * @param null $bindPwd optional + * @param null $ldapBindDN optional, bind DN if anonymous bind is not possible + * @param null $ldapBindPwd optional */ - public function __construct($proxyHost, $proxyName, $ldapBase, $bindDN = null, $bindPwd = null) { - $this->toxiProxyHost = $proxyHost; - $this->toxiProxyName = $proxyName; - $this->ldapBase = $ldapBase; - $this->ldapBindDN = $bindDN; - $this->ldapBindPwd = $bindPwd; - + public function __construct( + private $toxiProxyHost, + private $toxiProxyName, + private $ldapBase, + private $ldapBindDN = null, + private $ldapBindPwd = null, + ) { $this->setUp(); } @@ -96,8 +64,8 @@ class ExceptionOnLostConnection { * @throws \Exception */ public function setUp(): void { - require_once __DIR__ . '/../../../../lib/base.php'; - \OC_App::loadApps(['user_ldap']); + require_once __DIR__ . '/../../../../lib/base.php'; + Server::get(IAppManager::class)->loadApps(['user_ldap']); $ch = $this->getCurl(); $proxyInfoJson = curl_exec($ch); @@ -136,10 +104,10 @@ class ExceptionOnLostConnection { try { $this->ldap->search($cr, $this->ldapBase, 'objectClass=*', ['dn'], true, 5); } catch (ServerNotAvailableException $e) { - print("Test PASSED" . PHP_EOL); + print('Test PASSED' . PHP_EOL); exit(0); } - print("Test FAILED" . PHP_EOL); + print('Test FAILED' . PHP_EOL); exit(1); } @@ -147,7 +115,7 @@ class ExceptionOnLostConnection { * tests whether a curl operation ran successfully. If not, an exception * is thrown * - * @param resource $ch + * @param resource|\CurlHandle $ch * @param mixed $result * @throws \Exception */ @@ -183,7 +151,7 @@ class ExceptionOnLostConnection { /** * initializes a curl handler towards the toxiproxy LDAP proxy service - * @return resource + * @return resource|\CurlHandle */ private function getCurl() { $ch = curl_init(); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php index 5669e2164b7..e1529384239 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php @@ -1,36 +1,25 @@ <?php + /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - -namespace OCA\user_ldap\tests\Integration\Lib; +namespace OCA\User_LDAP\Tests\Integration\Lib; use OCA\User_LDAP\Group_LDAP; use OCA\User_LDAP\GroupPluginManager; use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IGroupManager; +use OCP\IUserManager; +use OCP\Server; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../Bootstrap.php'; @@ -44,28 +33,28 @@ class IntegrationTestAttributeDetection extends AbstractIntegrationTest { $this->connection->setConfiguration(['ldapGroupFilter' => 'objectClass=groupOfNames']); $this->connection->setConfiguration(['ldapGroupMemberAssocAttr' => 'member']); - $userMapper = new UserMapping(\OC::$server->getDatabaseConnection()); + $userMapper = new UserMapping(Server::get(IDBConnection::class)); $userMapper->clear(); $this->access->setUserMapper($userMapper); - $groupMapper = new GroupMapping(\OC::$server->getDatabaseConnection()); + $groupMapper = new GroupMapping(Server::get(IDBConnection::class)); $groupMapper->clear(); $this->access->setGroupMapper($groupMapper); - $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); - $userManager = \OC::$server->getUserManager(); + $userBackend = new User_LDAP($this->access, Server::get(\OCP\Notification\IManager::class), Server::get(UserPluginManager::class), Server::get(LoggerInterface::class), Server::get(DeletedUsersIndex::class)); + $userManager = Server::get(IUserManager::class); $userManager->clearBackends(); $userManager->registerBackend($userBackend); - $groupBackend = new Group_LDAP($this->access, \OC::$server->query(GroupPluginManager::class)); - $groupManger = \OC::$server->getGroupManager(); + $groupBackend = new Group_LDAP($this->access, Server::get(GroupPluginManager::class), Server::get(IConfig::class)); + $groupManger = Server::get(IGroupManager::class); $groupManger->clearBackends(); $groupManger->addBackend($groupBackend); } protected function caseNativeUUIDAttributeUsers() { // trigger importing of users which also triggers UUID attribute detection - \OC::$server->getUserManager()->search('', 5, 0); + Server::get(IUserManager::class)->search('', 5, 0); return $this->connection->ldapUuidUserAttribute === 'entryuuid'; } @@ -74,7 +63,7 @@ class IntegrationTestAttributeDetection extends AbstractIntegrationTest { // are similar, but we take no chances. // trigger importing of users which also triggers UUID attribute detection - \OC::$server->getGroupManager()->search('', 5, 0); + Server::get(IGroupManager::class)->search('', 5, 0); return $this->connection->ldapUuidGroupAttribute === 'entryuuid'; } } diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php index dc483ebec6d..8a1093e4304 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php @@ -1,26 +1,10 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Integration\Lib; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php index 7fc10996640..1c2d7145ddf 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php @@ -1,39 +1,25 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Integration\Lib; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use OCP\IDBConnection; +use OCP\Server; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest { - /** @var UserMapping */ + /** @var UserMapping */ protected $mapping; /** @var User_LDAP */ @@ -47,10 +33,10 @@ class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest { require(__DIR__ . '/../setup-scripts/createExplicitUsers.php'); parent::init(); - $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); + $this->mapping = new UserMapping(Server::get(IDBConnection::class)); $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); + $this->backend = new User_LDAP($this->access, Server::get(\OCP\Notification\IManager::class), Server::get(UserPluginManager::class), Server::get(LoggerInterface::class), Server::get(DeletedUsersIndex::class)); } /** diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php index 066c91a149b..3e21d22fca3 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php @@ -1,40 +1,24 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Integration\Lib; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use OCP\Server; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestPaging extends AbstractIntegrationTest { - /** @var UserMapping */ + /** @var UserMapping */ protected $mapping; /** @var User_LDAP */ @@ -51,7 +35,7 @@ class IntegrationTestPaging extends AbstractIntegrationTest { require(__DIR__ . '/../setup-scripts/createExplicitUsers.php'); parent::init(); - $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); + $this->backend = new User_LDAP($this->access, Server::get(\OCP\Notification\IManager::class), Server::get(UserPluginManager::class), Server::get(LoggerInterface::class), Server::get(DeletedUsersIndex::class)); } public function initConnection() { diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php index 70ba46dba0c..6726143a449 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php @@ -1,47 +1,31 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Integration\Lib\User; -use OCA\User_LDAP\FilesystemHelper; -use OCA\User_LDAP\LogWrapper; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\User; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use OCP\IAvatarManager; +use OCP\IConfig; +use OCP\IDBConnection; use OCP\Image; +use OCP\IUserManager; +use OCP\Server; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../../Bootstrap.php'; class IntegrationTestUserAvatar extends AbstractIntegrationTest { - /** @var UserMapping */ + /** @var UserMapping */ protected $mapping; /** @@ -51,11 +35,11 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest { public function init() { require(__DIR__ . '/../../setup-scripts/createExplicitUsers.php'); parent::init(); - $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); + $this->mapping = new UserMapping(Server::get(IDBConnection::class)); $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); - \OC_User::useBackend($userBackend); + $userBackend = new User_LDAP($this->access, Server::get(\OCP\Notification\IManager::class), Server::get(UserPluginManager::class), Server::get(LoggerInterface::class), Server::get(DeletedUsersIndex::class)); + Server::get(IUserManager::class)->registerBackend($userBackend); } /** @@ -77,9 +61,9 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest { \OC_Util::tearDownFS(); \OC_Util::setupFS($username); \OC::$server->getUserFolder($username); - \OC::$server->getConfig()->deleteUserValue($username, 'user_ldap', User::USER_PREFKEY_LASTREFRESH); - if (\OC::$server->getAvatarManager()->getAvatar($username)->exists()) { - \OC::$server->getAvatarManager()->getAvatar($username)->remove(); + Server::get(IConfig::class)->deleteUserValue($username, 'user_ldap', User::USER_PREFKEY_LASTREFRESH); + if (Server::get(IAvatarManager::class)->getAvatar($username)->exists()) { + Server::get(IAvatarManager::class)->getAvatar($username)->remove(); } // finally attempt to get the avatar set @@ -99,7 +83,7 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest { $this->execFetchTest($dn, $username, $image); - return \OC::$server->getAvatarManager()->getAvatar($username)->exists(); + return Server::get(IAvatarManager::class)->getAvatar($username)->exists(); } /** @@ -116,7 +100,7 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest { $this->execFetchTest($dn, $username, $image); - return !\OC::$server->getAvatarManager()->getAvatar($username)->exists(); + return !Server::get(IAvatarManager::class)->getAvatar($username)->exists(); } /** @@ -133,14 +117,13 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest { protected function initUserManager() { $this->userManager = new Manager( - \OC::$server->getConfig(), - new FilesystemHelper(), - new LogWrapper(), - \OC::$server->getAvatarManager(), + Server::get(IConfig::class), + Server::get(LoggerInterface::class), + Server::get(IAvatarManager::class), new Image(), - \OC::$server->getDatabaseConnection(), - \OC::$server->getUserManager(), - \OC::$server->getNotificationManager() + Server::get(IDBConnection::class), + Server::get(IUserManager::class), + Server::get(\OCP\Notification\IManager::class) ); } diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php index cefebe9f94e..9b05298a151 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php @@ -1,39 +1,27 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Integration\Lib\User; use OCA\User_LDAP\Jobs\CleanUp; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use OCP\IDBConnection; +use OCP\IUserManager; +use OCP\Server; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../../Bootstrap.php'; class IntegrationTestUserCleanUp extends AbstractIntegrationTest { - /** @var UserMapping */ + /** @var UserMapping */ protected $mapping; /** @@ -43,12 +31,12 @@ class IntegrationTestUserCleanUp extends AbstractIntegrationTest { public function init() { require(__DIR__ . '/../../setup-scripts/createExplicitUsers.php'); parent::init(); - $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); + $this->mapping = new UserMapping(Server::get(IDBConnection::class)); $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); - \OC_User::useBackend($userBackend); + $userBackend = new User_LDAP($this->access, Server::get(\OCP\Notification\IManager::class), Server::get(UserPluginManager::class), Server::get(LoggerInterface::class), Server::get(DeletedUsersIndex::class)); + Server::get(IUserManager::class)->registerBackend($userBackend); } /** @@ -85,13 +73,13 @@ class IntegrationTestUserCleanUp extends AbstractIntegrationTest { // user instance must not be requested from global user manager, before // it is deleted from the LDAP server. The instance will be returned // from cache and may false-positively confirm the correctness. - $user = \OC::$server->getUserManager()->get($username); + $user = Server::get(IUserManager::class)->get($username); if ($user === null) { return false; } $user->delete(); - return null === \OC::$server->getUserManager()->get($username); + return Server::get(IUserManager::class)->get($username) === null; } } diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php index ace04e6234f..6fbfd9ba51b 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php @@ -1,39 +1,26 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Integration\Lib\User; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\UserPluginManager; +use OCP\IDBConnection; +use OCP\IUserManager; +use OCP\Server; +use Psr\Log\LoggerInterface; require_once __DIR__ . '/../../Bootstrap.php'; class IntegrationTestUserDisplayName extends AbstractIntegrationTest { - /** @var UserMapping */ + /** @var UserMapping */ protected $mapping; /** @@ -43,11 +30,11 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest { public function init() { require(__DIR__ . '/../../setup-scripts/createExplicitUsers.php'); parent::init(); - $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); + $this->mapping = new UserMapping(Server::get(IDBConnection::class)); $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query(UserPluginManager::class)); - \OC_User::useBackend($userBackend); + $userBackend = new User_LDAP($this->access, Server::get(\OCP\Notification\IManager::class), Server::get(UserPluginManager::class), Server::get(LoggerInterface::class), Server::get(DeletedUsersIndex::class)); + Server::get(IUserManager::class)->registerBackend($userBackend); } /** @@ -70,9 +57,9 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest { $username = 'alice1337'; $dn = 'uid=alice,ou=Users,' . $this->base; $this->prepareUser($dn, $username); - $displayName = \OC::$server->getUserManager()->get($username)->getDisplayName(); + $displayName = Server::get(IUserManager::class)->get($username)->getDisplayName(); - return strpos($displayName, '(Alice@example.com)') !== false; + return str_contains($displayName, '(Alice@example.com)'); } /** @@ -87,9 +74,9 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest { $username = 'boris23421'; $dn = 'uid=boris,ou=Users,' . $this->base; $this->prepareUser($dn, $username); - $displayName = \OC::$server->getUserManager()->get($username)->getDisplayName(); + $displayName = Server::get(IUserManager::class)->get($username)->getDisplayName(); - return strpos($displayName, '(Boris@example.com)') === false; + return !str_contains($displayName, '(Boris@example.com)'); } /** diff --git a/apps/user_ldap/tests/Integration/readme.md b/apps/user_ldap/tests/Integration/readme.md index e20efef8fdc..d551387c903 100644 --- a/apps/user_ldap/tests/Integration/readme.md +++ b/apps/user_ldap/tests/Integration/readme.md @@ -1,3 +1,8 @@ +<!-- + - SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + - SPDX-FileCopyrightText: 2015 ownCloud, Inc. + - SPDX-License-Identifier: AGPL-3.0-only + --> # Requirements # Have (as in do copy if not already done) the following files from https://github.com/owncloud/administration/tree/master/ldap-testing copied into the directory "setup-scripts": diff --git a/apps/user_ldap/tests/Integration/run-all.sh b/apps/user_ldap/tests/Integration/run-all.sh index 02bab97e45f..a0739a019eb 100755 --- a/apps/user_ldap/tests/Integration/run-all.sh +++ b/apps/user_ldap/tests/Integration/run-all.sh @@ -1,5 +1,8 @@ #!/bin/bash - +# +# SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later +# trigger_notification() { which notify-send 1>/dev/null if [[ $? == 1 ]] ; then diff --git a/apps/user_ldap/tests/Integration/run-test.sh b/apps/user_ldap/tests/Integration/run-test.sh index 7a29db25670..1b674aa04f3 100755 --- a/apps/user_ldap/tests/Integration/run-test.sh +++ b/apps/user_ldap/tests/Integration/run-test.sh @@ -1,5 +1,8 @@ #!/bin/sh - +# +# SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later +# if [ $1 ] ; then TESTSCRIPT=$1 else diff --git a/apps/user_ldap/tests/Integration/setup-scripts/createExplicitGroups.php b/apps/user_ldap/tests/Integration/setup-scripts/createExplicitGroups.php index 69bc90dedb2..819c4c6e860 100644 --- a/apps/user_ldap/tests/Integration/setup-scripts/createExplicitGroups.php +++ b/apps/user_ldap/tests/Integration/setup-scripts/createExplicitGroups.php @@ -1,25 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ if (php_sapi_name() !== 'cli') { print('Only via CLI, please.'); diff --git a/apps/user_ldap/tests/Integration/setup-scripts/createExplicitGroupsDifferentOU.php b/apps/user_ldap/tests/Integration/setup-scripts/createExplicitGroupsDifferentOU.php index e2607b0ccc3..b0a3cd46b4f 100644 --- a/apps/user_ldap/tests/Integration/setup-scripts/createExplicitGroupsDifferentOU.php +++ b/apps/user_ldap/tests/Integration/setup-scripts/createExplicitGroupsDifferentOU.php @@ -1,25 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ if (php_sapi_name() !== 'cli') { print('Only via CLI, please.'); diff --git a/apps/user_ldap/tests/Integration/setup-scripts/createExplicitUsers.php b/apps/user_ldap/tests/Integration/setup-scripts/createExplicitUsers.php index 6160179b9d4..7137bd18a58 100644 --- a/apps/user_ldap/tests/Integration/setup-scripts/createExplicitUsers.php +++ b/apps/user_ldap/tests/Integration/setup-scripts/createExplicitUsers.php @@ -1,25 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ if (php_sapi_name() !== 'cli') { print('Only via CLI, please.'); diff --git a/apps/user_ldap/tests/Integration/setup-scripts/createUsersWithoutDisplayName.php b/apps/user_ldap/tests/Integration/setup-scripts/createUsersWithoutDisplayName.php index 5a36ce24838..18584fbe748 100644 --- a/apps/user_ldap/tests/Integration/setup-scripts/createUsersWithoutDisplayName.php +++ b/apps/user_ldap/tests/Integration/setup-scripts/createUsersWithoutDisplayName.php @@ -1,24 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ if (php_sapi_name() !== 'cli') { print('Only via CLI, please.'); diff --git a/apps/user_ldap/tests/Jobs/CleanUpTest.php b/apps/user_ldap/tests/Jobs/CleanUpTest.php index 2e66d114755..5a1e563a1e8 100644 --- a/apps/user_ldap/tests/Jobs/CleanUpTest.php +++ b/apps/user_ldap/tests/Jobs/CleanUpTest.php @@ -1,29 +1,11 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Jobs; use Exception; @@ -31,20 +13,19 @@ use OCA\User_LDAP\Helper; use OCA\User_LDAP\Jobs\CleanUp; use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_Proxy; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\IConfig; use OCP\IDBConnection; use Test\TestCase; class CleanUpTest extends TestCase { - /** @var CleanUp */ - protected $bgJob; - - /** @var array */ - protected $mocks; + protected CleanUp $bgJob; + protected array $mocks; public function setUp(): void { + parent::setUp(); $this->createMocks(); - $this->bgJob = new CleanUp($this->mocks['userBackend'], $this->mocks['deletedUsersIndex']); + $this->bgJob = new CleanUp($this->mocks['timeFactory'], $this->mocks['userBackend'], $this->mocks['deletedUsersIndex']); $this->bgJob->setArguments($this->mocks); } @@ -55,12 +36,13 @@ class CleanUpTest extends TestCase { $this->mocks['ocConfig'] = $this->createMock(IConfig::class); $this->mocks['db'] = $this->createMock(IDBConnection::class); $this->mocks['helper'] = $this->createMock(Helper::class); + $this->mocks['timeFactory'] = $this->createMock(ITimeFactory::class); } /** * clean up job must not run when there are disabled configurations */ - public function test_runNotAllowedByDisabledConfigurations() { + public function test_runNotAllowedByDisabledConfigurations(): void { $this->mocks['helper']->expects($this->once()) ->method('haveDisabledConfigurations') ->willReturn(true); @@ -76,10 +58,10 @@ class CleanUpTest extends TestCase { * clean up job must not run when LDAP Helper is broken i.e. * returning unexpected results */ - public function test_runNotAllowedByBrokenHelper() { + public function test_runNotAllowedByBrokenHelper(): void { $this->mocks['helper']->expects($this->once()) ->method('haveDisabledConfigurations') - ->will($this->throwException(new Exception())); + ->willThrowException(new Exception()); $this->mocks['ocConfig']->expects($this->never()) ->method('getSystemValue'); @@ -91,7 +73,7 @@ class CleanUpTest extends TestCase { /** * clean up job must not run when it is not enabled */ - public function test_runNotAllowedBySysConfig() { + public function test_runNotAllowedBySysConfig(): void { $this->mocks['helper']->expects($this->once()) ->method('haveDisabledConfigurations') ->willReturn(false); @@ -107,7 +89,7 @@ class CleanUpTest extends TestCase { /** * clean up job is allowed to run */ - public function test_runIsAllowed() { + public function test_runIsAllowed(): void { $this->mocks['helper']->expects($this->once()) ->method('haveDisabledConfigurations') ->willReturn(false); @@ -123,7 +105,7 @@ class CleanUpTest extends TestCase { /** * check whether offset will be reset when it needs to */ - public function test_OffsetResetIsNecessary() { + public function test_OffsetResetIsNecessary(): void { $result = $this->bgJob->isOffsetResetNecessary($this->bgJob->getChunkSize() - 1); $this->assertSame(true, $result); } @@ -131,7 +113,7 @@ class CleanUpTest extends TestCase { /** * make sure offset is not reset when it is not due */ - public function test_OffsetResetIsNotNecessary() { + public function test_OffsetResetIsNotNecessary(): void { $result = $this->bgJob->isOffsetResetNecessary($this->bgJob->getChunkSize()); $this->assertSame(false, $result); } diff --git a/apps/user_ldap/tests/Jobs/SyncTest.php b/apps/user_ldap/tests/Jobs/SyncTest.php index 6ee186d0da4..f6ecf984ab0 100644 --- a/apps/user_ldap/tests/Jobs/SyncTest.php +++ b/apps/user_ldap/tests/Jobs/SyncTest.php @@ -1,29 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests\Jobs; use OCA\User_LDAP\Access; @@ -35,41 +15,35 @@ use OCA\User_LDAP\Jobs\Sync; use OCA\User_LDAP\LDAP; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\EventDispatcher\IEventDispatcher; use OCP\IAvatarManager; use OCP\IConfig; use OCP\IDBConnection; use OCP\IUserManager; use OCP\Notification\IManager; +use OCP\Server; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; +/** + * @group DB + */ class SyncTest extends TestCase { - - /** @var array */ - protected $arguments; - /** @var Helper|\PHPUnit\Framework\MockObject\MockObject */ - protected $helper; - /** @var LDAP|\PHPUnit\Framework\MockObject\MockObject */ - protected $ldapWrapper; - /** @var Manager|\PHPUnit\Framework\MockObject\MockObject */ - protected $userManager; - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject */ - protected $mapper; - /** @var Sync */ - protected $sync; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; - /** @var IAvatarManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $avatarManager; - /** @var IDBConnection|\PHPUnit\Framework\MockObject\MockObject */ - protected $dbc; - /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $ncUserManager; - /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $notificationManager; - /** @var ConnectionFactory|\PHPUnit\Framework\MockObject\MockObject */ - protected $connectionFactory; - /** @var AccessFactory|\PHPUnit\Framework\MockObject\MockObject */ - protected $accessFactory; + protected Helper&MockObject $helper; + protected LDAP&MockObject $ldapWrapper; + protected Manager&MockObject $userManager; + protected UserMapping&MockObject $mapper; + protected IConfig&MockObject $config; + protected IAvatarManager&MockObject $avatarManager; + protected IDBConnection&MockObject $dbc; + protected IUserManager&MockObject $ncUserManager; + protected IManager&MockObject $notificationManager; + protected ConnectionFactory&MockObject $connectionFactory; + protected AccessFactory&MockObject $accessFactory; + protected array $arguments = []; + protected Sync $sync; protected function setUp(): void { parent::setUp(); @@ -83,26 +57,32 @@ class SyncTest extends TestCase { $this->dbc = $this->createMock(IDBConnection::class); $this->ncUserManager = $this->createMock(IUserManager::class); $this->notificationManager = $this->createMock(IManager::class); - $this->connectionFactory = $this->createMock(ConnectionFactory::class); + $this->connectionFactory = $this->getMockBuilder(ConnectionFactory::class) + ->setConstructorArgs([ + $this->ldapWrapper, + ]) + ->getMock(); $this->accessFactory = $this->createMock(AccessFactory::class); - $this->arguments = [ - 'helper' => $this->helper, - 'ldapWrapper' => $this->ldapWrapper, - 'mapper' => $this->mapper, - 'config' => $this->config, - 'avatarManager' => $this->avatarManager, - 'dbc' => $this->dbc, - 'ncUserManager' => $this->ncUserManager, - 'notificationManager' => $this->notificationManager, - 'connectionFactory' => $this->connectionFactory, - 'accessFactory' => $this->accessFactory, - ]; - - $this->sync = new Sync($this->userManager); + $this->sync = new Sync( + Server::get(ITimeFactory::class), + Server::get(IEventDispatcher::class), + $this->config, + $this->dbc, + $this->avatarManager, + $this->ncUserManager, + Server::get(LoggerInterface::class), + $this->notificationManager, + $this->mapper, + $this->helper, + $this->connectionFactory, + $this->accessFactory, + ); + + $this->sync->overwritePropertiesForTest($this->ldapWrapper); } - public function intervalDataProvider() { + public static function intervalDataProvider(): array { return [ [ 0, 1000, 750 @@ -122,10 +102,8 @@ class SyncTest extends TestCase { ]; } - /** - * @dataProvider intervalDataProvider - */ - public function testUpdateInterval($userCount, $pagingSize1, $pagingSize2) { + #[\PHPUnit\Framework\Attributes\DataProvider('intervalDataProvider')] + public function testUpdateInterval(int $userCount, int $pagingSize1, int $pagingSize2): void { $this->config->expects($this->once()) ->method('setAppValue') ->with('user_ldap', 'background_sync_interval', $this->anything()) @@ -155,7 +133,7 @@ class SyncTest extends TestCase { $this->sync->updateInterval(); } - public function moreResultsProvider() { + public static function moreResultsProvider(): array { return [ [ 3, 3, true ], [ 3, 5, true ], @@ -165,11 +143,13 @@ class SyncTest extends TestCase { ]; } - /** - * @dataProvider moreResultsProvider - */ - public function testMoreResults($pagingSize, $results, $expected) { - $connection = $this->createMock(Connection::class); + #[\PHPUnit\Framework\Attributes\DataProvider('moreResultsProvider')] + public function testMoreResults($pagingSize, $results, $expected): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([ + $this->ldapWrapper, + ]) + ->getMock(); $this->connectionFactory->expects($this->any()) ->method('get') ->willReturn($connection); @@ -182,7 +162,7 @@ class SyncTest extends TestCase { return null; }); - /** @var Access|\PHPUnit\Framework\MockObject\MockObject $access */ + /** @var Access&MockObject $access */ $access = $this->createMock(Access::class); $this->accessFactory->expects($this->any()) ->method('get') @@ -207,7 +187,7 @@ class SyncTest extends TestCase { $this->assertSame($expected, $hasMoreResults); } - public function cycleDataProvider() { + public static function cycleDataProvider(): array { $lastCycle = ['prefix' => 's01', 'offset' => 1000]; $lastCycle2 = ['prefix' => '', 'offset' => 1000]; return [ @@ -220,22 +200,24 @@ class SyncTest extends TestCase { ]; } - /** - * @dataProvider cycleDataProvider - */ - public function testDetermineNextCycle($cycleData, $prefixes, $expectedCycle) { + #[\PHPUnit\Framework\Attributes\DataProvider('cycleDataProvider')] + public function testDetermineNextCycle(?array $cycleData, array $prefixes, ?array $expectedCycle): void { $this->helper->expects($this->any()) ->method('getServerConfigurationPrefixes') ->with(true) ->willReturn($prefixes); if (is_array($expectedCycle)) { + $calls = [ + ['user_ldap', 'background_sync_prefix', $expectedCycle['prefix']], + ['user_ldap', 'background_sync_offset', $expectedCycle['offset']], + ]; $this->config->expects($this->exactly(2)) ->method('setAppValue') - ->withConsecutive( - ['user_ldap', 'background_sync_prefix', $expectedCycle['prefix']], - ['user_ldap', 'background_sync_offset', $expectedCycle['offset']] - ); + ->willReturnCallback(function () use (&$calls): void { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + }); } else { $this->config->expects($this->never()) ->method('setAppValue'); @@ -252,7 +234,7 @@ class SyncTest extends TestCase { } } - public function testQualifiesToRun() { + public function testQualifiesToRun(): void { $cycleData = ['prefix' => 's01']; $this->config->expects($this->exactly(2)) @@ -264,7 +246,7 @@ class SyncTest extends TestCase { $this->assertFalse($this->sync->qualifiesToRun($cycleData)); } - public function runDataProvider() { + public static function runDataProvider(): array { return [ #0 - one LDAP server, reset [[ @@ -296,10 +278,8 @@ class SyncTest extends TestCase { ]; } - /** - * @dataProvider runDataProvider - */ - public function testRun($runData) { + #[\PHPUnit\Framework\Attributes\DataProvider('runDataProvider')] + public function testRun(array $runData): void { $this->config->expects($this->any()) ->method('getAppValue') ->willReturnCallback(function ($app, $key, $default) use ($runData) { @@ -326,13 +306,18 @@ class SyncTest extends TestCase { return $default; }); + + $calls = [ + ['user_ldap', 'background_sync_prefix', $runData['expectedNextCycle']['prefix']], + ['user_ldap', 'background_sync_offset', $runData['expectedNextCycle']['offset']], + ['user_ldap', 'background_sync_interval', '43200'], + ]; $this->config->expects($this->exactly(3)) ->method('setAppValue') - ->withConsecutive( - ['user_ldap', 'background_sync_prefix', $runData['expectedNextCycle']['prefix']], - ['user_ldap', 'background_sync_offset', $runData['expectedNextCycle']['offset']], - ['user_ldap', 'background_sync_interval', $this->anything()] - ); + ->willReturnCallback(function () use (&$calls): void { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + }); $this->config->expects($this->any()) ->method('getAppKeys') ->with('user_ldap') @@ -343,7 +328,11 @@ class SyncTest extends TestCase { ->with(true) ->willReturn($runData['prefixes']); - $connection = $this->createMock(Connection::class); + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([ + $this->ldapWrapper, + ]) + ->getMock(); $this->connectionFactory->expects($this->any()) ->method('get') ->willReturn($connection); @@ -356,7 +345,7 @@ class SyncTest extends TestCase { return null; }); - /** @var Access|\PHPUnit\Framework\MockObject\MockObject $access */ + /** @var Access&MockObject $access */ $access = $this->createMock(Access::class); $this->accessFactory->expects($this->any()) ->method('get') diff --git a/apps/user_ldap/tests/Jobs/UpdateGroupsTest.php b/apps/user_ldap/tests/Jobs/UpdateGroupsTest.php deleted file mode 100644 index cb947c81a6f..00000000000 --- a/apps/user_ldap/tests/Jobs/UpdateGroupsTest.php +++ /dev/null @@ -1,190 +0,0 @@ -<?php - -declare(strict_types=1); - -/** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -namespace OCA\user_ldap\tests\Jobs; - -use Doctrine\DBAL\Driver\Statement; -use OCA\User_LDAP\Group_Proxy; -use OCA\User_LDAP\Jobs\UpdateGroups; -use OCP\DB\QueryBuilder\IExpressionBuilder; -use OCP\DB\QueryBuilder\IQueryBuilder; -use OCP\EventDispatcher\IEventDispatcher; -use OCP\Group\Events\UserAddedEvent; -use OCP\Group\Events\UserRemovedEvent; -use OCP\IDBConnection; -use OCP\IGroup; -use OCP\IGroupManager; -use OCP\IUser; -use OCP\IUserManager; -use Psr\Log\LoggerInterface; -use Test\TestCase; - -class UpdateGroupsTest extends TestCase { - - /** @var Group_Proxy|\PHPUnit\Framework\MockObject\MockObject */ - protected $groupBackend; - /** @var IEventDispatcher|\PHPUnit\Framework\MockObject\MockObject */ - protected $dispatcher; - /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $groupManager; - /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $userManager; - /** @var LoggerInterface|\PHPUnit\Framework\MockObject\MockObject */ - protected $logger; - /** @var IDBConnection|\PHPUnit\Framework\MockObject\MockObject */ - protected $dbc; - - /** @var UpdateGroups */ - protected $updateGroupsJob; - - public function setUp(): void { - $this->groupBackend = $this->createMock(Group_Proxy::class); - $this->dispatcher = $this->createMock(IEventDispatcher::class); - $this->groupManager = $this->createMock(IGroupManager::class); - $this->userManager = $this->createMock(IUserManager::class); - $this->logger = $this->createMock(LoggerInterface::class); - $this->dbc = $this->createMock(IDBConnection::class); - - $this->updateGroupsJob = new UpdateGroups( - $this->groupBackend, - $this->dispatcher, - $this->groupManager, - $this->userManager, - $this->logger, - $this->dbc - ); - } - - public function testHandleKnownGroups() { - $knownGroups = [ - 'emptyGroup' => \serialize([]), - 'stableGroup' => \serialize(['userA', 'userC', 'userE']), - 'groupWithAdditions' => \serialize(['userA', 'userC', 'userE']), - 'groupWithRemovals' => \serialize(['userA', 'userC', 'userDeleted', 'userE']), - 'groupWithAdditionsAndRemovals' => \serialize(['userA', 'userC', 'userE']), - 'vanishedGroup' => \serialize(['userB', 'userDeleted']) - ]; - $knownGroupsDB = []; - foreach ($knownGroups as $gid => $members) { - $knownGroupsDB[] = [ - 'owncloudname' => $gid, - 'owncloudusers' => $members - ]; - } - $actualGroups = [ - 'emptyGroup' => [], - 'stableGroup' => ['userA', 'userC', 'userE'], - 'groupWithAdditions' => ['userA', 'userC', 'userE', 'userF'], - 'groupWithRemovals' => ['userA', 'userE'], - 'groupWithAdditionsAndRemovals' => ['userC', 'userE', 'userF'], - 'newGroup' => ['userB', 'userF'], - ]; - $groups = array_intersect(array_keys($knownGroups), array_keys($actualGroups)); - - /** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $updateQb */ - $updateQb = $this->createMock(IQueryBuilder::class); - $updateQb->expects($this->once()) - ->method('update') - ->willReturn($updateQb); - $updateQb->expects($this->once()) - ->method('set') - ->willReturn($updateQb); - $updateQb->expects($this->once()) - ->method('where') - ->willReturn($updateQb); - // three groups need to be updated - $updateQb->expects($this->exactly(3)) - ->method('setParameters'); - $updateQb->expects($this->exactly(3)) - ->method('execute'); - $updateQb->expects($this->any()) - ->method('expr') - ->willReturn($this->createMock(IExpressionBuilder::class)); - - $stmt = $this->createMock(Statement::class); - $stmt->expects($this->once()) - ->method('fetchAll') - ->willReturn($knownGroupsDB); - - $selectQb = $this->createMock(IQueryBuilder::class); - $selectQb->expects($this->once()) - ->method('select') - ->willReturn($selectQb); - $selectQb->expects($this->once()) - ->method('from') - ->willReturn($selectQb); - $selectQb->expects($this->once()) - ->method('execute') - ->willReturn($stmt); - - $this->dbc->expects($this->any()) - ->method('getQueryBuilder') - ->willReturnOnConsecutiveCalls($updateQb, $selectQb); - - $this->groupBackend->expects($this->any()) - ->method('usersInGroup') - ->willReturnCallback(function ($groupID) use ($actualGroups) { - return isset($actualGroups[$groupID]) ? $actualGroups[$groupID] : []; - }); - - $this->groupManager->expects($this->any()) - ->method('get') - ->willReturnCallback(function (string $groupId): ?IGroup { - if ($groupId === 'vanishedGroup') { - return null; - } - return $this->createMock(IGroup::class); - }); - - $this->userManager->expects($this->exactly(5)) - ->method('get') - ->willReturnCallback(function (string $userId) { - if ($userId === 'userDeleted') { - // user already deleted - return null; - } - return $this->createMock(IUser::class); - }); - - $addedEvents = 0; - $removedEvents = 0; - $this->dispatcher->expects($this->exactly(4)) - ->method('dispatchTyped') - ->willReturnCallback(function ($event) use (&$addedEvents, &$removedEvents) { - if ($event instanceof UserRemovedEvent) { - $removedEvents++; - } elseif ($event instanceof UserAddedEvent) { - $addedEvents++; - } - }); - - $this->invokePrivate($this->updateGroupsJob, 'handleKnownGroups', [$groups]); - - $this->assertSame(2, $removedEvents); - $this->assertSame(2, $addedEvents); - // and no event for the user that is already deleted, the DB is nevertheless updated, hence 5 - } -} diff --git a/apps/user_ldap/tests/LDAPGroupPluginDummy.php b/apps/user_ldap/tests/LDAPGroupPluginDummy.php index 7ff5cd8ac69..5ea1a491f14 100644 --- a/apps/user_ldap/tests/LDAPGroupPluginDummy.php +++ b/apps/user_ldap/tests/LDAPGroupPluginDummy.php @@ -1,26 +1,10 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br) - * - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\ILDAPGroupPlugin; diff --git a/apps/user_ldap/tests/LDAPProviderTest.php b/apps/user_ldap/tests/LDAPProviderTest.php index 0f1480d6930..57323e374aa 100644 --- a/apps/user_ldap/tests/LDAPProviderTest.php +++ b/apps/user_ldap/tests/LDAPProviderTest.php @@ -1,44 +1,29 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Julius Härtl <jus@bitgrid.net> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author root <root@localhost.localdomain> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests; +use OC\Config; use OC\User\Manager; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; +use OCA\User_LDAP\Group_LDAP; +use OCA\User_LDAP\Helper; use OCA\User_LDAP\IGroupLDAP; +use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\IUserLDAP; +use OCA\User_LDAP\LDAPProviderFactory; +use OCA\User_LDAP\User_LDAP; use OCP\EventDispatcher\IEventDispatcher; use OCP\ICacheFactory; use OCP\IConfig; use OCP\IServerContainer; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use OCP\Server; +use Psr\Log\LoggerInterface; /** * Class LDAPProviderTest @@ -48,39 +33,29 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; * @package OCA\User_LDAP\Tests */ class LDAPProviderTest extends \Test\TestCase { - protected function setUp(): void { - parent::setUp(); - } - private function getServerMock(IUserLDAP $userBackend, IGroupLDAP $groupBackend) { $server = $this->getMockBuilder('OC\Server') - ->setMethods(['getUserManager', 'getBackends', 'getGroupManager']) - ->setConstructorArgs(['', new \OC\Config(\OC::$configDir)]) - ->getMock(); - $server->expects($this->at(1)) - ->method('getBackends') - ->willReturn([$userBackend]); + ->onlyMethods(['getUserManager', 'getGroupManager']) + ->setConstructorArgs(['', new Config(\OC::$configDir)]) + ->getMock(); $server->expects($this->any()) ->method('getUserManager') ->willReturn($this->getUserManagerMock($userBackend)); $server->expects($this->any()) ->method('getGroupManager') ->willReturn($this->getGroupManagerMock($groupBackend)); - $server->expects($this->any()) - ->method($this->anything()) - ->willReturnSelf(); return $server; } private function getUserManagerMock(IUserLDAP $userBackend) { $userManager = $this->getMockBuilder(Manager::class) - ->setMethods(['getBackends']) + ->onlyMethods(['getBackends']) ->setConstructorArgs([ $this->createMock(IConfig::class), - $this->createMock(EventDispatcherInterface::class), $this->createMock(ICacheFactory::class), $this->createMock(IEventDispatcher::class), + $this->createMock(LoggerInterface::class), ]) ->getMock(); $userManager->expects($this->any()) @@ -91,7 +66,7 @@ class LDAPProviderTest extends \Test\TestCase { private function getGroupManagerMock(IGroupLDAP $groupBackend) { $groupManager = $this->getMockBuilder('OC\Group\Manager') - ->setMethods(['getBackends']) + ->onlyMethods(['getBackends']) ->disableOriginalConstructor() ->getMock(); $groupManager->expects($this->any()) @@ -109,19 +84,19 @@ class LDAPProviderTest extends \Test\TestCase { } private function getLDAPProvider(IServerContainer $serverContainer) { - $factory = new \OCA\User_LDAP\LDAPProviderFactory($serverContainer); + $factory = new LDAPProviderFactory($serverContainer); return $factory->getLDAPProvider(); } - public function testGetUserDNUserIDNotFound() { + public function testGetUserDNUserIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('User id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists']) - ->disableOriginalConstructor() - ->getMock(); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->any())->method('userExists')->willReturn(false); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -130,20 +105,25 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getUserDN('nonexisting_user'); } - public function testGetUserDN() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists', 'getLDAPAccess', 'username2dn']) - ->disableOriginalConstructor() - ->getMock(); - $userBackend->expects($this->at(0)) - ->method('userExists') - ->willReturn(true); - $userBackend->expects($this->at(2)) + + public function testGetUserDN(): void { + $userAccess = $this->getMockBuilder(Access::class) + ->onlyMethods(['username2dn']) + ->disableOriginalConstructor() + ->getMock(); + $userAccess->expects($this->once()) ->method('username2dn') ->willReturn('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org'); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists', 'getLDAPAccess']) + ->disableOriginalConstructor() + ->getMock(); + $userBackend->expects($this->once()) + ->method('userExists') + ->willReturn(true); $userBackend->expects($this->any()) - ->method($this->anything()) - ->willReturnSelf(); + ->method('getLDAPAccess') + ->willReturn($userAccess); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -153,16 +133,13 @@ class LDAPProviderTest extends \Test\TestCase { } - public function testGetGroupDNGroupIDNotFound() { + public function testGetGroupDNGroupIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Group id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->disableOriginalConstructor() - ->getMock(); - - $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP') - ->setMethods(['groupExists']) + $userBackend = $this->createMock(User_LDAP::class); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->onlyMethods(['groupExists']) ->disableOriginalConstructor() ->getMock(); @@ -174,26 +151,24 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getGroupDN('nonexisting_group'); } - public function testGetGroupDN() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists', 'getLDAPAccess', 'username2dn']) - ->disableOriginalConstructor() - ->getMock(); + public function testGetGroupDN(): void { + $userBackend = $this->createMock(User_LDAP::class); - $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP') - ->setMethods(['groupExists', 'getLDAPAccess', 'groupname2dn']) + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->onlyMethods(['groupExists', 'getLDAPAccess']) ->disableOriginalConstructor() ->getMock(); - $groupBackend->expects($this->at(0)) - ->method('groupExists') - ->willReturn(true); - $groupBackend->expects($this->at(2)) + $groupAccess = $this->createMock(Access::class); + $groupAccess->expects($this->once()) ->method('groupname2dn') ->willReturn('cn=existing_group,ou=Are Sufficient To,ou=Test,dc=example,dc=org'); + $groupBackend->expects($this->once()) + ->method('groupExists') + ->willReturn(true); $groupBackend->expects($this->any()) - ->method($this->anything()) - ->willReturnSelf(); + ->method('getLDAPAccess') + ->willReturn($groupAccess); $server = $this->getServerMock($userBackend, $groupBackend); @@ -202,11 +177,11 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getGroupDN('existing_group')); } - public function testGetUserName() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['dn2UserName']) - ->disableOriginalConstructor() - ->getMock(); + public function testGetUserName(): void { + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['dn2UserName']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->any()) ->method('dn2UserName') ->willReturn('existing_user'); @@ -218,15 +193,12 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getUserName('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); } - public function testDNasBaseParameter() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods([]) - ->disableOriginalConstructor() - ->getMock(); + public function testDNasBaseParameter(): void { + $userBackend = $this->createMock(User_LDAP::class); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); - $helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $helper = Server::get(Helper::class); $ldapProvider = $this->getLDAPProvider($server); $this->assertEquals( @@ -234,15 +206,12 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->DNasBaseParameter('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); } - public function testSanitizeDN() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods([]) - ->disableOriginalConstructor() - ->getMock(); + public function testSanitizeDN(): void { + $userBackend = $this->createMock(User_LDAP::class); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); - $helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()); + $helper = Server::get(Helper::class); $ldapProvider = $this->getLDAPProvider($server); $this->assertEquals( @@ -251,14 +220,11 @@ class LDAPProviderTest extends \Test\TestCase { } - public function testGetLDAPConnectionUserIDNotFound() { + public function testGetLDAPConnectionUserIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('User id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists']) - ->disableOriginalConstructor() - ->getMock(); + $userBackend = $this->createMock(User_LDAP::class); $userBackend->expects($this->any())->method('userExists')->willReturn(false); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -267,35 +233,33 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getLDAPConnection('nonexisting_user'); } - public function testGetLDAPConnection() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists', 'getNewLDAPConnection']) - ->disableOriginalConstructor() - ->getMock(); + public function testGetLDAPConnection(): void { + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists', 'getNewLDAPConnection']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->any()) ->method('userExists') ->willReturn(true); + $ldapConnection = ldap_connect('ldap://example.com'); $userBackend->expects($this->any()) ->method('getNewLDAPConnection') - ->willReturn(true); + ->willReturn($ldapConnection); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); $ldapProvider = $this->getLDAPProvider($server); - $this->assertTrue($ldapProvider->getLDAPConnection('existing_user')); + $this->assertEquals($ldapConnection, $ldapProvider->getLDAPConnection('existing_user')); } - public function testGetGroupLDAPConnectionGroupIDNotFound() { + public function testGetGroupLDAPConnectionGroupIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Group id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->disableOriginalConstructor() - ->getMock(); - - $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP') - ->setMethods(['groupExists']) + $userBackend = $this->createMock(User_LDAP::class); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->onlyMethods(['groupExists']) ->disableOriginalConstructor() ->getMock(); @@ -307,13 +271,10 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getGroupLDAPConnection('nonexisting_group'); } - public function testGetGroupLDAPConnection() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->disableOriginalConstructor() - ->getMock(); - - $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP') - ->setMethods(['groupExists','getNewLDAPConnection']) + public function testGetGroupLDAPConnection(): void { + $userBackend = $this->createMock(User_LDAP::class); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->onlyMethods(['groupExists','getNewLDAPConnection']) ->disableOriginalConstructor() ->getMock(); @@ -321,25 +282,26 @@ class LDAPProviderTest extends \Test\TestCase { ->method('groupExists') ->willReturn(true); + $ldapConnection = ldap_connect('ldap://example.com'); $groupBackend->expects($this->any()) ->method('getNewLDAPConnection') - ->willReturn(true); + ->willReturn($ldapConnection); $server = $this->getServerMock($userBackend, $groupBackend); $ldapProvider = $this->getLDAPProvider($server); - $this->assertTrue($ldapProvider->getGroupLDAPConnection('existing_group')); + $this->assertEquals($ldapConnection, $ldapProvider->getGroupLDAPConnection('existing_group')); } - public function testGetLDAPBaseUsersUserIDNotFound() { + public function testGetLDAPBaseUsersUserIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('User id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists']) - ->disableOriginalConstructor() - ->getMock(); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->any())->method('userExists')->willReturn(false); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -348,14 +310,16 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getLDAPBaseUsers('nonexisting_user'); } - public function testGetLDAPBaseUsers() { + public function testGetLDAPBaseUsers(): void { $bases = [ 'ou=users,ou=foobar,dc=example,dc=org', 'ou=users,ou=barfoo,dc=example,dc=org', ]; $dn = 'uid=malik,' . $bases[1]; - $connection = $this->createMock(Connection::class); + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); $connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($key) use ($bases) { @@ -377,10 +341,10 @@ class LDAPProviderTest extends \Test\TestCase { ->method('username2dn') ->willReturn($dn); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) - ->disableOriginalConstructor() - ->getMock(); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists', 'getLDAPAccess']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->atLeastOnce()) ->method('userExists') ->willReturn(true); @@ -395,14 +359,14 @@ class LDAPProviderTest extends \Test\TestCase { } - public function testGetLDAPBaseGroupsUserIDNotFound() { + public function testGetLDAPBaseGroupsUserIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('User id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists']) - ->disableOriginalConstructor() - ->getMock(); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->any())->method('userExists')->willReturn(false); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -411,13 +375,15 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getLDAPBaseGroups('nonexisting_user'); } - public function testGetLDAPBaseGroups() { + public function testGetLDAPBaseGroups(): void { $bases = [ 'ou=groupd,ou=foobar,dc=example,dc=org', 'ou=groups,ou=barfoo,dc=example,dc=org', ]; - $connection = $this->createMock(Connection::class); + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); $connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($key) use ($bases) { @@ -433,10 +399,10 @@ class LDAPProviderTest extends \Test\TestCase { ->method('getConnection') ->willReturn($connection); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) - ->disableOriginalConstructor() - ->getMock(); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists', 'getLDAPAccess']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->any()) ->method('userExists') ->willReturn(true); @@ -451,14 +417,14 @@ class LDAPProviderTest extends \Test\TestCase { } - public function testClearCacheUserIDNotFound() { + public function testClearCacheUserIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('User id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists']) - ->disableOriginalConstructor() - ->getMock(); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->any())->method('userExists')->willReturn(false); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -467,20 +433,26 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->clearCache('nonexisting_user'); } - public function testClearCache() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'clearCache']) - ->disableOriginalConstructor() - ->getMock(); - $userBackend->expects($this->at(0)) - ->method('userExists') - ->willReturn(true); - $userBackend->expects($this->at(3)) + public function testClearCache(): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects($this->once()) ->method('clearCache') ->willReturn(true); + $access = $this->createMock(Access::class); + $access->method('getConnection') + ->willReturn($connection); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists', 'getLDAPAccess']) + ->disableOriginalConstructor() + ->getMock(); + $userBackend->expects($this->once()) + ->method('userExists') + ->willReturn(true); $userBackend->expects($this->any()) - ->method($this->anything()) - ->willReturnSelf(); + ->method('getLDAPAccess') + ->willReturn($access); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -490,15 +462,15 @@ class LDAPProviderTest extends \Test\TestCase { } - public function testClearGroupCacheGroupIDNotFound() { + public function testClearGroupCacheGroupIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Group id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + $userBackend = $this->getMockBuilder(User_LDAP::class) ->disableOriginalConstructor() ->getMock(); - $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP') - ->setMethods(['groupExists']) + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->onlyMethods(['groupExists']) ->disableOriginalConstructor() ->getMock(); $groupBackend->expects($this->any())->method('groupExists')->willReturn(false); @@ -509,23 +481,27 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->clearGroupCache('nonexisting_group'); } - public function testClearGroupCache() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->disableOriginalConstructor() + public function testClearGroupCache(): void { + $userBackend = $this->createMock(User_LDAP::class); + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) ->getMock(); - $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP') - ->setMethods(['groupExists', 'getLDAPAccess', 'getConnection', 'clearCache']) + $connection->expects($this->once()) + ->method('clearCache') + ->willReturn(true); + $access = $this->createMock(Access::class); + $access->method('getConnection') + ->willReturn($connection); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->onlyMethods(['groupExists', 'getLDAPAccess']) ->disableOriginalConstructor() ->getMock(); - $groupBackend->expects($this->at(0)) + $groupBackend->expects($this->once()) ->method('groupExists') ->willReturn(true); - $groupBackend->expects($this->at(3)) - ->method('clearCache') - ->willReturn(true); $groupBackend->expects($this->any()) - ->method($this->anything()) - ->willReturnSelf(); + ->method('getLDAPAccess') + ->willReturn($access); $server = $this->getServerMock($userBackend, $groupBackend); @@ -534,11 +510,11 @@ class LDAPProviderTest extends \Test\TestCase { $this->addToAssertionCount(1); } - public function testDnExists() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['dn2UserName']) - ->disableOriginalConstructor() - ->getMock(); + public function testDnExists(): void { + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['dn2UserName']) + ->disableOriginalConstructor() + ->getMock(); $userBackend->expects($this->any()) ->method('dn2UserName') ->willReturn('existing_user'); @@ -549,12 +525,8 @@ class LDAPProviderTest extends \Test\TestCase { $this->assertTrue($ldapProvider->dnExists('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); } - public function testFlagRecord() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods([]) - ->disableOriginalConstructor() - ->getMock(); - + public function testFlagRecord(): void { + $userBackend = $this->createMock(User_LDAP::class); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); $ldapProvider = $this->getLDAPProvider($server); @@ -562,12 +534,8 @@ class LDAPProviderTest extends \Test\TestCase { $this->addToAssertionCount(1); } - public function testUnflagRecord() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods([]) - ->disableOriginalConstructor() - ->getMock(); - + public function testUnflagRecord(): void { + $userBackend = $this->createMock(User_LDAP::class); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); $ldapProvider = $this->getLDAPProvider($server); @@ -576,12 +544,12 @@ class LDAPProviderTest extends \Test\TestCase { } - public function testGetLDAPDisplayNameFieldUserIDNotFound() { + public function testGetLDAPDisplayNameFieldUserIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('User id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists']) + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists']) ->disableOriginalConstructor() ->getMock(); $userBackend->expects($this->any())->method('userExists')->willReturn(false); @@ -592,20 +560,26 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getLDAPDisplayNameField('nonexisting_user'); } - public function testGetLDAPDisplayNameField() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) + public function testGetLDAPDisplayNameField(): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects($this->once()) + ->method('getConfiguration') + ->willReturn(['ldap_display_name' => 'displayName']); + $access = $this->createMock(Access::class); + $access->method('getConnection') + ->willReturn($connection); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists', 'getLDAPAccess']) ->disableOriginalConstructor() ->getMock(); - $userBackend->expects($this->at(0)) + $userBackend->expects($this->once()) ->method('userExists') ->willReturn(true); - $userBackend->expects($this->at(3)) - ->method('getConfiguration') - ->willReturn(['ldap_display_name' => 'displayName']); $userBackend->expects($this->any()) - ->method($this->anything()) - ->willReturnSelf(); + ->method('getLDAPAccess') + ->willReturn($access); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -614,12 +588,12 @@ class LDAPProviderTest extends \Test\TestCase { } - public function testGetLDAPEmailFieldUserIDNotFound() { + public function testGetLDAPEmailFieldUserIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('User id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists']) + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists']) ->disableOriginalConstructor() ->getMock(); $userBackend->expects($this->any())->method('userExists')->willReturn(false); @@ -630,20 +604,26 @@ class LDAPProviderTest extends \Test\TestCase { $ldapProvider->getLDAPEmailField('nonexisting_user'); } - public function testGetLDAPEmailField() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') - ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) + public function testGetLDAPEmailField(): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects($this->once()) + ->method('getConfiguration') + ->willReturn(['ldap_email_attr' => 'mail']); + $access = $this->createMock(Access::class); + $access->method('getConnection') + ->willReturn($connection); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->onlyMethods(['userExists', 'getLDAPAccess']) ->disableOriginalConstructor() ->getMock(); - $userBackend->expects($this->at(0)) + $userBackend->expects($this->once()) ->method('userExists') ->willReturn(true); - $userBackend->expects($this->at(3)) - ->method('getConfiguration') - ->willReturn(['ldap_email_attr' => 'mail']); $userBackend->expects($this->any()) - ->method($this->anything()) - ->willReturnSelf(); + ->method('getLDAPAccess') + ->willReturn($access); $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); @@ -652,50 +632,252 @@ class LDAPProviderTest extends \Test\TestCase { } - public function testGetLDAPGroupMemberAssocUserIDNotFound() { + public function testGetLDAPGroupMemberAssocUserIDNotFound(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Group id not found in LDAP'); - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + $userBackend = $this->createMock(User_LDAP::class); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->onlyMethods(['groupExists']) ->disableOriginalConstructor() ->getMock(); - $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP') - ->setMethods(['groupExists']) + $groupBackend->expects($this->any()) + ->method('groupExists') + ->willReturn(false); + + $server = $this->getServerMock($userBackend, $groupBackend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->getLDAPGroupMemberAssoc('nonexisting_group'); + } + + public function testgetLDAPGroupMemberAssoc(): void { + $userBackend = $this->createMock(User_LDAP::class); + + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects($this->once()) + ->method('getConfiguration') + ->willReturn(['ldap_group_member_assoc_attribute' => 'assoc_type']); + $access = $this->createMock(Access::class); + $access->method('getConnection') + ->willReturn($connection); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->onlyMethods(['groupExists', 'getLDAPAccess']) ->disableOriginalConstructor() ->getMock(); - $groupBackend->expects($this->any())->method('groupExists')->willReturn(false); + $groupBackend->expects($this->once()) + ->method('groupExists') + ->willReturn(true); + $groupBackend->expects($this->any()) + ->method('getLDAPAccess') + ->willReturn($access); $server = $this->getServerMock($userBackend, $groupBackend); $ldapProvider = $this->getLDAPProvider($server); - $ldapProvider->getLDAPGroupMemberAssoc('nonexisting_group'); + $this->assertEquals('assoc_type', $ldapProvider->getLDAPGroupMemberAssoc('existing_group')); + } + + public function testGetMultiValueUserAttributeUserNotFound(): void { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('User id not found in LDAP'); + + $userBackend = $this->createMock(User_LDAP::class); + $userBackend->expects(self::once()) + ->method('userExists') + ->with('admin') + ->willReturn(false); + $groupBackend = $this->createMock(Group_LDAP::class); + $server = $this->getServerMock($userBackend, $groupBackend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->getMultiValueUserAttribute('admin', 'mailAlias'); } - public function testgetLDAPGroupMemberAssoc() { - $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + public function testGetMultiValueUserAttributeCacheHit(): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects(self::once()) + ->method('getFromCache') + ->with('admin-mailAlias') + ->willReturn(['aliasA@test.local', 'aliasB@test.local']); + $access = $this->createMock(Access::class); + $access->expects(self::once()) + ->method('getConnection') + ->willReturn($connection); + $userBackend = $this->createMock(User_LDAP::class); + $userBackend->expects(self::once()) + ->method('userExists') + ->with('admin') + ->willReturn(true); + $userBackend->expects(self::once()) + ->method('getLDAPAccess') + ->willReturn($access); + $groupBackend = $this->createMock(Group_LDAP::class); + $server = $this->getServerMock($userBackend, $groupBackend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->getMultiValueUserAttribute('admin', 'mailAlias'); + } + + public function testGetMultiValueUserAttributeLdapError(): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects(self::once()) + ->method('getFromCache') + ->with('admin-mailAlias') + ->willReturn(null); + $access = $this->createMock(Access::class); + $access->expects(self::once()) + ->method('getConnection') + ->willReturn($connection); + $access->expects(self::once()) + ->method('username2dn') + ->with('admin') + ->willReturn('admin'); + $access->expects(self::once()) + ->method('readAttribute') + ->with('admin', 'mailAlias') + ->willReturn(false); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->disableOriginalConstructor() + ->getMock(); + $userBackend->method('userExists') + ->with('admin') + ->willReturn(true); + $userBackend->method('getLDAPAccess') + ->willReturn($access); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) ->disableOriginalConstructor() ->getMock(); + $server = $this->getServerMock($userBackend, $groupBackend); - $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP') - ->setMethods(['groupExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) + $ldapProvider = $this->getLDAPProvider($server); + $values = $ldapProvider->getMultiValueUserAttribute('admin', 'mailAlias'); + + self::assertCount(0, $values); + } + + public function testGetMultiValueUserAttribute(): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects(self::once()) + ->method('getFromCache') + ->with('admin-mailAlias') + ->willReturn(null); + $access = $this->createMock(Access::class); + $access->expects(self::once()) + ->method('getConnection') + ->willReturn($connection); + $access->expects(self::once()) + ->method('username2dn') + ->with('admin') + ->willReturn('admin'); + $access->expects(self::once()) + ->method('readAttribute') + ->with('admin', 'mailAlias') + ->willReturn(['aliasA@test.local', 'aliasB@test.local']); + $userBackend = $this->getMockBuilder(User_LDAP::class) ->disableOriginalConstructor() ->getMock(); + $userBackend->method('userExists') + ->with('admin') + ->willReturn(true); + $userBackend->method('getLDAPAccess') + ->willReturn($access); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->disableOriginalConstructor() + ->getMock(); + $server = $this->getServerMock($userBackend, $groupBackend); - $groupBackend->expects($this->at(0)) - ->method('groupExists') + $ldapProvider = $this->getLDAPProvider($server); + $values = $ldapProvider->getMultiValueUserAttribute('admin', 'mailAlias'); + + self::assertCount(2, $values); + } + + public function testGetUserAttributeLdapError(): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects(self::once()) + ->method('getFromCache') + ->with('admin-mailAlias') + ->willReturn(null); + $access = $this->createMock(Access::class); + $access->expects(self::once()) + ->method('getConnection') + ->willReturn($connection); + $access->expects(self::once()) + ->method('username2dn') + ->with('admin') + ->willReturn('admin'); + $access->expects(self::once()) + ->method('readAttribute') + ->with('admin', 'mailAlias') + ->willReturn(false); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->disableOriginalConstructor() + ->getMock(); + $userBackend->method('userExists') + ->with('admin') ->willReturn(true); - $groupBackend->expects($this->any()) - ->method('getConfiguration') - ->willReturn(['ldap_group_member_assoc_attribute' => 'assoc_type']); - $groupBackend->expects($this->any()) - ->method($this->anything()) - ->willReturnSelf(); + $userBackend->method('getLDAPAccess') + ->willReturn($access); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->disableOriginalConstructor() + ->getMock(); + $server = $this->getServerMock($userBackend, $groupBackend); + + $ldapProvider = $this->getLDAPProvider($server); + $value = $ldapProvider->getUserAttribute('admin', 'mailAlias'); + + self::assertNull($value); + } + public function testGetUserAttribute(): void { + $connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); + $connection->expects(self::once()) + ->method('getFromCache') + ->with('admin-mailAlias') + ->willReturn(null); + $access = $this->createMock(Access::class); + $access->expects(self::once()) + ->method('getConnection') + ->willReturn($connection); + $access->expects(self::once()) + ->method('username2dn') + ->with('admin') + ->willReturn('admin'); + $access->expects(self::once()) + ->method('readAttribute') + ->with('admin', 'mailAlias') + ->willReturn(['aliasA@test.local', 'aliasB@test.local']); + $userBackend = $this->getMockBuilder(User_LDAP::class) + ->disableOriginalConstructor() + ->getMock(); + $userBackend->method('userExists') + ->with('admin') + ->willReturn(true); + $userBackend->method('getLDAPAccess') + ->willReturn($access); + $groupBackend = $this->getMockBuilder(Group_LDAP::class) + ->disableOriginalConstructor() + ->getMock(); $server = $this->getServerMock($userBackend, $groupBackend); $ldapProvider = $this->getLDAPProvider($server); - $this->assertEquals('assoc_type', $ldapProvider->getLDAPGroupMemberAssoc('existing_group')); + $value = $ldapProvider->getUserAttribute('admin', 'mailAlias'); + + self::assertEquals('aliasA@test.local', $value); } } diff --git a/apps/user_ldap/tests/LDAPTest.php b/apps/user_ldap/tests/LDAPTest.php index 443bafe505b..6da592ad6a1 100644 --- a/apps/user_ldap/tests/LDAPTest.php +++ b/apps/user_ldap/tests/LDAPTest.php @@ -1,47 +1,27 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\LDAP; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class LDAPTest extends TestCase { - /** @var LDAP|\PHPUnit\Framework\MockObject\MockObject */ - private $ldap; + private LDAP&MockObject $ldap; protected function setUp(): void { parent::setUp(); $this->ldap = $this->getMockBuilder(LDAP::class) - ->setMethods(['invokeLDAPMethod']) + ->onlyMethods(['invokeLDAPMethod']) ->getMock(); } - public function errorProvider() { + public static function errorProvider(): array { return [ [ 'ldap_search(): Partial search results returned: Sizelimit exceeded at /srv/http/nextcloud/master/apps/user_ldap/lib/LDAP.php#292', @@ -53,14 +33,10 @@ class LDAPTest extends TestCase { ]; } - /** - * @param string $errorMessage - * @param bool $passThrough - * @dataProvider errorProvider - */ - public function testSearchWithErrorHandler(string $errorMessage, bool $passThrough) { + #[\PHPUnit\Framework\Attributes\DataProvider('errorProvider')] + public function testSearchWithErrorHandler(string $errorMessage, bool $passThrough): void { $wasErrorHandlerCalled = false; - $errorHandler = function ($number, $message, $file, $line) use (&$wasErrorHandlerCalled) { + $errorHandler = function ($number, $message, $file, $line) use (&$wasErrorHandlerCalled): void { $wasErrorHandlerCalled = true; }; @@ -70,7 +46,7 @@ class LDAPTest extends TestCase { ->expects($this->once()) ->method('invokeLDAPMethod') ->with('search', $this->anything(), $this->anything(), $this->anything(), $this->anything(), $this->anything()) - ->willReturnCallback(function () use ($errorMessage) { + ->willReturnCallback(function () use ($errorMessage): void { trigger_error($errorMessage); }); @@ -81,7 +57,7 @@ class LDAPTest extends TestCase { restore_error_handler(); } - public function testModReplace() { + public function testModReplace(): void { $link = $this->createMock(LDAP::class); $userDN = 'CN=user'; $password = 'MyPassword'; diff --git a/apps/user_ldap/tests/LDAPUserPluginDummy.php b/apps/user_ldap/tests/LDAPUserPluginDummy.php index a3bcc252fbe..8d4870406ae 100644 --- a/apps/user_ldap/tests/LDAPUserPluginDummy.php +++ b/apps/user_ldap/tests/LDAPUserPluginDummy.php @@ -1,26 +1,10 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br) - * - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\ILDAPUserPlugin; @@ -57,4 +41,12 @@ class LDAPUserPluginDummy implements ILDAPUserPlugin { public function countUsers() { return null; } + + public function canDeleteUser() { + return true; + } + + public function deleteUser($uid) { + return null; + } } diff --git a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php b/apps/user_ldap/tests/Mapping/AbstractMappingTestCase.php index 35259345f25..8efee4e2085 100644 --- a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php +++ b/apps/user_ldap/tests/Mapping/AbstractMappingTestCase.php @@ -1,43 +1,24 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Aaron Wood <aaronjwood@gmail.com> - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Stefan Weil <sw@weilnetz.de> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Mapping; use OCA\User_LDAP\Mapping\AbstractMapping; use OCP\IDBConnection; +use OCP\Server; -abstract class AbstractMappingTest extends \Test\TestCase { - abstract public function getMapper(\OCP\IDBConnection $dbMock); +abstract class AbstractMappingTestCase extends \Test\TestCase { + abstract public function getMapper(IDBConnection $dbMock); /** * kiss test on isColNameValid */ - public function testIsColNameValid() { + public function testIsColNameValid(): void { $dbMock = $this->createMock(IDBConnection::class); $mapper = $this->getMapper($dbMock); @@ -49,8 +30,8 @@ abstract class AbstractMappingTest extends \Test\TestCase { * returns an array of test entries with dn, name and uuid as keys * @return array */ - protected function getTestData() { - $data = [ + protected static function getTestData(): array { + return [ [ 'dn' => 'uid=foobar,dc=example,dc=org', 'name' => 'Foobar', @@ -67,16 +48,14 @@ abstract class AbstractMappingTest extends \Test\TestCase { 'uuid' => '3333-CCCC-1234-CDEF', ] ]; - - return $data; } /** * calls map() on the given mapper and asserts result for true - * @param \OCA\User_LDAP\Mapping\AbstractMapping $mapper + * @param AbstractMapping $mapper * @param array $data */ - protected function mapEntries($mapper, $data) { + protected function mapEntries(AbstractMapping $mapper, array $data): void { foreach ($data as $entry) { $done = $mapper->map($entry['dn'], $entry['name'], $entry['uuid']); $this->assertTrue($done); @@ -84,14 +63,14 @@ abstract class AbstractMappingTest extends \Test\TestCase { } /** - * initalizes environment for a test run and returns an array with + * initializes environment for a test run and returns an array with * test objects. Preparing environment means that all mappings are cleared * first and then filled with test entries. * @return array 0 = \OCA\User_LDAP\Mapping\AbstractMapping, 1 = array of - * users or groups + * users or groups */ - private function initTest() { - $dbc = \OC::$server->getDatabaseConnection(); + private function initTest(): array { + $dbc = Server::get(IDBConnection::class); $mapper = $this->getMapper($dbc); $data = $this->getTestData(); // make sure DB is pristine, then fill it with test entries @@ -105,8 +84,8 @@ abstract class AbstractMappingTest extends \Test\TestCase { * tests map() method with input that should result in not-mapping. * Hint: successful mapping is tested inherently with mapEntries(). */ - public function testMap() { - list($mapper, $data) = $this->initTest(); + public function testMap(): void { + [$mapper, $data] = $this->initTest(); // test that mapping will not happen when it shall not $tooLongDN = 'uid=joann,ou=Secret Small Specialized Department,ou=Some Tremendously Important Department,ou=Another Very Important Department,ou=Pretty Meaningful Derpartment,ou=Quite Broad And General Department,ou=The Topmost Department,dc=hugelysuccessfulcompany,dc=com'; @@ -125,12 +104,16 @@ abstract class AbstractMappingTest extends \Test\TestCase { * tests unmap() for both successful and unsuccessful removing of * mapping entries */ - public function testUnmap() { - list($mapper, $data) = $this->initTest(); + public function testUnmap(): void { + [$mapper, $data] = $this->initTest(); foreach ($data as $entry) { + $fdnBefore = $mapper->getDNByName($entry['name']); $result = $mapper->unmap($entry['name']); + $fdnAfter = $mapper->getDNByName($entry['name']); $this->assertTrue($result); + $this->assertSame($fdnBefore, $entry['dn']); + $this->assertFalse($fdnAfter); } $result = $mapper->unmap('notAnEntry'); @@ -141,8 +124,8 @@ abstract class AbstractMappingTest extends \Test\TestCase { * tests getDNByName(), getNameByDN() and getNameByUUID() for successful * and unsuccessful requests. */ - public function testGetMethods() { - list($mapper, $data) = $this->initTest(); + public function testGetMethods(): void { + [$mapper, $data] = $this->initTest(); foreach ($data as $entry) { $fdn = $mapper->getDNByName($entry['name']); @@ -169,24 +152,24 @@ abstract class AbstractMappingTest extends \Test\TestCase { /** * tests getNamesBySearch() for successful and unsuccessful requests. */ - public function testSearch() { - list($mapper,) = $this->initTest(); + public function testSearch(): void { + [$mapper,] = $this->initTest(); $names = $mapper->getNamesBySearch('oo', '%', '%'); - $this->assertTrue(is_array($names)); + $this->assertIsArray($names); $this->assertSame(2, count($names)); - $this->assertTrue(in_array('Foobar', $names)); - $this->assertTrue(in_array('Barfoo', $names)); + $this->assertContains('Foobar', $names); + $this->assertContains('Barfoo', $names); $names = $mapper->getNamesBySearch('nada'); - $this->assertTrue(is_array($names)); - $this->assertSame(0, count($names)); + $this->assertIsArray($names); + $this->assertCount(0, $names); } /** * tests setDNbyUUID() for successful and unsuccessful update. */ - public function testSetDNMethod() { - list($mapper, $data) = $this->initTest(); + public function testSetDNMethod(): void { + [$mapper, $data] = $this->initTest(); $newDN = 'uid=modified,dc=example,dc=org'; $done = $mapper->setDNbyUUID($newDN, $data[0]['uuid']); @@ -204,9 +187,9 @@ abstract class AbstractMappingTest extends \Test\TestCase { /** * tests setUUIDbyDN() for successful and unsuccessful update. */ - public function testSetUUIDMethod() { + public function testSetUUIDMethod(): void { /** @var AbstractMapping $mapper */ - list($mapper, $data) = $this->initTest(); + [$mapper, $data] = $this->initTest(); $newUUID = 'ABC737-DEF754'; @@ -224,8 +207,8 @@ abstract class AbstractMappingTest extends \Test\TestCase { /** * tests clear() for successful update. */ - public function testClear() { - list($mapper, $data) = $this->initTest(); + public function testClear(): void { + [$mapper, $data] = $this->initTest(); $done = $mapper->clear(); $this->assertTrue($done); @@ -238,13 +221,13 @@ abstract class AbstractMappingTest extends \Test\TestCase { /** * tests clear() for successful update. */ - public function testClearCb() { - list($mapper, $data) = $this->initTest(); + public function testClearCb(): void { + [$mapper, $data] = $this->initTest(); $callbackCalls = 0; $test = $this; - $callback = function (string $id) use ($test, &$callbackCalls) { + $callback = function (string $id) use ($test, &$callbackCalls): void { $test->assertTrue(trim($id) !== ''); $callbackCalls++; }; @@ -261,30 +244,30 @@ abstract class AbstractMappingTest extends \Test\TestCase { /** * tests getList() method */ - public function testList() { - list($mapper, $data) = $this->initTest(); + public function testList(): void { + [$mapper, $data] = $this->initTest(); // get all entries without specifying offset or limit $results = $mapper->getList(); - $this->assertSame(3, count($results)); + $this->assertCount(3, $results); // get all-1 entries by specifying offset, and an high limit // specifying only offset without limit will not work by underlying lib $results = $mapper->getList(1, 999); - $this->assertSame(count($data) - 1, count($results)); + $this->assertCount(count($data) - 1, $results); // get first 2 entries by limit, but not offset - $results = $mapper->getList(null, 2); - $this->assertSame(2, count($results)); + $results = $mapper->getList(0, 2); + $this->assertCount(2, $results); // get 2nd entry by specifying both offset and limit $results = $mapper->getList(1, 1); - $this->assertSame(1, count($results)); + $this->assertCount(1, $results); } - public function testGetListOfIdsByDn() { + public function testGetListOfIdsByDn(): void { /** @var AbstractMapping $mapper */ - list($mapper,) = $this->initTest(); + [$mapper,] = $this->initTest(); $listOfDNs = []; for ($i = 0; $i < 66640; $i++) { @@ -298,6 +281,6 @@ abstract class AbstractMappingTest extends \Test\TestCase { } $result = $mapper->getListOfIdsByDn($listOfDNs); - $this->assertSame(66640 / 20, count($result)); + $this->assertCount(66640 / 20, $result); } } diff --git a/apps/user_ldap/tests/Mapping/GroupMappingTest.php b/apps/user_ldap/tests/Mapping/GroupMappingTest.php index 6549ae66671..5729058d10e 100644 --- a/apps/user_ldap/tests/Mapping/GroupMappingTest.php +++ b/apps/user_ldap/tests/Mapping/GroupMappingTest.php @@ -1,31 +1,15 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Mapping; use OCA\User_LDAP\Mapping\GroupMapping; +use OCP\IDBConnection; /** * Class GroupMappingTest @@ -34,8 +18,8 @@ use OCA\User_LDAP\Mapping\GroupMapping; * * @package OCA\User_LDAP\Tests\Mapping */ -class GroupMappingTest extends AbstractMappingTest { - public function getMapper(\OCP\IDBConnection $dbMock) { +class GroupMappingTest extends AbstractMappingTestCase { + public function getMapper(IDBConnection $dbMock) { return new GroupMapping($dbMock); } } diff --git a/apps/user_ldap/tests/Mapping/UserMappingTest.php b/apps/user_ldap/tests/Mapping/UserMappingTest.php index 2417eda0b8c..4346fe1d23f 100644 --- a/apps/user_ldap/tests/Mapping/UserMappingTest.php +++ b/apps/user_ldap/tests/Mapping/UserMappingTest.php @@ -1,31 +1,16 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\Mapping; use OCA\User_LDAP\Mapping\UserMapping; +use OCP\IDBConnection; +use OCP\Support\Subscription\IAssertion; /** * Class UserMappingTest @@ -34,8 +19,8 @@ use OCA\User_LDAP\Mapping\UserMapping; * * @package OCA\User_LDAP\Tests\Mapping */ -class UserMappingTest extends AbstractMappingTest { - public function getMapper(\OCP\IDBConnection $dbMock) { - return new UserMapping($dbMock); +class UserMappingTest extends AbstractMappingTestCase { + public function getMapper(IDBConnection $dbMock) { + return new UserMapping($dbMock, $this->createMock(IAssertion::class)); } } diff --git a/apps/user_ldap/tests/Migration/AbstractUUIDFixTest.php b/apps/user_ldap/tests/Migration/AbstractUUIDFixTestCase.php index 82483a54327..7a85b885bc1 100644 --- a/apps/user_ldap/tests/Migration/AbstractUUIDFixTest.php +++ b/apps/user_ldap/tests/Migration/AbstractUUIDFixTestCase.php @@ -1,64 +1,33 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests\Migration; use OCA\User_LDAP\Access; use OCA\User_LDAP\Helper; use OCA\User_LDAP\LDAP; -use OCA\User_LDAP\Mapping\GroupMapping; -use OCA\User_LDAP\Mapping\UserMapping; -use OCA\User_LDAP\Migration\UUIDFixUser; -use OCA\User_LDAP\User_Proxy; +use OCA\User_LDAP\Mapping\AbstractMapping; +use OCA\User_LDAP\Migration\UUIDFix; +use OCA\User_LDAP\Proxy; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\IConfig; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; -abstract class AbstractUUIDFixTest extends TestCase { - /** @var Helper|\PHPUnit\Framework\MockObject\MockObject */ - protected $helper; - - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; - - /** @var LDAP|\PHPUnit\Framework\MockObject\MockObject */ - protected $ldap; - - /** @var UserMapping|GroupMapping|\PHPUnit\Framework\MockObject\MockObject */ - protected $mapper; - - /** @var UUIDFixUser */ - protected $job; - - /** @var User_Proxy|\PHPUnit\Framework\MockObject\MockObject */ - protected $proxy; - - /** @var Access|\PHPUnit\Framework\MockObject\MockObject */ - protected $access; - - /** @var bool */ - protected $isUser = true; +abstract class AbstractUUIDFixTestCase extends TestCase { + protected Helper&MockObject $helper; + protected IConfig&MockObject $config; + protected LDAP&MockObject $ldap; + protected AbstractMapping $mapper; + protected UUIDFix $job; + protected Proxy $proxy; + protected Access&MockObject $access; + protected ITimeFactory&MockObject $time; + protected bool $isUser = true; protected function setUp(): void { parent::setUp(); @@ -66,6 +35,7 @@ abstract class AbstractUUIDFixTest extends TestCase { $this->ldap = $this->createMock(LDAP::class); $this->config = $this->createMock(IConfig::class); $this->access = $this->createMock(Access::class); + $this->time = $this->createMock(ITimeFactory::class); $this->helper = $this->createMock(Helper::class); $this->helper->expects($this->any()) @@ -75,13 +45,13 @@ abstract class AbstractUUIDFixTest extends TestCase { } protected function instantiateJob($className) { - $this->job = new $className($this->mapper, $this->proxy); + $this->job = new $className($this->time, $this->mapper, $this->proxy); $this->proxy->expects($this->any()) ->method('getLDAPAccess') ->willReturn($this->access); } - public function testRunSingleRecord() { + public function testRunSingleRecord(): void { $args = [ 'records' => [ 0 => [ @@ -105,7 +75,7 @@ abstract class AbstractUUIDFixTest extends TestCase { $this->job->run($args); } - public function testRunValidRecord() { + public function testRunValidRecord(): void { $correctUUID = '4355-AED3-9D73-03AD'; $args = [ 'records' => [ @@ -128,7 +98,7 @@ abstract class AbstractUUIDFixTest extends TestCase { $this->job->run($args); } - public function testRunRemovedRecord() { + public function testRunRemovedRecord(): void { $args = [ 'records' => [ 0 => [ @@ -150,7 +120,7 @@ abstract class AbstractUUIDFixTest extends TestCase { $this->job->run($args); } - public function testRunManyRecords() { + public function testRunManyRecords(): void { $args = [ 'records' => [ 0 => [ @@ -174,19 +144,23 @@ abstract class AbstractUUIDFixTest extends TestCase { $this->access->expects($this->exactly(3)) ->method('getUUID') - ->withConsecutive( - [$args['records'][0]['dn'], $this->isUser], - [$args['records'][1]['dn'], $this->isUser], - [$args['records'][2]['dn'], $this->isUser] - ) - ->willReturnOnConsecutiveCalls($correctUUIDs[0], $correctUUIDs[1], $correctUUIDs[2]); - + ->willReturnMap([ + [$args['records'][0]['dn'], $this->isUser, null, $correctUUIDs[0]], + [$args['records'][1]['dn'], $this->isUser, null, $correctUUIDs[1]], + [$args['records'][2]['dn'], $this->isUser, null, $correctUUIDs[2]], + ]); + + $calls = [ + [$correctUUIDs[0], $args['records'][0]['dn']], + [$correctUUIDs[2], $args['records'][2]['dn']], + ]; $this->mapper->expects($this->exactly(2)) ->method('setUUIDbyDN') - ->withConsecutive( - [$correctUUIDs[0], $args['records'][0]['dn']], - [$correctUUIDs[2], $args['records'][2]['dn']] - ); + ->willReturnCallback(function ($i, $j) use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + return true; + }); $this->job->run($args); } diff --git a/apps/user_ldap/tests/Migration/UUIDFixGroupTest.php b/apps/user_ldap/tests/Migration/UUIDFixGroupTest.php index fb9d2e2331c..89d880f4acb 100644 --- a/apps/user_ldap/tests/Migration/UUIDFixGroupTest.php +++ b/apps/user_ldap/tests/Migration/UUIDFixGroupTest.php @@ -1,33 +1,15 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - -namespace OCA\Group_LDAP\Tests\Migration; +namespace OCA\User_LDAP\Tests\Migration; use OCA\User_LDAP\Group_Proxy; use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Migration\UUIDFixGroup; -use OCA\User_LDAP\Tests\Migration\AbstractUUIDFixTest; /** * Class UUIDFixGroupTest @@ -35,7 +17,7 @@ use OCA\User_LDAP\Tests\Migration\AbstractUUIDFixTest; * @package OCA\Group_LDAP\Tests\Migration * @group DB */ -class UUIDFixGroupTest extends AbstractUUIDFixTest { +class UUIDFixGroupTest extends AbstractUUIDFixTestCase { protected function setUp(): void { $this->isUser = false; parent::setUp(); diff --git a/apps/user_ldap/tests/Migration/UUIDFixInsertTest.php b/apps/user_ldap/tests/Migration/UUIDFixInsertTest.php index 492f0c657ac..6215ffcb6a1 100644 --- a/apps/user_ldap/tests/Migration/UUIDFixInsertTest.php +++ b/apps/user_ldap/tests/Migration/UUIDFixInsertTest.php @@ -1,28 +1,10 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests\Migration; use OCA\User_LDAP\Mapping\GroupMapping; @@ -31,23 +13,15 @@ use OCA\User_LDAP\Migration\UUIDFixInsert; use OCP\BackgroundJob\IJobList; use OCP\IConfig; use OCP\Migration\IOutput; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class UUIDFixInsertTest extends TestCase { - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; - - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject */ - protected $userMapper; - - /** @var GroupMapping|\PHPUnit\Framework\MockObject\MockObject */ - protected $groupMapper; - - /** @var IJobList|\PHPUnit\Framework\MockObject\MockObject */ - protected $jobList; - - /** @var UUIDFixInsert */ - protected $job; + protected IConfig&MockObject $config; + protected UserMapping&MockObject $userMapper; + protected GroupMapping&MockObject $groupMapper; + protected IJobList&MockObject $jobList; + protected UUIDFixInsert $job; protected function setUp(): void { parent::setUp(); @@ -64,22 +38,21 @@ class UUIDFixInsertTest extends TestCase { ); } - public function testGetName() { + public function testGetName(): void { $this->assertSame('Insert UUIDFix background job for user and group in batches', $this->job->getName()); } - public function recordProvider() { + public static function recordProvider(): array { $record = [ 'dn' => 'cn=somerecord,dc=somewhere', 'name' => 'Something', 'uuid' => 'AB12-3456-CDEF7-8GH9' ]; - array_fill(0, 50, $record); $userBatches = [ 0 => array_fill(0, 50, $record), 1 => array_fill(0, 50, $record), - 2 => array_fill(0, 13, $record), + 2 => array_fill(0, 13, $record), ]; $groupBatches = [ @@ -91,13 +64,12 @@ class UUIDFixInsertTest extends TestCase { ]; } - public function recordProviderTooLongAndNone() { + public static function recordProviderTooLongAndNone(): array { $record = [ 'dn' => 'cn=somerecord,dc=somewhere', 'name' => 'Something', 'uuid' => 'AB12-3456-CDEF7-8GH9' ]; - array_fill(0, 50, $record); $userBatches = [ 0 => array_fill(0, 50, $record), @@ -114,10 +86,8 @@ class UUIDFixInsertTest extends TestCase { ]; } - /** - * @dataProvider recordProvider - */ - public function testRun($userBatches, $groupBatches) { + #[\PHPUnit\Framework\Attributes\DataProvider('recordProvider')] + public function testRun(array $userBatches, array $groupBatches): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('user_ldap', 'installed_version', '1.2.1') @@ -125,8 +95,11 @@ class UUIDFixInsertTest extends TestCase { $this->userMapper->expects($this->exactly(3)) ->method('getList') - ->withConsecutive([0, 50], [50, 50], [100, 50]) - ->willReturnOnConsecutiveCalls($userBatches[0], $userBatches[1], $userBatches[2]); + ->willReturnMap([ + [0, 50, false, $userBatches[0]], + [50, 50, false, $userBatches[1]], + [100, 50, false, $userBatches[2]], + ]); $this->groupMapper->expects($this->exactly(1)) ->method('getList') @@ -141,10 +114,8 @@ class UUIDFixInsertTest extends TestCase { $this->job->run($out); } - /** - * @dataProvider recordProviderTooLongAndNone - */ - public function testRunWithManyAndNone($userBatches, $groupBatches) { + #[\PHPUnit\Framework\Attributes\DataProvider('recordProviderTooLongAndNone')] + public function testRunWithManyAndNone(array $userBatches, array $groupBatches): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('user_ldap', 'installed_version', '1.2.1') @@ -152,33 +123,35 @@ class UUIDFixInsertTest extends TestCase { $this->userMapper->expects($this->exactly(5)) ->method('getList') - ->withConsecutive([0, 50], [0, 40], [0, 32], [32, 32], [64, 32]) - ->willReturnOnConsecutiveCalls($userBatches[0], $userBatches[1], $userBatches[2], $userBatches[3], $userBatches[4]); + ->willReturnMap([ + [0, 50, false, $userBatches[0]], + [0, 40, false, $userBatches[1]], + [0, 32, false, $userBatches[2]], + [32, 32, false, $userBatches[3]], + [64, 32, false, $userBatches[4]], + ]); $this->groupMapper->expects($this->once()) ->method('getList') ->with(0, 50) ->willReturn($groupBatches[0]); - $this->jobList->expects($this->at(0)) - ->method('add') - ->willThrowException(new \InvalidArgumentException('Background job arguments can\'t exceed 4000 etc')); - $this->jobList->expects($this->at(1)) + $this->jobList->expects($this->exactly(5)) ->method('add') - ->willThrowException(new \InvalidArgumentException('Background job arguments can\'t exceed 4000 etc')); - $this->jobList->expects($this->at(2)) - ->method('add'); - $this->jobList->expects($this->at(3)) - ->method('add'); - $this->jobList->expects($this->at(4)) - ->method('add'); + ->willReturnOnConsecutiveCalls( + $this->throwException(new \InvalidArgumentException('Background job arguments can\'t exceed 4000 etc')), + $this->throwException(new \InvalidArgumentException('Background job arguments can\'t exceed 4000 etc')), + null, + null, + null, + ); /** @var IOutput $out */ $out = $this->createMock(IOutput::class); $this->job->run($out); } - public function testDonNotRun() { + public function testDonNotRun(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('user_ldap', 'installed_version', '1.2.1') diff --git a/apps/user_ldap/tests/Migration/UUIDFixUserTest.php b/apps/user_ldap/tests/Migration/UUIDFixUserTest.php index cf80bf36230..a582fd677fa 100644 --- a/apps/user_ldap/tests/Migration/UUIDFixUserTest.php +++ b/apps/user_ldap/tests/Migration/UUIDFixUserTest.php @@ -1,27 +1,10 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests\Migration; use OCA\User_LDAP\Mapping\UserMapping; @@ -34,7 +17,7 @@ use OCA\User_LDAP\User_Proxy; * @package OCA\User_LDAP\Tests\Migration * @group DB */ -class UUIDFixUserTest extends AbstractUUIDFixTest { +class UUIDFixUserTest extends AbstractUUIDFixTestCase { protected function setUp(): void { $this->isUser = true; parent::setUp(); diff --git a/apps/user_ldap/tests/Service/BirthdateParserServiceTest.php b/apps/user_ldap/tests/Service/BirthdateParserServiceTest.php new file mode 100644 index 00000000000..061118f10c1 --- /dev/null +++ b/apps/user_ldap/tests/Service/BirthdateParserServiceTest.php @@ -0,0 +1,51 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\User_LDAP\Tests\Service; + +use DateTimeImmutable; +use OCA\User_LDAP\Service\BirthdateParserService; +use PHPUnit\Framework\TestCase; + +class BirthdateParserServiceTest extends TestCase { + private BirthdateParserService $service; + + protected function setUp(): void { + parent::setUp(); + + $this->service = new BirthdateParserService(); + } + + public static function parseBirthdateDataProvider(): array { + return [ + ['2024-01-01', new DateTimeImmutable('2024-01-01'), false], + ['20240101', new DateTimeImmutable('2024-01-01'), false], + ['199412161032Z', new DateTimeImmutable('1994-12-16'), false], // LDAP generalized time + ['199412160532-0500', new DateTimeImmutable('1994-12-16'), false], // LDAP generalized time + ['2023-07-31T00:60:59.000Z', null, true], + ['01.01.2024', null, true], + ['01/01/2024', null, true], + ['01 01 2024', null, true], + ['foobar', null, true], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('parseBirthdateDataProvider')] + public function testParseBirthdate( + string $value, + ?DateTimeImmutable $expected, + bool $shouldThrow, + ): void { + if ($shouldThrow) { + $this->expectException(\InvalidArgumentException::class); + } + + $actual = $this->service->parseBirthdate($value); + $this->assertEquals($expected, $actual); + } +} diff --git a/apps/user_ldap/tests/Service/UpdateGroupsServiceTest.php b/apps/user_ldap/tests/Service/UpdateGroupsServiceTest.php new file mode 100644 index 00000000000..601aee86602 --- /dev/null +++ b/apps/user_ldap/tests/Service/UpdateGroupsServiceTest.php @@ -0,0 +1,137 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\User_LDAP\Tests\Service; + +use OCA\User_LDAP\Db\GroupMembership; +use OCA\User_LDAP\Db\GroupMembershipMapper; +use OCA\User_LDAP\Group_Proxy; +use OCA\User_LDAP\Service\UpdateGroupsService; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Group\Events\UserAddedEvent; +use OCP\Group\Events\UserRemovedEvent; +use OCP\IGroup; +use OCP\IGroupManager; +use OCP\IUser; +use OCP\IUserManager; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; +use Test\TestCase; + +class UpdateGroupsServiceTest extends TestCase { + protected Group_Proxy&MockObject $groupBackend; + protected IEventDispatcher&MockObject $dispatcher; + protected IGroupManager&MockObject $groupManager; + protected IUserManager&MockObject $userManager; + protected LoggerInterface&MockObject $logger; + protected GroupMembershipMapper&MockObject $groupMembershipMapper; + protected UpdateGroupsService $updateGroupsService; + + public function setUp(): void { + $this->groupBackend = $this->createMock(Group_Proxy::class); + $this->dispatcher = $this->createMock(IEventDispatcher::class); + $this->groupManager = $this->createMock(IGroupManager::class); + $this->userManager = $this->createMock(IUserManager::class); + $this->logger = $this->createMock(LoggerInterface::class); + $this->groupMembershipMapper = $this->createMock(GroupMembershipMapper::class); + + $this->updateGroupsService = new UpdateGroupsService( + $this->groupBackend, + $this->dispatcher, + $this->groupManager, + $this->userManager, + $this->logger, + $this->groupMembershipMapper, + ); + } + + public function testHandleKnownGroups(): void { + $knownGroups = [ + 'emptyGroup' => [], + 'stableGroup' => ['userA', 'userC', 'userE'], + 'groupWithAdditions' => ['userA', 'userC', 'userE'], + 'groupWithRemovals' => ['userA', 'userC', 'userDeleted', 'userE'], + 'groupWithAdditionsAndRemovals' => ['userA', 'userC', 'userE'], + 'vanishedGroup' => ['userB', 'userDeleted'], + ]; + $knownGroupsDB = []; + foreach ($knownGroups as $gid => $members) { + $knownGroupsDB[] = [ + 'owncloudname' => $gid, + 'owncloudusers' => $members + ]; + } + $actualGroups = [ + 'emptyGroup' => [], + 'stableGroup' => ['userA', 'userC', 'userE'], + 'groupWithAdditions' => ['userA', 'userC', 'userE', 'userF'], + 'groupWithRemovals' => ['userA', 'userE'], + 'groupWithAdditionsAndRemovals' => ['userC', 'userE', 'userF'], + 'newGroup' => ['userB', 'userF'], + ]; + $groups = array_intersect(array_keys($knownGroups), array_keys($actualGroups)); + + $this->groupMembershipMapper->expects($this->never()) + ->method('getKnownGroups'); + $this->groupMembershipMapper->expects($this->exactly(5)) + ->method('findGroupMemberships') + ->willReturnCallback( + fn ($group) => array_map( + fn ($userid) => GroupMembership::fromParams(['groupid' => $group,'userid' => $userid]), + $knownGroups[$group] + ) + ); + $this->groupMembershipMapper->expects($this->exactly(3)) + ->method('delete'); + $this->groupMembershipMapper->expects($this->exactly(2)) + ->method('insert'); + + $this->groupBackend->expects($this->any()) + ->method('usersInGroup') + ->willReturnCallback(function ($groupID) use ($actualGroups) { + return $actualGroups[$groupID] ?? []; + }); + + $this->groupManager->expects($this->any()) + ->method('get') + ->willReturnCallback(function (string $groupId): ?IGroup { + if ($groupId === 'vanishedGroup') { + return null; + } + return $this->createMock(IGroup::class); + }); + + $this->userManager->expects($this->exactly(5)) + ->method('get') + ->willReturnCallback(function (string $userId) { + if ($userId === 'userDeleted') { + // user already deleted + return null; + } + return $this->createMock(IUser::class); + }); + + $addedEvents = 0; + $removedEvents = 0; + $this->dispatcher->expects($this->exactly(4)) + ->method('dispatchTyped') + ->willReturnCallback(function ($event) use (&$addedEvents, &$removedEvents): void { + if ($event instanceof UserRemovedEvent) { + $removedEvents++; + } elseif ($event instanceof UserAddedEvent) { + $addedEvents++; + } + }); + + $this->updateGroupsService->handleKnownGroups($groups); + + $this->assertSame(2, $removedEvents); + $this->assertSame(2, $addedEvents); + // and no event for the user that is already deleted, the DB is nevertheless updated, hence 5 + } +} diff --git a/apps/user_ldap/tests/Settings/AdminTest.php b/apps/user_ldap/tests/Settings/AdminTest.php index 2599a966f06..b17e96c1a68 100644 --- a/apps/user_ldap/tests/Settings/AdminTest.php +++ b/apps/user_ldap/tests/Settings/AdminTest.php @@ -1,37 +1,19 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests\Settings; use OCA\User_LDAP\Configuration; use OCA\User_LDAP\Settings\Admin; use OCP\AppFramework\Http\TemplateResponse; use OCP\IL10N; -use OCP\Template; +use OCP\Server; +use OCP\Template\ITemplateManager; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; /** @@ -39,32 +21,31 @@ use Test\TestCase; * @package OCA\User_LDAP\Tests\Settings */ class AdminTest extends TestCase { - /** @var Admin */ - private $admin; - /** @var IL10N */ - private $l10n; + private IL10N&MockObject $l10n; + private ITemplateManager $templateManager; + private Admin $admin; protected function setUp(): void { parent::setUp(); - $this->l10n = $this->getMockBuilder(IL10N::class)->getMock(); + $this->l10n = $this->createMock(IL10N::class); + $this->templateManager = Server::get(ITemplateManager::class); $this->admin = new Admin( - $this->l10n + $this->l10n, + $this->templateManager, ); } - /** - * @UseDB - */ - public function testGetForm() { + public function testGetForm(): void { $prefixes = ['s01']; $hosts = ['s01' => '']; - $wControls = new Template('user_ldap', 'part.wizardcontrols'); + $wControls = $this->templateManager->getTemplate('user_ldap', 'part.wizardcontrols'); $wControls = $wControls->fetchPage(); - $sControls = new Template('user_ldap', 'part.settingcontrols'); + $sControls = $this->templateManager->getTemplate('user_ldap', 'part.settingcontrols'); $sControls = $sControls->fetchPage(); + $parameters = []; $parameters['serverConfigurationPrefixes'] = $prefixes; $parameters['serverConfigurationHosts'] = $hosts; $parameters['settingControls'] = $sControls; @@ -74,18 +55,18 @@ class AdminTest extends TestCase { $config = new Configuration('', false); $defaults = $config->getDefaults(); foreach ($defaults as $key => $default) { - $parameters[$key.'_default'] = $default; + $parameters[$key . '_default'] = $default; } $expected = new TemplateResponse('user_ldap', 'settings', $parameters); $this->assertEquals($expected, $this->admin->getForm()); } - public function testGetSection() { + public function testGetSection(): void { $this->assertSame('ldap', $this->admin->getSection()); } - public function testGetPriority() { + public function testGetPriority(): void { $this->assertSame(5, $this->admin->getPriority()); } } diff --git a/apps/user_ldap/tests/Settings/SectionTest.php b/apps/user_ldap/tests/Settings/SectionTest.php index f27ac0843e8..3f9ae1e56d4 100644 --- a/apps/user_ldap/tests/Settings/SectionTest.php +++ b/apps/user_ldap/tests/Settings/SectionTest.php @@ -1,43 +1,22 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch> - * - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests\Settings; use OCA\User_LDAP\Settings\Section; use OCP\IL10N; use OCP\IURLGenerator; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class SectionTest extends TestCase { - /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */ - private $url; - /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */ - private $l; - /** @var Section */ - private $section; + private IURLGenerator&MockObject $url; + private IL10N&MockObject $l; + private Section $section; protected function setUp(): void { parent::setUp(); @@ -50,25 +29,25 @@ class SectionTest extends TestCase { ); } - public function testGetID() { + public function testGetID(): void { $this->assertSame('ldap', $this->section->getID()); } - public function testGetName() { + public function testGetName(): void { $this->l ->expects($this->once()) ->method('t') - ->with('LDAP / AD integration') - ->willReturn('LDAP / AD integration'); + ->with('LDAP/AD integration') + ->willReturn('LDAP/AD integration'); - $this->assertSame('LDAP / AD integration', $this->section->getName()); + $this->assertSame('LDAP/AD integration', $this->section->getName()); } - public function testGetPriority() { + public function testGetPriority(): void { $this->assertSame(25, $this->section->getPriority()); } - public function testGetIcon() { + public function testGetIcon(): void { $this->url->expects($this->once()) ->method('imagePath') ->with('user_ldap', 'app-dark.svg') diff --git a/apps/user_ldap/tests/User/DeletedUsersIndexTest.php b/apps/user_ldap/tests/User/DeletedUsersIndexTest.php index 8435078051c..b245e52fe6e 100644 --- a/apps/user_ldap/tests/User/DeletedUsersIndexTest.php +++ b/apps/user_ldap/tests/User/DeletedUsersIndexTest.php @@ -1,36 +1,19 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests\User; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\DeletedUsersIndex; use OCP\IConfig; use OCP\IDBConnection; +use OCP\Server; use OCP\Share\IManager; +use PHPUnit\Framework\MockObject\MockObject; /** * Class DeletedUsersIndexTest @@ -40,26 +23,18 @@ use OCP\Share\IManager; * @package OCA\User_LDAP\Tests\User */ class DeletedUsersIndexTest extends \Test\TestCase { - /** @var DeletedUsersIndex */ - protected $dui; - - /** @var IConfig */ - protected $config; - - /** @var IDBConnection */ - protected $db; - - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject */ - protected $mapping; - /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $shareManager; + protected DeletedUsersIndex $dui; + protected IConfig $config; + protected IDBConnection $db; + protected UserMapping&MockObject $mapping; + protected IManager&MockObject $shareManager; protected function setUp(): void { parent::setUp(); // no mocks for those as tests go against DB - $this->config = \OC::$server->getConfig(); - $this->db = \OC::$server->getDatabaseConnection(); + $this->config = Server::get(IConfig::class); + $this->db = Server::get(IDBConnection::class); // ensure a clean database $this->config->deleteAppFromAllUsers('user_ldap'); @@ -75,7 +50,7 @@ class DeletedUsersIndexTest extends \Test\TestCase { parent::tearDown(); } - public function testMarkAndFetchUser() { + public function testMarkAndFetchUser(): void { $uids = [ 'cef3775c-71d2-48eb-8984-39a4051b0b95', '8c4bbb40-33ed-42d0-9b14-85b0ab76c1cc', @@ -103,7 +78,7 @@ class DeletedUsersIndexTest extends \Test\TestCase { $this->assertEmpty($uids); } - public function testUnmarkUser() { + public function testUnmarkUser(): void { $uids = [ '22a162c7-a9ee-487c-9f33-0563795583fb', '1fb4e0da-4a75-47f3-8fa7-becc7e35c9c5', diff --git a/apps/user_ldap/tests/User/ManagerTest.php b/apps/user_ldap/tests/User/ManagerTest.php index 9f6d43a9a24..bf9d1f5746f 100644 --- a/apps/user_ldap/tests/User/ManagerTest.php +++ b/apps/user_ldap/tests/User/ManagerTest.php @@ -1,39 +1,16 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Philippe Jung <phil.jung@free.fr> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\User; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; -use OCA\User_LDAP\FilesystemHelper; use OCA\User_LDAP\ILDAPWrapper; -use OCA\User_LDAP\LogWrapper; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\User; use OCP\IAvatarManager; @@ -43,6 +20,8 @@ use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; use OCP\Share\IManager; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; /** * Class Test_User_Manager @@ -52,51 +31,25 @@ use OCP\Share\IManager; * @package OCA\User_LDAP\Tests\User */ class ManagerTest extends \Test\TestCase { - /** @var Access|\PHPUnit\Framework\MockObject\MockObject */ - protected $access; - - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; - - /** @var FilesystemHelper|\PHPUnit\Framework\MockObject\MockObject */ - protected $fileSystemHelper; - - /** @var LogWrapper|\PHPUnit\Framework\MockObject\MockObject */ - protected $log; - - /** @var IAvatarManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $avatarManager; - - /** @var Image|\PHPUnit\Framework\MockObject\MockObject */ - protected $image; - - /** @var IDBConnection|\PHPUnit\Framework\MockObject\MockObject */ - protected $dbc; - - /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $ncUserManager; - - /** @var INotificationManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $notificationManager; - - /** @var ILDAPWrapper|\PHPUnit\Framework\MockObject\MockObject */ - protected $ldapWrapper; - - /** @var Connection */ - protected $connection; - - /** @var Manager */ - protected $manager; - /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $shareManager; + protected Access&MockObject $access; + protected IConfig&MockObject $config; + protected LoggerInterface&MockObject $logger; + protected IAvatarManager&MockObject $avatarManager; + protected Image&MockObject $image; + protected IDBConnection&MockObject $dbc; + protected IUserManager&MockObject $ncUserManager; + protected INotificationManager&MockObject $notificationManager; + protected ILDAPWrapper&MockObject $ldapWrapper; + protected Connection $connection; + protected IManager&MockObject $shareManager; + protected Manager $manager; protected function setUp(): void { parent::setUp(); $this->access = $this->createMock(Access::class); $this->config = $this->createMock(IConfig::class); - $this->fileSystemHelper = $this->createMock(FilesystemHelper::class); - $this->log = $this->createMock(LogWrapper::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->avatarManager = $this->createMock(IAvatarManager::class); $this->image = $this->createMock(Image::class); $this->ncUserManager = $this->createMock(IUserManager::class); @@ -113,8 +66,7 @@ class ManagerTest extends \Test\TestCase { /** @noinspection PhpUnhandledExceptionInspection */ $this->manager = new Manager( $this->config, - $this->fileSystemHelper, - $this->log, + $this->logger, $this->avatarManager, $this->image, $this->ncUserManager, @@ -125,7 +77,7 @@ class ManagerTest extends \Test\TestCase { $this->manager->setLdapAccess($this->access); } - public function dnProvider() { + public static function dnProvider(): array { return [ ['cn=foo,dc=foobar,dc=bar'], ['uid=foo,o=foobar,c=bar'], @@ -133,10 +85,8 @@ class ManagerTest extends \Test\TestCase { ]; } - /** - * @dataProvider dnProvider - */ - public function testGetByDNExisting(string $inputDN) { + #[\PHPUnit\Framework\Attributes\DataProvider('dnProvider')] + public function testGetByDNExisting(string $inputDN): void { $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e'; $this->access->expects($this->once()) @@ -161,7 +111,7 @@ class ManagerTest extends \Test\TestCase { $this->assertInstanceOf(User::class, $user); } - public function testGetByDNNotExisting() { + public function testGetByDNNotExisting(): void { $inputDN = 'cn=gone,dc=foobar,dc=bar'; $this->access->expects($this->once()) @@ -183,7 +133,7 @@ class ManagerTest extends \Test\TestCase { $this->assertNull($user); } - public function testGetByUidExisting() { + public function testGetByUidExisting(): void { $dn = 'cn=foo,dc=foobar,dc=bar'; $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e'; @@ -209,7 +159,7 @@ class ManagerTest extends \Test\TestCase { $this->assertInstanceOf(User::class, $user); } - public function testGetByUidNotExisting() { + public function testGetByUidNotExisting(): void { $uid = 'gone'; $this->access->expects($this->never()) @@ -225,17 +175,15 @@ class ManagerTest extends \Test\TestCase { $this->assertNull($user); } - public function attributeRequestProvider() { + public static function attributeRequestProvider(): array { return [ [false], [true], ]; } - /** - * @dataProvider attributeRequestProvider - */ - public function testGetAttributes($minimal) { + #[\PHPUnit\Framework\Attributes\DataProvider('attributeRequestProvider')] + public function testGetAttributes($minimal): void { $this->connection->setConfiguration([ 'ldapEmailAttribute' => 'MAIL', 'ldapUserAvatarRule' => 'default', @@ -245,10 +193,10 @@ class ManagerTest extends \Test\TestCase { $attributes = $this->manager->getAttributes($minimal); - $this->assertTrue(in_array('dn', $attributes)); - $this->assertTrue(in_array(strtolower($this->access->getConnection()->ldapEmailAttribute), $attributes)); - $this->assertTrue(!in_array($this->access->getConnection()->ldapEmailAttribute, $attributes)); #cases check - $this->assertFalse(in_array('', $attributes)); + $this->assertContains('dn', $attributes); + $this->assertContains(strtolower($this->access->getConnection()->ldapEmailAttribute), $attributes); + $this->assertNotContains($this->access->getConnection()->ldapEmailAttribute, $attributes); #cases check + $this->assertNotContains('', $attributes); $this->assertSame(!$minimal, in_array('jpegphoto', $attributes)); $this->assertSame(!$minimal, in_array('thumbnailphoto', $attributes)); $valueCounts = array_count_values($attributes); diff --git a/apps/user_ldap/tests/User/OfflineUserTest.php b/apps/user_ldap/tests/User/OfflineUserTest.php index 65f66840173..223e63421ad 100644 --- a/apps/user_ldap/tests/User/OfflineUserTest.php +++ b/apps/user_ldap/tests/User/OfflineUserTest.php @@ -3,27 +3,9 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests\User; use OCA\User_LDAP\Mapping\UserMapping; @@ -31,20 +13,15 @@ use OCA\User_LDAP\User\OfflineUser; use OCP\IConfig; use OCP\Share\IManager; use OCP\Share\IShare; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class OfflineUserTest extends TestCase { - - /** @var OfflineUser */ - protected $offlineUser; - /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject */ - protected $mapping; - /** @var string */ - protected $uid; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; - /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $shareManager; + protected UserMapping&MockObject $mapping; + protected string $uid; + protected IConfig&MockObject $config; + protected IManager&MockObject $shareManager; + protected OfflineUser $offlineUser; public function setUp(): void { $this->uid = 'deborah'; @@ -60,7 +37,7 @@ class OfflineUserTest extends TestCase { ); } - public function shareOwnerProvider(): array { + public static function shareOwnerProvider(): array { return [ [[], false], [[IShare::TYPE_USER], true], @@ -70,10 +47,8 @@ class OfflineUserTest extends TestCase { ]; } - /** - * @dataProvider shareOwnerProvider - */ - public function testHasActiveShares(array $existingShareTypes, bool $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('shareOwnerProvider')] + public function testHasActiveShares(array $existingShareTypes, bool $expected): void { $shareMock = $this->createMock(IShare::class); $this->shareManager->expects($this->atLeastOnce()) diff --git a/apps/user_ldap/tests/User/UserTest.php b/apps/user_ldap/tests/User/UserTest.php index 3186a74ea89..00edd8b3f9b 100644 --- a/apps/user_ldap/tests/User/UserTest.php +++ b/apps/user_ldap/tests/User/UserTest.php @@ -1,38 +1,16 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests\User; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; -use OCA\User_LDAP\FilesystemHelper; -use OCA\User_LDAP\LogWrapper; +use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\User\User; use OCP\IAvatar; use OCP\IAvatarManager; @@ -42,6 +20,9 @@ use OCP\IUser; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; use OCP\Notification\INotification; +use OCP\Util; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; /** * Class UserTest @@ -51,35 +32,24 @@ use OCP\Notification\INotification; * @package OCA\User_LDAP\Tests\User */ class UserTest extends \Test\TestCase { - /** @var Access|\PHPUnit\Framework\MockObject\MockObject */ - protected $access; - /** @var Connection|\PHPUnit\Framework\MockObject\MockObject */ - protected $connection; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; - /** @var FilesystemHelper|\PHPUnit\Framework\MockObject\MockObject */ - protected $filesystemhelper; - /** @var INotificationManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $notificationManager; - /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $userManager; - /** @var Image|\PHPUnit\Framework\MockObject\MockObject */ - protected $image; - /** @var IAvatarManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $avatarManager; - /** @var LogWrapper|\PHPUnit\Framework\MockObject\MockObject */ - protected $log; - /** @var string */ - protected $uid = 'alice'; - /** @var string */ - protected $dn = 'uid=alice,dc=foo,dc=bar'; - /** @var User */ - protected $user; + protected Access&MockObject $access; + protected Connection&MockObject $connection; + protected IConfig&MockObject $config; + protected INotificationManager&MockObject $notificationManager; + protected IUserManager&MockObject $userManager; + protected Image&MockObject $image; + protected IAvatarManager&MockObject $avatarManager; + protected LoggerInterface&MockObject $logger; + protected string $uid = 'alice'; + protected string $dn = 'uid=alice,dc=foo,dc=bar'; + protected User $user; protected function setUp(): void { parent::setUp(); - $this->connection = $this->createMock(Connection::class); + $this->connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); $this->access = $this->createMock(Access::class); $this->access->connection = $this->connection; @@ -88,8 +58,7 @@ class UserTest extends \Test\TestCase { ->willReturn($this->connection); $this->config = $this->createMock(IConfig::class); - $this->filesystemhelper = $this->createMock(FilesystemHelper::class); - $this->log = $this->createMock(LogWrapper::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->avatarManager = $this->createMock(IAvatarManager::class); $this->image = $this->createMock(Image::class); $this->userManager = $this->createMock(IUserManager::class); @@ -100,21 +69,20 @@ class UserTest extends \Test\TestCase { $this->dn, $this->access, $this->config, - $this->filesystemhelper, $this->image, - $this->log, + $this->logger, $this->avatarManager, $this->userManager, $this->notificationManager ); } - public function testGetDNandUsername() { + public function testGetDNandUsername(): void { $this->assertSame($this->dn, $this->user->getDN()); $this->assertSame($this->uid, $this->user->getUsername()); } - public function testUpdateEmailProvided() { + public function testUpdateEmailProvided(): void { $this->connection->expects($this->once()) ->method('__get') ->with($this->equalTo('ldapEmailAttribute')) @@ -126,11 +94,9 @@ class UserTest extends \Test\TestCase { $this->equalTo('email')) ->willReturn(['alice@foo.bar']); - $coreUser = $this->getMockBuilder(IUser::class) - ->disableOriginalConstructor() - ->getMock(); + $coreUser = $this->createMock(IUser::class); $coreUser->expects($this->once()) - ->method('setEMailAddress') + ->method('setSystemEMailAddress') ->with('alice@foo.bar'); $this->userManager->expects($this->any()) @@ -140,7 +106,7 @@ class UserTest extends \Test\TestCase { $this->user->updateEmail(); } - public function testUpdateEmailNotProvided() { + public function testUpdateEmailNotProvided(): void { $this->connection->expects($this->once()) ->method('__get') ->with($this->equalTo('ldapEmailAttribute')) @@ -158,7 +124,7 @@ class UserTest extends \Test\TestCase { $this->user->updateEmail(); } - public function testUpdateEmailNotConfigured() { + public function testUpdateEmailNotConfigured(): void { $this->connection->expects($this->once()) ->method('__get') ->with($this->equalTo('ldapEmailAttribute')) @@ -173,7 +139,7 @@ class UserTest extends \Test\TestCase { $this->user->updateEmail(); } - public function testUpdateQuotaAllProvided() { + public function testUpdateQuotaAllProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -200,7 +166,7 @@ class UserTest extends \Test\TestCase { $this->user->updateQuota(); } - public function testUpdateQuotaToDefaultAllProvided() { + public function testUpdateQuotaToDefaultAllProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -227,7 +193,7 @@ class UserTest extends \Test\TestCase { $this->user->updateQuota(); } - public function testUpdateQuotaToNoneAllProvided() { + public function testUpdateQuotaToNoneAllProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -254,17 +220,13 @@ class UserTest extends \Test\TestCase { $this->user->updateQuota(); } - public function testUpdateQuotaDefaultProvided() { - $this->connection->expects($this->at(0)) - ->method('__get') - ->with($this->equalTo('ldapQuotaAttribute')) - ->willReturn('myquota'); - $this->connection->expects($this->at(1)) - ->method('__get') - ->with($this->equalTo('ldapQuotaDefault')) - ->willReturn('25 GB'); + public function testUpdateQuotaDefaultProvided(): void { $this->connection->expects($this->exactly(2)) - ->method('__get'); + ->method('__get') + ->willReturnMap([ + ['ldapQuotaAttribute', 'myquota'], + ['ldapQuotaDefault', '25 GB'], + ]); $this->access->expects($this->once()) ->method('readAttribute') @@ -285,7 +247,7 @@ class UserTest extends \Test\TestCase { $this->user->updateQuota(); } - public function testUpdateQuotaIndividualProvided() { + public function testUpdateQuotaIndividualProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -312,7 +274,7 @@ class UserTest extends \Test\TestCase { $this->user->updateQuota(); } - public function testUpdateQuotaNoneProvided() { + public function testUpdateQuotaNoneProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -340,7 +302,7 @@ class UserTest extends \Test\TestCase { $this->user->updateQuota(); } - public function testUpdateQuotaNoneConfigured() { + public function testUpdateQuotaNoneConfigured(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -364,7 +326,7 @@ class UserTest extends \Test\TestCase { $this->user->updateQuota(); } - public function testUpdateQuotaFromValue() { + public function testUpdateQuotaFromValue(): void { $readQuota = '19 GB'; $this->connection->expects($this->exactly(2)) @@ -393,7 +355,7 @@ class UserTest extends \Test\TestCase { /** * Unparseable quota will fallback to use the LDAP default */ - public function testUpdateWrongQuotaAllProvided() { + public function testUpdateWrongQuotaAllProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -423,7 +385,7 @@ class UserTest extends \Test\TestCase { /** * No user quota and wrong default will set 'default' as quota */ - public function testUpdateWrongDefaultQuotaProvided() { + public function testUpdateWrongDefaultQuotaProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -450,7 +412,7 @@ class UserTest extends \Test\TestCase { /** * Wrong user quota and wrong default will set 'default' as quota */ - public function testUpdateWrongQuotaAndDefaultAllProvided() { + public function testUpdateWrongQuotaAndDefaultAllProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -477,7 +439,7 @@ class UserTest extends \Test\TestCase { /** * No quota attribute set and wrong default will set 'default' as quota */ - public function testUpdateWrongDefaultQuotaNotProvided() { + public function testUpdateWrongDefaultQuotaNotProvided(): void { $this->connection->expects($this->exactly(2)) ->method('__get') ->willReturnMap([ @@ -498,7 +460,7 @@ class UserTest extends \Test\TestCase { $this->user->updateQuota(); } - //the testUpdateAvatar series also implicitely tests getAvatarImage + //the testUpdateAvatar series also implicitly tests getAvatarImage public function XtestUpdateAvatarJpegPhotoProvided() { $this->access->expects($this->once()) ->method('readAttribute') @@ -533,14 +495,10 @@ class UserTest extends \Test\TestCase { ->method('setUserValue') ->with($this->uid, 'user_ldap', 'lastAvatarChecksum', md5('this is a photo')); - $this->filesystemhelper->expects($this->once()) - ->method('isLoaded') - ->willReturn(true); - $avatar = $this->createMock(IAvatar::class); $avatar->expects($this->once()) ->method('set') - ->with($this->isInstanceOf($this->image)); + ->with($this->image); $this->avatarManager->expects($this->once()) ->method('getAvatar') @@ -555,7 +513,7 @@ class UserTest extends \Test\TestCase { $this->user->updateAvatar(); } - public function testUpdateAvatarKnownJpegPhotoProvided() { + public function testUpdateAvatarKnownJpegPhotoProvided(): void { $this->access->expects($this->once()) ->method('readAttribute') ->with($this->equalTo($this->dn), @@ -584,15 +542,20 @@ class UserTest extends \Test\TestCase { $this->config->expects($this->never()) ->method('setUserValue'); - $this->filesystemhelper->expects($this->never()) - ->method('isLoaded'); - $avatar = $this->createMock(IAvatar::class); $avatar->expects($this->never()) ->method('set'); + $avatar->expects($this->any()) + ->method('exists') + ->willReturn(true); + $avatar->expects($this->any()) + ->method('isCustomAvatar') + ->willReturn(true); - $this->avatarManager->expects($this->never()) - ->method('getAvatar'); + $this->avatarManager->expects($this->any()) + ->method('getAvatar') + ->with($this->uid) + ->willReturn($avatar); $this->connection->expects($this->any()) ->method('resolveRule') @@ -643,14 +606,10 @@ class UserTest extends \Test\TestCase { ->method('setUserValue') ->with($this->uid, 'user_ldap', 'lastAvatarChecksum', md5('this is a photo')); - $this->filesystemhelper->expects($this->once()) - ->method('isLoaded') - ->willReturn(true); - $avatar = $this->createMock(IAvatar::class); $avatar->expects($this->once()) ->method('set') - ->with($this->isInstanceOf($this->image)); + ->with($this->image); $this->avatarManager->expects($this->once()) ->method('getAvatar') @@ -665,7 +624,7 @@ class UserTest extends \Test\TestCase { $this->user->updateAvatar(); } - public function testUpdateAvatarCorruptPhotoProvided() { + public function testUpdateAvatarCorruptPhotoProvided(): void { $this->access->expects($this->any()) ->method('readAttribute') ->willReturnCallback(function ($dn, $attr) { @@ -698,9 +657,6 @@ class UserTest extends \Test\TestCase { $this->config->expects($this->never()) ->method('setUserValue'); - $this->filesystemhelper->expects($this->never()) - ->method('isLoaded'); - $avatar = $this->createMock(IAvatar::class); $avatar->expects($this->never()) ->method('set'); @@ -756,14 +712,10 @@ class UserTest extends \Test\TestCase { $this->config->expects($this->never()) ->method('setUserValue'); - $this->filesystemhelper->expects($this->once()) - ->method('isLoaded') - ->willReturn(true); - $avatar = $this->createMock(IAvatar::class); $avatar->expects($this->once()) ->method('set') - ->with($this->isInstanceOf($this->image)) + ->with($this->image) ->willThrowException(new \Exception()); $this->avatarManager->expects($this->once()) @@ -779,7 +731,7 @@ class UserTest extends \Test\TestCase { $this->assertFalse($this->user->updateAvatar()); } - public function testUpdateAvatarNotProvided() { + public function testUpdateAvatarNotProvided(): void { $this->access->expects($this->any()) ->method('readAttribute') ->willReturnCallback(function ($dn, $attr) { @@ -809,9 +761,6 @@ class UserTest extends \Test\TestCase { $this->config->expects($this->never()) ->method('setUserValue'); - $this->filesystemhelper->expects($this->never()) - ->method('isLoaded'); - $this->avatarManager->expects($this->never()) ->method('getAvatar'); @@ -823,7 +772,7 @@ class UserTest extends \Test\TestCase { $this->user->updateAvatar(); } - public function extStorageHomeDataProvider() { + public static function extStorageHomeDataProvider(): array { return [ [ 'myFolder', null ], [ '', null, false ], @@ -831,10 +780,8 @@ class UserTest extends \Test\TestCase { ]; } - /** - * @dataProvider extStorageHomeDataProvider - */ - public function testUpdateExtStorageHome(string $expected, string $valueFromLDAP = null, bool $isSet = true) { + #[\PHPUnit\Framework\Attributes\DataProvider('extStorageHomeDataProvider')] + public function testUpdateExtStorageHome(string $expected, ?string $valueFromLDAP = null, bool $isSet = true): void { if ($valueFromLDAP === null) { $this->connection->expects($this->once()) ->method('__get') @@ -866,7 +813,7 @@ class UserTest extends \Test\TestCase { $this->assertSame($expected, $actual); } - public function testMarkLogin() { + public function testMarkLogin(): void { $this->config->expects($this->once()) ->method('setUserValue') ->with($this->equalTo($this->uid), @@ -878,7 +825,7 @@ class UserTest extends \Test\TestCase { $this->user->markLogin(); } - public function testGetAvatarImageProvided() { + public function testGetAvatarImageProvided(): void { $this->access->expects($this->once()) ->method('readAttribute') ->with($this->equalTo($this->dn), @@ -896,7 +843,7 @@ class UserTest extends \Test\TestCase { $this->user->getAvatarImage(); } - public function testGetAvatarImageDisabled() { + public function testGetAvatarImageDisabled(): void { $this->access->expects($this->never()) ->method('readAttribute') ->with($this->equalTo($this->dn), $this->anything()); @@ -908,7 +855,7 @@ class UserTest extends \Test\TestCase { $this->assertFalse($this->user->getAvatarImage()); } - public function imageDataProvider() { + public static function imageDataProvider(): array { return [ [ false, false ], [ 'corruptData', false ], @@ -916,7 +863,7 @@ class UserTest extends \Test\TestCase { ]; } - public function testProcessAttributes() { + public function testProcessAttributes(): void { $requiredMethods = [ 'updateQuota', 'updateEmail', @@ -927,21 +874,20 @@ class UserTest extends \Test\TestCase { 'updateExtStorageHome', ]; - /** @var User|\PHPUnit\Framework\MockObject\MockObject $userMock */ + /** @var User&MockObject $userMock */ $userMock = $this->getMockBuilder(User::class) ->setConstructorArgs([ $this->uid, $this->dn, $this->access, $this->config, - $this->filesystemhelper, $this->image, - $this->log, + $this->logger, $this->avatarManager, $this->userManager, $this->notificationManager ]) - ->setMethods($requiredMethods) + ->onlyMethods($requiredMethods) ->getMock(); $this->connection->setConfiguration([ @@ -981,17 +927,15 @@ class UserTest extends \Test\TestCase { \OC_Hook::emit('OC_User', 'post_login', ['uid' => $this->uid]); } - public function emptyHomeFolderAttributeValueProvider() { + public static function emptyHomeFolderAttributeValueProvider(): array { return [ 'empty' => [''], 'prefixOnly' => ['attr:'], ]; } - /** - * @dataProvider emptyHomeFolderAttributeValueProvider - */ - public function testGetHomePathNotConfigured($attributeValue) { + #[\PHPUnit\Framework\Attributes\DataProvider('emptyHomeFolderAttributeValueProvider')] + public function testGetHomePathNotConfigured(string $attributeValue): void { $this->connection->expects($this->any()) ->method('__get') ->with($this->equalTo('homeFolderNamingRule')) @@ -1007,7 +951,7 @@ class UserTest extends \Test\TestCase { $this->assertFalse($this->user->getHomePath()); } - public function testGetHomePathConfiguredNotAvailableAllowed() { + public function testGetHomePathConfiguredNotAvailableAllowed(): void { $this->connection->expects($this->any()) ->method('__get') ->with($this->equalTo('homeFolderNamingRule')) @@ -1017,6 +961,10 @@ class UserTest extends \Test\TestCase { ->method('readAttribute') ->willReturn(false); + $this->access->expects($this->once()) + ->method('username2dn') + ->willReturn($this->dn); + // asks for "enforce_home_folder_naming_rule" $this->config->expects($this->once()) ->method('getAppValue') @@ -1027,7 +975,7 @@ class UserTest extends \Test\TestCase { } - public function testGetHomePathConfiguredNotAvailableNotAllowed() { + public function testGetHomePathConfiguredNotAvailableNotAllowed(): void { $this->expectException(\Exception::class); $this->connection->expects($this->any()) @@ -1039,6 +987,10 @@ class UserTest extends \Test\TestCase { ->method('readAttribute') ->willReturn(false); + $this->access->expects($this->once()) + ->method('username2dn') + ->willReturn($this->dn); + // asks for "enforce_home_folder_naming_rule" $this->config->expects($this->once()) ->method('getAppValue') @@ -1047,20 +999,17 @@ class UserTest extends \Test\TestCase { $this->user->getHomePath(); } - public function displayNameProvider() { + public static function displayNameProvider(): array { return [ ['Roland Deschain', '', 'Roland Deschain', false], ['Roland Deschain', '', 'Roland Deschain', true], - ['Roland Deschain', null, 'Roland Deschain', false], ['Roland Deschain', 'gunslinger@darktower.com', 'Roland Deschain (gunslinger@darktower.com)', false], ['Roland Deschain', 'gunslinger@darktower.com', 'Roland Deschain (gunslinger@darktower.com)', true], ]; } - /** - * @dataProvider displayNameProvider - */ - public function testComposeAndStoreDisplayName($part1, $part2, $expected, $expectTriggerChange) { + #[\PHPUnit\Framework\Attributes\DataProvider('displayNameProvider')] + public function testComposeAndStoreDisplayName(string $part1, string $part2, string $expected, bool $expectTriggerChange): void { $this->config->expects($this->once()) ->method('setUserValue'); $oldName = $expectTriggerChange ? 'xxGunslingerxx' : null; @@ -1086,7 +1035,7 @@ class UserTest extends \Test\TestCase { $this->assertSame($expected, $displayName); } - public function testComposeAndStoreDisplayNameNoOverwrite() { + public function testComposeAndStoreDisplayNameNoOverwrite(): void { $displayName = 'Randall Flagg'; $this->config->expects($this->never()) ->method('setUserValue'); @@ -1101,7 +1050,7 @@ class UserTest extends \Test\TestCase { $this->assertSame($composedDisplayName, $displayName); } - public function testHandlePasswordExpiryWarningDefaultPolicy() { + public function testHandlePasswordExpiryWarningDefaultPolicy(): void { $this->connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($name) { @@ -1120,7 +1069,7 @@ class UserTest extends \Test\TestCase { if ($base === $this->dn) { return [ [ - 'pwdchangedtime' => [(new \DateTime())->sub(new \DateInterval('P28D'))->format('Ymdhis').'Z'], + 'pwdchangedtime' => [(new \DateTime())->sub(new \DateInterval('P28D'))->format('Ymdhis') . 'Z'], 'pwdgraceusetime' => [], ], ]; @@ -1159,12 +1108,12 @@ class UserTest extends \Test\TestCase { ->method('notify'); \OC_Hook::clear();//disconnect irrelevant hooks - \OCP\Util::connectHook('OC_User', 'post_login', $this->user, 'handlePasswordExpiry'); + Util::connectHook('OC_User', 'post_login', $this->user, 'handlePasswordExpiry'); /** @noinspection PhpUnhandledExceptionInspection */ \OC_Hook::emit('OC_User', 'post_login', ['uid' => $this->uid]); } - public function testHandlePasswordExpiryWarningCustomPolicy() { + public function testHandlePasswordExpiryWarningCustomPolicy(): void { $this->connection->expects($this->any()) ->method('__get') ->willReturnCallback(function ($name) { @@ -1184,7 +1133,7 @@ class UserTest extends \Test\TestCase { return [ [ 'pwdpolicysubentry' => ['cn=custom,ou=policies,dc=foo,dc=bar'], - 'pwdchangedtime' => [(new \DateTime())->sub(new \DateInterval('P28D'))->format('Ymdhis').'Z'], + 'pwdchangedtime' => [(new \DateTime())->sub(new \DateInterval('P28D'))->format('Ymdhis') . 'Z'], 'pwdgraceusetime' => [], ] ]; @@ -1223,7 +1172,7 @@ class UserTest extends \Test\TestCase { ->method('notify'); \OC_Hook::clear();//disconnect irrelevant hooks - \OCP\Util::connectHook('OC_User', 'post_login', $this->user, 'handlePasswordExpiry'); + Util::connectHook('OC_User', 'post_login', $this->user, 'handlePasswordExpiry'); /** @noinspection PhpUnhandledExceptionInspection */ \OC_Hook::emit('OC_User', 'post_login', ['uid' => $this->uid]); } diff --git a/apps/user_ldap/tests/UserLDAPPluginTest.php b/apps/user_ldap/tests/UserLDAPPluginTest.php index e1b3cd92159..8a065374e61 100644 --- a/apps/user_ldap/tests/UserLDAPPluginTest.php +++ b/apps/user_ldap/tests/UserLDAPPluginTest.php @@ -1,55 +1,33 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br) - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests; use OC\User\Backend; use OCA\User_LDAP\UserPluginManager; class UserLDAPPluginTest extends \Test\TestCase { - - /** - * @return UserPluginManager - */ - private function getUserPluginManager() { + private function getUserPluginManager(): UserPluginManager { return new UserPluginManager(); } - public function testImplementsActions() { + public function testImplementsActions(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions']) ->getMock(); $plugin->expects($this->any()) ->method('respondToActions') ->willReturn(Backend::CREATE_USER); - $plugin2 = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions']) + $plugin2 = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions']) ->getMock(); $plugin2->expects($this->any()) @@ -64,11 +42,11 @@ class UserLDAPPluginTest extends \Test\TestCase { $this->assertTrue($pluginManager->implementsActions(Backend::PROVIDE_AVATAR)); } - public function testCreateUser() { + public function testCreateUser(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions', 'createUser']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions', 'createUser']) ->getMock(); $plugin->expects($this->any()) @@ -86,20 +64,20 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->createUser('user', 'password'); } - - public function testCreateUserNotRegistered() { + + public function testCreateUserNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements createUser in this LDAP Backend.'); $pluginManager = $this->getUserPluginManager(); - $pluginManager->createUser('foo','bar'); + $pluginManager->createUser('foo', 'bar'); } - public function testSetPassword() { + public function testSetPassword(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions', 'setPassword']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions', 'setPassword']) ->getMock(); $plugin->expects($this->any()) @@ -117,20 +95,20 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->setPassword('user', 'password'); } - - public function testSetPasswordNotRegistered() { + + public function testSetPasswordNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements setPassword in this LDAP Backend.'); $pluginManager = $this->getUserPluginManager(); - $pluginManager->setPassword('foo','bar'); + $pluginManager->setPassword('foo', 'bar'); } - public function testGetHome() { + public function testGetHome(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions', 'getHome']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions', 'getHome']) ->getMock(); $plugin->expects($this->any()) @@ -147,8 +125,8 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->getHome('uid'); } - - public function testGetHomeNotRegistered() { + + public function testGetHomeNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements getHome in this LDAP Backend.'); @@ -156,11 +134,11 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->getHome('foo'); } - public function testGetDisplayName() { + public function testGetDisplayName(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions', 'getDisplayName']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions', 'getDisplayName']) ->getMock(); $plugin->expects($this->any()) @@ -177,8 +155,8 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->getDisplayName('uid'); } - - public function testGetDisplayNameNotRegistered() { + + public function testGetDisplayNameNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements getDisplayName in this LDAP Backend.'); @@ -186,11 +164,11 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->getDisplayName('foo'); } - public function testSetDisplayName() { + public function testSetDisplayName(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions', 'setDisplayName']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions', 'setDisplayName']) ->getMock(); $plugin->expects($this->any()) @@ -208,8 +186,8 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->setDisplayName('user', 'password'); } - - public function testSetDisplayNameNotRegistered() { + + public function testSetDisplayNameNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements setDisplayName in this LDAP Backend.'); @@ -217,11 +195,11 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->setDisplayName('foo', 'bar'); } - public function testCanChangeAvatar() { + public function testCanChangeAvatar(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions', 'canChangeAvatar']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions', 'canChangeAvatar']) ->getMock(); $plugin->expects($this->any()) @@ -238,8 +216,8 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->canChangeAvatar('uid'); } - - public function testCanChangeAvatarNotRegistered() { + + public function testCanChangeAvatarNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements canChangeAvatar in this LDAP Backend.'); @@ -247,11 +225,11 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->canChangeAvatar('foo'); } - public function testCountUsers() { + public function testCountUsers(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions', 'countUsers']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions', 'countUsers']) ->getMock(); $plugin->expects($this->any()) @@ -265,8 +243,8 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->countUsers(); } - - public function testCountUsersNotRegistered() { + + public function testCountUsersNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements countUsers in this LDAP Backend.'); @@ -274,11 +252,11 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->countUsers(); } - public function testDeleteUser() { + public function testDeleteUser(): void { $pluginManager = $this->getUserPluginManager(); - $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy') - ->setMethods(['respondToActions', 'canDeleteUser','deleteUser']) + $plugin = $this->getMockBuilder(LDAPUserPluginDummy::class) + ->onlyMethods(['respondToActions', 'canDeleteUser','deleteUser']) ->getMock(); $plugin->expects($this->any()) @@ -301,8 +279,8 @@ class UserLDAPPluginTest extends \Test\TestCase { $pluginManager->deleteUser('uid'); } - - public function testDeleteUserNotRegistered() { + + public function testDeleteUserNotRegistered(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('No plugin implements deleteUser in this LDAP Backend.'); diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php index 6840a4c6dac..f8900c3cca4 100644 --- a/apps/user_ldap/tests/User_LDAPTest.php +++ b/apps/user_ldap/tests/User_LDAPTest.php @@ -1,53 +1,35 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests; -use OC\HintException; use OC\User\Backend; -use OC\User\Session; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; +use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\Mapping\AbstractMapping; use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; use OCA\User_LDAP\User_LDAP; use OCA\User_LDAP\User_LDAP as UserLDAP; use OCA\User_LDAP\UserPluginManager; +use OCP\HintException; use OCP\IConfig; +use OCP\IGroupManager; use OCP\IUser; +use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; +use OCP\Server; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; /** @@ -58,74 +40,68 @@ use Test\TestCase; * @package OCA\User_LDAP\Tests */ class User_LDAPTest extends TestCase { - /** @var User_LDAP */ - protected $backend; - /** @var Access|\PHPUnit\Framework\MockObject\MockObject */ - protected $access; - /** @var OfflineUser|\PHPUnit\Framework\MockObject\MockObject */ - protected $offlineUser; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; - /** @var INotificationManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $notificationManager; - /** @var Session|\PHPUnit\Framework\MockObject\MockObject */ - protected $session; - /** @var UserPluginManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $pluginManager; - /** @var Connection|\PHPUnit\Framework\MockObject\MockObject */ - protected $connection; - /** @var Manager|\PHPUnit\Framework\MockObject\MockObject */ - protected $userManager; + protected Access&MockObject $access; + protected OfflineUser&MockObject $offlineUser; + protected INotificationManager&MockObject $notificationManager; + protected UserPluginManager&MockObject $pluginManager; + protected Connection&MockObject $connection; + protected Manager&MockObject $userManager; + protected LoggerInterface&MockObject $logger; + protected DeletedUsersIndex&MockObject $deletedUsersIndex; + protected User_LDAP $backend; protected function setUp(): void { parent::setUp(); - \OC_User::clearBackends(); - \OC::$server->getGroupManager()->clearBackends(); + Server::get(IUserManager::class)->clearBackends(); + Server::get(IGroupManager::class)->clearBackends(); - $this->connection = $this->createMock(Connection::class); + $this->connection = $this->getMockBuilder(Connection::class) + ->setConstructorArgs([$this->createMock(ILDAPWrapper::class)]) + ->getMock(); $this->userManager = $this->createMock(Manager::class); $this->access = $this->createMock(Access::class); $this->access->connection = $this->connection; $this->access->userManager = $this->userManager; - $this->config = $this->createMock(IConfig::class); $this->notificationManager = $this->createMock(INotificationManager::class); - // Cannot use IUserSession because of private listen() methods - $this->session = $this->createMock(Session::class); $this->pluginManager = $this->createMock(UserPluginManager::class); + $this->logger = $this->createMock(LoggerInterface::class); + + $this->deletedUsersIndex = $this->createMock(DeletedUsersIndex::class); + $this->backend = new User_LDAP( $this->access, - $this->config, $this->notificationManager, - $this->session, - $this->pluginManager + $this->pluginManager, + $this->logger, + $this->deletedUsersIndex, ); } - private function prepareMockForUserExists() { + private function prepareMockForUserExists(): void { $this->access->expects($this->any()) - ->method('username2dn') - ->willReturnCallback(function ($uid) { - switch ($uid) { - case 'gunslinger': - return 'dnOfRoland,dc=test'; - break; - case 'formerUser': - return 'dnOfFormerUser,dc=test'; - break; - case 'newyorker': - return 'dnOfNewYorker,dc=test'; - break; - case 'ladyofshadows': - return 'dnOfLadyOfShadows,dc=test'; - break; - default: - return false; - } - }); + ->method('username2dn') + ->willReturnCallback(function ($uid) { + switch ($uid) { + case 'gunslinger': + return 'dnOfRoland,dc=test'; + break; + case 'formerUser': + return 'dnOfFormerUser,dc=test'; + break; + case 'newyorker': + return 'dnOfNewYorker,dc=test'; + break; + case 'ladyofshadows': + return 'dnOfLadyOfShadows,dc=test'; + break; + default: + return false; + } + }); $this->access->method('fetchUsersByLoginName') ->willReturn([]); @@ -133,27 +109,25 @@ class User_LDAPTest extends TestCase { /** * Prepares the Access mock for checkPassword tests - * @param bool $noDisplayName - * @return void */ - private function prepareAccessForCheckPassword($noDisplayName = false) { + private function prepareAccessForCheckPassword(bool $noDisplayName = false): void { $this->connection->expects($this->any()) - ->method('__get') - ->willReturnCallback(function ($name) { - if ($name === 'ldapLoginFilter') { - return '%uid'; - } - return null; - }); + ->method('__get') + ->willReturnCallback(function ($name) { + if ($name === 'ldapLoginFilter') { + return '%uid'; + } + return null; + }); $this->access->expects($this->any()) - ->method('fetchListOfUsers') - ->willReturnCallback(function ($filter) { - if ($filter === 'roland') { - return [['dn' => ['dnOfRoland,dc=test']]]; - } - return []; - }); + ->method('fetchListOfUsers') + ->willReturnCallback(function ($filter) { + if ($filter === 'roland') { + return [['dn' => ['dnOfRoland,dc=test']]]; + } + return []; + }); $this->access->expects($this->any()) ->method('fetchUsersByLoginName') ->willReturnCallback(function ($uid) { @@ -168,28 +142,32 @@ class User_LDAPTest extends TestCase { $retVal = false; } $this->access->expects($this->any()) - ->method('dn2username') - ->with($this->equalTo('dnOfRoland,dc=test')) - ->willReturn($retVal); + ->method('dn2username') + ->with($this->equalTo('dnOfRoland,dc=test')) + ->willReturn($retVal); $this->access->expects($this->any()) - ->method('stringResemblesDN') - ->with($this->equalTo('dnOfRoland,dc=test')) - ->willReturn(true); + ->method('username2dn') + ->with($this->equalTo('gunslinger')) + ->willReturn('dnOfRoland,dc=test'); $this->access->expects($this->any()) - ->method('areCredentialsValid') - ->willReturnCallback(function ($dn, $pwd) { - if ($pwd === 'dt19') { - return true; - } - return false; - }); + ->method('stringResemblesDN') + ->with($this->equalTo('dnOfRoland,dc=test')) + ->willReturn(true); + $this->access->expects($this->any()) + ->method('areCredentialsValid') + ->willReturnCallback(function ($dn, $pwd) { + if ($pwd === 'dt19') { + return true; + } + return false; + }); $this->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['dn', 'uid', 'mail', 'displayname']); } - public function testCheckPasswordUidReturn() { + public function testCheckPasswordUidReturn(): void { $user = $this->createMock(User::class); $user->expects($this->any()) ->method('getUsername') @@ -200,33 +178,33 @@ class User_LDAPTest extends TestCase { ->method('get') ->willReturn($user); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); - \OC_User::useBackend($backend); + Server::get(IUserManager::class)->registerBackend($backend); $result = $backend->checkPassword('roland', 'dt19'); $this->assertEquals('gunslinger', $result); } - public function testCheckPasswordWrongPassword() { + public function testCheckPasswordWrongPassword(): void { $this->prepareAccessForCheckPassword(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $result = $backend->checkPassword('roland', 'wrong'); $this->assertFalse($result); } - public function testCheckPasswordWrongUser() { + public function testCheckPasswordWrongUser(): void { $this->prepareAccessForCheckPassword(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $result = $backend->checkPassword('mallory', 'evil'); $this->assertFalse($result); } - public function testCheckPasswordNoDisplayName() { + public function testCheckPasswordNoDisplayName(): void { $this->prepareAccessForCheckPassword(true); $this->prepareAccessForCheckPassword(); @@ -234,14 +212,14 @@ class User_LDAPTest extends TestCase { ->method('get') ->willReturn(null); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $result = $backend->checkPassword('roland', 'dt19'); $this->assertFalse($result); } - public function testCheckPasswordPublicAPI() { + public function testCheckPasswordPublicAPI(): void { $user = $this->createMock(User::class); $user->expects($this->any()) ->method('getUsername') @@ -252,10 +230,10 @@ class User_LDAPTest extends TestCase { ->method('get') ->willReturn($user); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); - $user = \OC::$server->getUserManager()->checkPassword('roland', 'dt19'); + $user = Server::get(IUserManager::class)->checkPassword('roland', 'dt19'); $result = false; if ($user !== false) { $result = $user->getUID(); @@ -263,12 +241,12 @@ class User_LDAPTest extends TestCase { $this->assertEquals('gunslinger', $result); } - public function testCheckPasswordPublicAPIWrongPassword() { + public function testCheckPasswordPublicAPIWrongPassword(): void { $this->prepareAccessForCheckPassword(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); - $user = \OC::$server->getUserManager()->checkPassword('roland', 'wrong'); + $user = Server::get(IUserManager::class)->checkPassword('roland', 'wrong'); $result = false; if ($user !== false) { $result = $user->getUID(); @@ -276,12 +254,12 @@ class User_LDAPTest extends TestCase { $this->assertFalse($result); } - public function testCheckPasswordPublicAPIWrongUser() { + public function testCheckPasswordPublicAPIWrongUser(): void { $this->prepareAccessForCheckPassword(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); - $user = \OC::$server->getUserManager()->checkPassword('mallory', 'evil'); + $user = Server::get(IUserManager::class)->checkPassword('mallory', 'evil'); $result = false; if ($user !== false) { $result = $user->getUID(); @@ -289,13 +267,13 @@ class User_LDAPTest extends TestCase { $this->assertFalse($result); } - public function testDeleteUserCancel() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + public function testDeleteUserCancel(): void { + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->deleteUser('notme'); $this->assertFalse($result); } - public function testDeleteUserSuccess() { + public function testDeleteUserSuccess(): void { $uid = 'jeremy'; $home = '/var/vhome/jdings/'; @@ -308,12 +286,12 @@ class User_LDAPTest extends TestCase { ->willReturn($mapping); $this->connection->expects($this->any()) ->method('getConnectionResource') - ->willReturn('this is an ldap link'); + ->willReturn(ldap_connect('ldap://example.com')); - $this->config->expects($this->any()) - ->method('getUserValue') - ->with($uid, 'user_ldap', 'isDeleted') - ->willReturn('1'); + $this->deletedUsersIndex->expects($this->once()) + ->method('isUserMarked') + ->with($uid) + ->willReturn(true); $offlineUser = $this->createMock(OfflineUser::class); $offlineUser->expects($this->once()) @@ -322,8 +300,12 @@ class User_LDAPTest extends TestCase { $this->userManager->expects($this->atLeastOnce()) ->method('get') ->willReturn($offlineUser); + $this->userManager->expects($this->once()) + ->method('exists') + ->with($uid) + ->willReturn(true); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->deleteUser($uid); $this->assertTrue($result); @@ -331,7 +313,7 @@ class User_LDAPTest extends TestCase { $this->assertSame($backend->getHome($uid), $home); } - public function testDeleteUserWithPlugin() { + public function testDeleteUserWithPlugin(): void { $this->pluginManager->expects($this->once()) ->method('canDeleteUser') ->willReturn(true); @@ -340,10 +322,10 @@ class User_LDAPTest extends TestCase { ->with('uid') ->willReturn(true); - $this->config->expects($this->once()) - ->method('getUserValue') - ->with('uid', 'user_ldap', 'isDeleted', 0) - ->willReturn(1); + $this->deletedUsersIndex->expects($this->once()) + ->method('isUserMarked') + ->with('uid') + ->willReturn(true); $mapper = $this->createMock(UserMapping::class); $mapper->expects($this->once()) @@ -358,7 +340,7 @@ class User_LDAPTest extends TestCase { ->method('invalidate') ->with('uid'); - $this->assertEquals(true, $this->backend->deleteUser('uid')); + $this->assertTrue($this->backend->deleteUser('uid')); } /** @@ -366,42 +348,42 @@ class User_LDAPTest extends TestCase { */ private function prepareAccessForGetUsers() { $this->access->expects($this->once()) - ->method('escapeFilterPart') - ->willReturnCallback(function ($search) { - return $search; - }); + ->method('escapeFilterPart') + ->willReturnCallback(function ($search) { + return $search; + }); $this->access->expects($this->any()) - ->method('getFilterPartForUserSearch') - ->willReturnCallback(function ($search) { - return $search; - }); + ->method('getFilterPartForUserSearch') + ->willReturnCallback(function ($search) { + return $search; + }); $this->access->expects($this->any()) - ->method('combineFilterWithAnd') - ->willReturnCallback(function ($param) { - return $param[2]; - }); + ->method('combineFilterWithAnd') + ->willReturnCallback(function ($param) { + return $param[2]; + }); $this->access->expects($this->any()) - ->method('fetchListOfUsers') - ->willReturnCallback(function ($search, $a, $l, $o) { - $users = ['gunslinger', 'newyorker', 'ladyofshadows']; - if (empty($search)) { - $result = $users; - } else { - $result = []; - foreach ($users as $user) { - if (stripos($user, $search) !== false) { - $result[] = $user; - } - } - } - if (!is_null($l) || !is_null($o)) { - $result = array_slice($result, $o, $l); - } - return $result; - }); + ->method('fetchListOfUsers') + ->willReturnCallback(function ($search, $a, $l, $o) { + $users = ['gunslinger', 'newyorker', 'ladyofshadows']; + if (empty($search)) { + $result = $users; + } else { + $result = []; + foreach ($users as $user) { + if (stripos($user, $search) !== false) { + $result[] = $user; + } + } + } + if (!is_null($l) || !is_null($o)) { + $result = array_slice($result, $o, $l); + } + return $result; + }); $this->access->expects($this->any()) - ->method('nextcloudUserNames') - ->willReturnArgument(0); + ->method('nextcloudUserNames') + ->willReturnArgument(0); $this->access->method('fetchUsersByLoginName') ->willReturn([]); @@ -410,108 +392,109 @@ class User_LDAPTest extends TestCase { ->willReturn(['dn', 'uid', 'mail', 'displayname']); } - public function testGetUsersNoParam() { + public function testGetUsersNoParam(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers(); - $this->assertEquals(3, count($result)); + $this->assertCount(3, $result); } - public function testGetUsersLimitOffset() { + public function testGetUsersLimitOffset(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers('', 1, 2); - $this->assertEquals(1, count($result)); + $this->assertCount(1, $result); } - public function testGetUsersLimitOffset2() { + public function testGetUsersLimitOffset2(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers('', 2, 1); - $this->assertEquals(2, count($result)); + $this->assertCount(2, $result); } - public function testGetUsersSearchWithResult() { + public function testGetUsersSearchWithResult(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers('yo'); - $this->assertEquals(2, count($result)); + $this->assertCount(2, $result); } - public function testGetUsersSearchEmptyResult() { + public function testGetUsersSearchEmptyResult(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->getUsers('nix'); - $this->assertEquals(0, count($result)); + $this->assertCount(0, $result); } private function getUsers($search = '', $limit = null, $offset = null) { - $users = \OC::$server->getUserManager()->search($search, $limit, $offset); + $users = Server::get(IUserManager::class)->search($search, $limit, $offset); $uids = array_map(function (IUser $user) { return $user->getUID(); }, $users); return $uids; } - public function testGetUsersViaAPINoParam() { + public function testGetUsersViaAPINoParam(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $result = $this->getUsers(); - $this->assertEquals(3, count($result)); + $this->assertCount(3, $result); } - public function testGetUsersViaAPILimitOffset() { + public function testGetUsersViaAPILimitOffset(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $result = $this->getUsers('', 1, 2); - $this->assertEquals(1, count($result)); + $this->assertCount(1, $result); } - public function testGetUsersViaAPILimitOffset2() { + public function testGetUsersViaAPILimitOffset2(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $result = $this->getUsers('', 2, 1); - $this->assertEquals(2, count($result)); + $this->assertCount(2, $result); } - public function testGetUsersViaAPISearchWithResult() { + public function testGetUsersViaAPISearchWithResult(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $result = $this->getUsers('yo'); - $this->assertEquals(2, count($result)); + $this->assertCount(2, $result); } - public function testGetUsersViaAPISearchEmptyResult() { + public function testGetUsersViaAPISearchEmptyResult(): void { $this->prepareAccessForGetUsers(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $result = $this->getUsers('nix'); - $this->assertEquals(0, count($result)); + $this->assertCount(0, $result); } - public function testUserExists() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + public function testUserExists(): void { + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); - $user = $this->createMock(User::class); - - $this->userManager->expects($this->atLeastOnce()) - ->method('get') - ->willReturn($user); + $this->userManager->expects($this->never()) + ->method('get'); + $this->userManager->expects($this->once()) + ->method('exists') + ->with('gunslinger') + ->willReturn(true); $this->access->expects($this->any()) ->method('getUserMapper') ->willReturn($this->createMock(UserMapping::class)); @@ -522,8 +505,8 @@ class User_LDAPTest extends TestCase { $this->assertTrue($result); } - public function testUserExistsForDeleted() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + public function testUserExistsForDeleted(): void { + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $mapper = $this->createMock(UserMapping::class); @@ -536,18 +519,19 @@ class User_LDAPTest extends TestCase { ->method('getUserMapper') ->willReturn($mapper); - $user = $this->createMock(User::class); - - $this->userManager->expects($this->atLeastOnce()) - ->method('get') - ->willReturn($user); + $this->userManager->expects($this->never()) + ->method('get'); + $this->userManager->expects($this->once()) + ->method('exists') + ->with('formerUser') + ->willReturn(true); //test for deleted user – always returns true as long as we have the user in DB $this->assertTrue($backend->userExists('formerUser')); } - public function testUserExistsForNeverExisting() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + public function testUserExistsForNeverExisting(): void { + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->access->expects($this->any()) @@ -565,10 +549,10 @@ class User_LDAPTest extends TestCase { $this->assertFalse($result); } - public function testUserExistsPublicAPI() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + public function testUserExistsPublicAPI(): void { + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); - \OC_User::useBackend($backend); + Server::get(IUserManager::class)->registerBackend($backend); $user = $this->createMock(User::class); $user->expects($this->any()) @@ -583,28 +567,31 @@ class User_LDAPTest extends TestCase { } return false; }); - $this->userManager->expects($this->atLeastOnce()) - ->method('get') - ->willReturn($user); + $this->userManager->expects($this->never()) + ->method('get'); + $this->userManager->expects($this->once()) + ->method('exists') + ->with('gunslinger') + ->willReturn(true); $this->access->expects($this->any()) ->method('getUserMapper') ->willReturn($this->createMock(UserMapping::class)); //test for existing user - $result = \OC::$server->getUserManager()->userExists('gunslinger'); + $result = Server::get(IUserManager::class)->userExists('gunslinger'); $this->assertTrue($result); } - public function testDeleteUserExisting() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + public function testDeleteUserExisting(): void { + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); //we do not support deleting existing users at all $result = $backend->deleteUser('gunslinger'); $this->assertFalse($result); } - public function testGetHomeAbsolutePath() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + public function testGetHomeAbsolutePath(): void { + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -644,7 +631,12 @@ class User_LDAPTest extends TestCase { $this->userManager->expects($this->atLeastOnce()) ->method('get') + ->with('gunslinger') ->willReturn($user); + $this->userManager->expects($this->once()) + ->method('exists') + ->with('gunslinger') + ->willReturn(true); //absolute path /** @noinspection PhpUnhandledExceptionInspection */ @@ -652,12 +644,12 @@ class User_LDAPTest extends TestCase { $this->assertEquals('/tmp/rolandshome/', $result); } - public function testGetHomeRelative() { - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + public function testGetHomeRelative(): void { + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); - $dataDir = \OC::$server->getConfig()->getSystemValue( - 'datadirectory', \OC::$SERVERROOT.'/data'); + $dataDir = Server::get(IConfig::class)->getSystemValue( + 'datadirectory', \OC::$SERVERROOT . '/data'); $this->connection->expects($this->any()) ->method('__get') @@ -692,22 +684,26 @@ class User_LDAPTest extends TestCase { ->willReturn('dnOfLadyOfShadows,dc=test'); $user->expects($this->any()) ->method('getHomePath') - ->willReturn($dataDir.'/susannah/'); + ->willReturn($dataDir . '/susannah/'); $this->userManager->expects($this->atLeastOnce()) ->method('get') ->willReturn($user); + $this->userManager->expects($this->once()) + ->method('exists') + ->with('ladyofshadows') + ->willReturn(true); /** @noinspection PhpUnhandledExceptionInspection */ $result = $backend->getHome('ladyofshadows'); - $this->assertEquals($dataDir.'/susannah/', $result); + $this->assertEquals($dataDir . '/susannah/', $result); } - public function testGetHomeNoPath() { + public function testGetHomeNoPath(): void { $this->expectException(\Exception::class); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -726,14 +722,6 @@ class User_LDAPTest extends TestCase { return false; } }); - $this->access->connection->expects($this->any()) - ->method('getFromCache') - ->willReturnCallback(function ($key) { - if ($key === 'userExistsnewyorker') { - return true; - } - return null; - }); $user = $this->createMock(User::class); $user->expects($this->any()) @@ -745,41 +733,42 @@ class User_LDAPTest extends TestCase { $this->userManager->expects($this->atLeastOnce()) ->method('get') + ->with('newyorker') ->willReturn($user); + $this->userManager->expects($this->once()) + ->method('exists') + ->with('newyorker') + ->willReturn(true); //no path at all – triggers OC default behaviour $result = $backend->getHome('newyorker'); $this->assertFalse($result); } - public function testGetHomeDeletedUser() { + public function testGetHomeDeletedUser(): void { $uid = 'newyorker'; - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) - ->method('__get') - ->willReturnCallback(function ($name) { - if ($name === 'homeFolderNamingRule') { - return 'attr:testAttribute'; - } - return null; - }); + ->method('__get') + ->willReturnCallback(function ($name) { + if ($name === 'homeFolderNamingRule') { + return 'attr:testAttribute'; + } + return null; + }); $this->access->expects($this->any()) - ->method('readAttribute') - ->willReturn([]); + ->method('readAttribute') + ->willReturn([]); $userMapper = $this->createMock(UserMapping::class); $this->access->expects($this->any()) - ->method('getUserMapper') - ->willReturn($userMapper); - - $this->config->expects($this->any()) - ->method('getUserValue') - ->willReturn(true); + ->method('getUserMapper') + ->willReturn($userMapper); $offlineUser = $this->createMock(OfflineUser::class); $offlineUser->expects($this->atLeastOnce()) @@ -788,13 +777,18 @@ class User_LDAPTest extends TestCase { $this->userManager->expects($this->atLeastOnce()) ->method('get') + ->with($uid) ->willReturn($offlineUser); + $this->userManager->expects($this->once()) + ->method('exists') + ->with($uid) + ->willReturn(true); $result = $backend->getHome($uid); $this->assertFalse($result); } - public function testGetHomeWithPlugin() { + public function testGetHomeWithPlugin(): void { $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(Backend::GET_HOME) @@ -811,41 +805,43 @@ class User_LDAPTest extends TestCase { }); /** @noinspection PhpUnhandledExceptionInspection */ - $this->assertEquals($this->backend->getHome('uid'),'result'); + $this->assertEquals($this->backend->getHome('uid'), 'result'); } private function prepareAccessForGetDisplayName() { $this->connection->expects($this->any()) - ->method('__get') - ->willReturnCallback(function ($name) { - if ($name === 'ldapUserDisplayName') { - return 'displayname'; - } - return null; - }); + ->method('__get') + ->willReturnCallback(function ($name) { + if ($name === 'ldapUserDisplayName') { + return 'displayname'; + } elseif ($name === 'ldapUserDisplayName2') { + return 'displayname2'; + } + return null; + }); $this->access->expects($this->any()) - ->method('readAttribute') - ->willReturnCallback(function ($dn, $attr) { - switch ($dn) { - case 'dnOfRoland,dc=test': - if ($attr === 'displayname') { - return ['Roland Deschain']; - } - return []; - break; - - default: - return false; - } - }); + ->method('readAttribute') + ->willReturnCallback(function ($dn, $attr) { + switch ($dn) { + case 'dnOfRoland,dc=test': + if ($attr === 'displayname') { + return ['Roland Deschain']; + } + return []; + break; + + default: + return false; + } + }); $this->access->method('fetchUsersByLoginName') ->willReturn([]); } - public function testGetDisplayName() { + public function testGetDisplayName(): void { $this->prepareAccessForGetDisplayName(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -886,6 +882,16 @@ class User_LDAPTest extends TestCase { } return null; }); + $this->userManager->expects($this->any()) + ->method('exists') + ->willReturnCallback(function ($uid) use ($user1, $user2) { + if ($uid === 'gunslinger') { + return true; + } elseif ($uid === 'newyorker') { + return true; + } + return false; + }); $this->access->expects($this->any()) ->method('getUserMapper') ->willReturn($mapper); @@ -904,7 +910,7 @@ class User_LDAPTest extends TestCase { $this->assertEquals(null, $result); } - public function testGetDisplayNamePublicAPI() { + public function testGetDisplayNamePublicAPI(): void { $this->access->expects($this->any()) ->method('username2dn') ->willReturnCallback(function ($uid) { @@ -926,7 +932,7 @@ class User_LDAPTest extends TestCase { } }); $this->prepareAccessForGetDisplayName(); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->prepareMockForUserExists(); $this->connection->expects($this->any()) @@ -935,7 +941,7 @@ class User_LDAPTest extends TestCase { return true; }); - \OC_User::useBackend($backend); + Server::get(IUserManager::class)->registerBackend($backend); $user1 = $this->createMock(User::class); $user1->expects($this->once()) @@ -969,6 +975,16 @@ class User_LDAPTest extends TestCase { } return null; }); + $this->userManager->expects($this->any()) + ->method('exists') + ->willReturnCallback(function ($uid) use ($user1, $user2) { + if ($uid === 'gunslinger') { + return true; + } elseif ($uid === 'newyorker') { + return true; + } + return false; + }); $this->access->expects($this->any()) ->method('getUserMapper') ->willReturn($mapper); @@ -979,15 +995,15 @@ class User_LDAPTest extends TestCase { }); //with displayName - $result = \OC::$server->getUserManager()->get('gunslinger')->getDisplayName(); + $result = Server::get(IUserManager::class)->get('gunslinger')?->getDisplayName(); $this->assertEquals('Roland Deschain', $result); //empty displayname retrieved - $result = \OC::$server->getUserManager()->get('newyorker') === null ? 'newyorker' : \OC::$server->getUserManager()->get('newyorker')->getDisplayName(); + $result = Server::get(IUserManager::class)->get('newyorker') === null ? 'newyorker' : Server::get(IUserManager::class)->get('newyorker')->getDisplayName(); $this->assertEquals('newyorker', $result); } - public function testGetDisplayNameWithPlugin() { + public function testGetDisplayNameWithPlugin(): void { $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(Backend::GET_DISPLAYNAME) @@ -997,35 +1013,35 @@ class User_LDAPTest extends TestCase { ->with('uid') ->willReturn('result'); - $this->assertEquals($this->backend->getDisplayName('uid'),'result'); + $this->assertEquals($this->backend->getDisplayName('uid'), 'result'); } //no test for getDisplayNames, because it just invokes getUsers and //getDisplayName - public function testCountUsers() { + public function testCountUsers(): void { $this->access->expects($this->once()) - ->method('countUsers') - ->willReturn(5); + ->method('countUsers') + ->willReturn(5); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->countUsers(); $this->assertEquals(5, $result); } - public function testCountUsersFailing() { + public function testCountUsersFailing(): void { $this->access->expects($this->once()) - ->method('countUsers') - ->willReturn(false); + ->method('countUsers') + ->willReturn(false); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $result = $backend->countUsers(); $this->assertFalse($result); } - public function testCountUsersWithPlugin() { + public function testCountUsersWithPlugin(): void { $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(Backend::COUNT_USERS) @@ -1034,10 +1050,10 @@ class User_LDAPTest extends TestCase { ->method('countUsers') ->willReturn(42); - $this->assertEquals($this->backend->countUsers(),42); + $this->assertEquals($this->backend->countUsers(), 42); } - public function testLoginName2UserNameSuccess() { + public function testLoginName2UserNameSuccess(): void { $loginName = 'Alice'; $username = 'alice'; $dn = 'uid=alice,dc=what,dc=ever'; @@ -1057,13 +1073,13 @@ class User_LDAPTest extends TestCase { $this->connection->expects($this->exactly(2)) ->method('getFromCache') - ->with($this->equalTo('loginName2UserName-'.$loginName)) + ->with($this->equalTo('loginName2UserName-' . $loginName)) ->willReturnOnConsecutiveCalls(null, $username); $this->connection->expects($this->once()) ->method('writeToCache') - ->with($this->equalTo('loginName2UserName-'.$loginName), $this->equalTo($username)); + ->with($this->equalTo('loginName2UserName-' . $loginName), $this->equalTo($username)); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $user = $this->createMock(User::class); $user->expects($this->any()) ->method('getUsername') @@ -1073,6 +1089,8 @@ class User_LDAPTest extends TestCase { ->method('get') ->with($dn) ->willReturn($user); + $this->userManager->expects($this->never()) + ->method('exists'); $this->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['dn', 'uid', 'mail', 'displayname']); @@ -1084,7 +1102,7 @@ class User_LDAPTest extends TestCase { $backend->loginName2UserName($loginName); } - public function testLoginName2UserNameNoUsersOnLDAP() { + public function testLoginName2UserNameNoUsersOnLDAP(): void { $loginName = 'Loki'; $this->access->expects($this->once()) @@ -1098,17 +1116,17 @@ class User_LDAPTest extends TestCase { $this->connection->expects($this->exactly(2)) ->method('getFromCache') - ->with($this->equalTo('loginName2UserName-'.$loginName)) + ->with($this->equalTo('loginName2UserName-' . $loginName)) ->willReturnOnConsecutiveCalls(null, false); $this->connection->expects($this->once()) ->method('writeToCache') - ->with($this->equalTo('loginName2UserName-'.$loginName), false); + ->with($this->equalTo('loginName2UserName-' . $loginName), false); $this->userManager->expects($this->any()) ->method('getAttributes') ->willReturn(['dn', 'uid', 'mail', 'displayname']); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $name = $backend->loginName2UserName($loginName); $this->assertSame(false, $name); @@ -1116,7 +1134,7 @@ class User_LDAPTest extends TestCase { $backend->loginName2UserName($loginName); } - public function testLoginName2UserNameOfflineUser() { + public function testLoginName2UserNameOfflineUser(): void { $loginName = 'Alice'; $dn = 'uid=alice,dc=what,dc=ever'; @@ -1131,11 +1149,11 @@ class User_LDAPTest extends TestCase { $this->connection->expects($this->exactly(2)) ->method('getFromCache') - ->with($this->equalTo('loginName2UserName-'.$loginName)) + ->with($this->equalTo('loginName2UserName-' . $loginName)) ->willReturnOnConsecutiveCalls(null, false); $this->connection->expects($this->once()) ->method('writeToCache') - ->with($this->equalTo('loginName2UserName-'.$loginName), $this->equalTo(false)); + ->with($this->equalTo('loginName2UserName-' . $loginName), $this->equalTo(false)); $this->userManager->expects($this->any()) ->method('get') @@ -1145,7 +1163,7 @@ class User_LDAPTest extends TestCase { ->method('getAttributes') ->willReturn(['dn', 'uid', 'mail', 'displayname']); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $name = $backend->loginName2UserName($loginName); $this->assertSame(false, $name); @@ -1155,38 +1173,36 @@ class User_LDAPTest extends TestCase { /** * Prepares the Access mock for setPassword tests - * - * @param bool $enablePasswordChange */ private function prepareAccessForSetPassword($enablePasswordChange = true) { $this->connection->expects($this->any()) - ->method('__get') - ->willReturnCallback(function ($name) use (&$enablePasswordChange) { - if ($name === 'ldapLoginFilter') { - return '%uid'; - } - if ($name === 'turnOnPasswordChange') { - return $enablePasswordChange?1:0; - } - return null; - }); + ->method('__get') + ->willReturnCallback(function ($name) use (&$enablePasswordChange) { + if ($name === 'ldapLoginFilter') { + return '%uid'; + } + if ($name === 'turnOnPasswordChange') { + return $enablePasswordChange?1:0; + } + return null; + }); $this->connection->expects($this->any()) - ->method('getFromCache') - ->willReturnCallback(function ($uid) { - if ($uid === 'userExists'.'roland') { - return true; - } - return null; - }); + ->method('getFromCache') + ->willReturnCallback(function ($uid) { + if ($uid === 'userExists' . 'roland') { + return true; + } + return null; + }); $this->access->expects($this->any()) - ->method('fetchListOfUsers') - ->willReturnCallback(function ($filter) { - if ($filter === 'roland') { - return [['dn' => ['dnOfRoland,dc=test']]]; - } - return []; - }); + ->method('fetchListOfUsers') + ->willReturnCallback(function ($filter) { + if ($filter === 'roland') { + return [['dn' => ['dnOfRoland,dc=test']]]; + } + return []; + }); $this->access->expects($this->any()) ->method('fetchUsersByLoginName') ->willReturnCallback(function ($uid) { @@ -1196,69 +1212,69 @@ class User_LDAPTest extends TestCase { return []; }); $this->access->expects($this->any()) - ->method('dn2username') - ->with($this->equalTo('dnOfRoland,dc=test')) - ->willReturn('roland'); + ->method('dn2username') + ->with($this->equalTo('dnOfRoland,dc=test')) + ->willReturn('roland'); $this->access->expects($this->any()) - ->method('stringResemblesDN') - ->with($this->equalTo('dnOfRoland,dc=test')) - ->willReturn(true); + ->method('stringResemblesDN') + ->with($this->equalTo('dnOfRoland,dc=test')) + ->willReturn(true); $this->access->expects($this->any()) - ->method('setPassword') - ->willReturnCallback(function ($uid, $password) { - if (strlen($password) <= 5) { - throw new HintException('Password fails quality checking policy', '', 19); - } - return true; - }); + ->method('setPassword') + ->willReturnCallback(function ($uid, $password) { + if (strlen($password) <= 5) { + throw new HintException('Password fails quality checking policy', '', 19); + } + return true; + }); } - public function testSetPasswordInvalid() { - $this->expectException(\OC\HintException::class); + public function testSetPasswordInvalid(): void { + $this->expectException(HintException::class); $this->expectExceptionMessage('Password fails quality checking policy'); $this->prepareAccessForSetPassword($this->access); $this->userManager->expects($this->atLeastOnce()) ->method('get') ->willReturn($this->createMock(User::class)); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $this->assertTrue(\OC_User::setPassword('roland', 'dt')); } - public function testSetPasswordValid() { + public function testSetPasswordValid(): void { $this->prepareAccessForSetPassword($this->access); $this->userManager->expects($this->any()) ->method('get') ->willReturn($this->createMock(User::class)); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); $this->userManager->expects($this->any()) ->method('get') ->willReturn($this->createMock(User::class)); - \OC_User::useBackend($backend); + Server::get(IUserManager::class)->registerBackend($backend); $this->assertTrue(\OC_User::setPassword('roland', 'dt12234$')); } - public function testSetPasswordValidDisabled() { + public function testSetPasswordValidDisabled(): void { $this->userManager->expects($this->any()) ->method('get') ->willReturn($this->createMock(User::class)); $this->prepareAccessForSetPassword(false); - $backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager); - \OC_User::useBackend($backend); + $backend = new UserLDAP($this->access, $this->notificationManager, $this->pluginManager, $this->logger, $this->deletedUsersIndex); + Server::get(IUserManager::class)->registerBackend($backend); $this->assertFalse(\OC_User::setPassword('roland', 'dt12234$')); } - public function testSetPasswordWithInvalidUser() { + public function testSetPasswordWithInvalidUser(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('LDAP setPassword: Could not get user object for uid NotExistingUser. Maybe the LDAP entry has no set display name attribute?'); @@ -1271,7 +1287,7 @@ class User_LDAPTest extends TestCase { $this->backend->setPassword('NotExistingUser', 'Password'); } - public function testSetPasswordWithUsernameFalse() { + public function testSetPasswordWithUsernameFalse(): void { $user = $this->createMock(User::class); $user ->expects($this->once()) @@ -1287,21 +1303,21 @@ class User_LDAPTest extends TestCase { $this->assertFalse($this->backend->setPassword('NotExistingUser', 'Password')); } - public function testSetPasswordWithPlugin() { + public function testSetPasswordWithPlugin(): void { $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(Backend::SET_PASSWORD) ->willReturn(true); $this->pluginManager->expects($this->once()) ->method('setPassword') - ->with('uid','password') + ->with('uid', 'password') ->willReturn('result'); /** @noinspection PhpUnhandledExceptionInspection */ - $this->assertEquals($this->backend->setPassword('uid', 'password'),'result'); + $this->assertEquals($this->backend->setPassword('uid', 'password'), 'result'); } - public function avatarDataProvider() { + public static function avatarDataProvider(): array { return [ [ 'validImageData', false ], [ 'corruptImageData', true ], @@ -1309,9 +1325,9 @@ class User_LDAPTest extends TestCase { ]; } - /** @dataProvider avatarDataProvider */ - public function testCanChangeAvatar($imageData, $expected) { - $isValidImage = strpos((string)$imageData, 'valid') === 0; + #[\PHPUnit\Framework\Attributes\DataProvider('avatarDataProvider')] + public function testCanChangeAvatar(string|bool $imageData, bool $expected): void { + $isValidImage = str_starts_with((string)$imageData, 'valid'); $user = $this->createMock(User::class); $user->expects($this->once()) @@ -1329,7 +1345,7 @@ class User_LDAPTest extends TestCase { $this->assertSame($expected, $this->backend->canChangeAvatar('uid')); } - public function testCanChangeAvatarWithPlugin() { + public function testCanChangeAvatarWithPlugin(): void { $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(Backend::PROVIDE_AVATAR) @@ -1339,10 +1355,10 @@ class User_LDAPTest extends TestCase { ->with('uid') ->willReturn('result'); - $this->assertEquals($this->backend->canChangeAvatar('uid'),'result'); + $this->assertEquals($this->backend->canChangeAvatar('uid'), 'result'); } - public function testSetDisplayNameWithPlugin() { + public function testSetDisplayNameWithPlugin(): void { $newDisplayName = 'J. Baker'; $this->pluginManager->expects($this->once()) ->method('implementsActions') @@ -1359,8 +1375,8 @@ class User_LDAPTest extends TestCase { } - public function testSetDisplayNameErrorWithPlugin() { - $this->expectException(\OC\HintException::class); + public function testSetDisplayNameErrorWithPlugin(): void { + $this->expectException(HintException::class); $newDisplayName = 'J. Baker'; $this->pluginManager->expects($this->once()) @@ -1377,7 +1393,7 @@ class User_LDAPTest extends TestCase { $this->backend->setDisplayName('uid', $newDisplayName); } - public function testSetDisplayNameFailing() { + public function testSetDisplayNameFailing(): void { $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(Backend::SET_DISPLAYNAME) @@ -1388,7 +1404,7 @@ class User_LDAPTest extends TestCase { $this->assertFalse($this->backend->setDisplayName('uid', 'displayName')); } - public function testCreateUserWithPlugin() { + public function testCreateUserWithPlugin(): void { $uid = 'alien6372'; $uuid = '123-2345-36756-123-2345234-4431'; $pwd = 'passwørd'; @@ -1412,10 +1428,10 @@ class User_LDAPTest extends TestCase { ->method('getUserMapper') ->willReturn($this->createMock(UserMapping::class)); - $this->assertEquals($this->backend->createUser($uid, $pwd),true); + $this->assertEquals($this->backend->createUser($uid, $pwd), true); } - public function testCreateUserFailing() { + public function testCreateUserFailing(): void { $this->pluginManager->expects($this->once()) ->method('implementsActions') ->with(Backend::CREATE_USER) @@ -1424,9 +1440,9 @@ class User_LDAPTest extends TestCase { $this->assertFalse($this->backend->createUser('uid', 'password')); } - public function actionProvider() { + public static function actionProvider(): array { return [ - [ 'ldapUserAvatarRule', 'default', Backend::PROVIDE_AVATAR, true] , + [ 'ldapUserAvatarRule', 'default', Backend::PROVIDE_AVATAR, true], [ 'ldapUserAvatarRule', 'data:selfiePhoto', Backend::PROVIDE_AVATAR, true], [ 'ldapUserAvatarRule', 'none', Backend::PROVIDE_AVATAR, false], [ 'turnOnPasswordChange', 0, Backend::SET_PASSWORD, false], @@ -1434,10 +1450,8 @@ class User_LDAPTest extends TestCase { ]; } - /** - * @dataProvider actionProvider - */ - public function testImplementsAction($configurable, $value, $actionCode, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('actionProvider')] + public function testImplementsAction(string $configurable, string|int $value, int $actionCode, bool $expected): void { $this->pluginManager->expects($this->once()) ->method('getImplementedActions') ->willReturn(0); diff --git a/apps/user_ldap/tests/User_ProxyTest.php b/apps/user_ldap/tests/User_ProxyTest.php index 0bbea00ed44..38f94af33a7 100644 --- a/apps/user_ldap/tests/User_ProxyTest.php +++ b/apps/user_ldap/tests/User_ProxyTest.php @@ -1,82 +1,58 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Roger Szabo <roger.szabo@web.de> - * @author Vinicius Cubas Brand <vinicius@eita.org.br> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ - namespace OCA\User_LDAP\Tests; +use OCA\User_LDAP\AccessFactory; use OCA\User_LDAP\Helper; use OCA\User_LDAP\ILDAPWrapper; +use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_Proxy; use OCA\User_LDAP\UserPluginManager; -use OCP\IConfig; -use OCP\IUserSession; use OCP\Notification\IManager as INotificationManager; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; class User_ProxyTest extends TestCase { - /** @var Helper|\PHPUnit\Framework\MockObject\MockObject */ - protected $helper; - /** @var ILDAPWrapper|\PHPUnit\Framework\MockObject\MockObject */ - private $ldapWrapper; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - private $config; - /** @var INotificationManager|\PHPUnit\Framework\MockObject\MockObject */ - private $notificationManager; - /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */ - private $userSession; - /** @var User_Proxy|\PHPUnit\Framework\MockObject\MockObject */ - private $proxy; - /** @var UserPluginManager|\PHPUnit\Framework\MockObject\MockObject */ - private $userPluginManager; + protected Helper&MockObject $helper; + private ILDAPWrapper&MockObject $ldapWrapper; + private AccessFactory&MockObject $accessFactory; + private INotificationManager&MockObject $notificationManager; + private User_Proxy&MockObject $proxy; + private UserPluginManager&MockObject $userPluginManager; + protected LoggerInterface&MockObject $logger; + protected DeletedUsersIndex&MockObject $deletedUsersIndex; protected function setUp(): void { parent::setUp(); $this->helper = $this->createMock(Helper::class); $this->ldapWrapper = $this->createMock(ILDAPWrapper::class); - $this->config = $this->createMock(IConfig::class); + $this->accessFactory = $this->createMock(AccessFactory::class); $this->notificationManager = $this->createMock(INotificationManager::class); - $this->userSession = $this->createMock(IUserSession::class); $this->userPluginManager = $this->createMock(UserPluginManager::class); + $this->logger = $this->createMock(LoggerInterface::class); + $this->deletedUsersIndex = $this->createMock(DeletedUsersIndex::class); $this->proxy = $this->getMockBuilder(User_Proxy::class) ->setConstructorArgs([ $this->helper, $this->ldapWrapper, - $this->config, + $this->accessFactory, $this->notificationManager, - $this->userSession, - $this->userPluginManager + $this->userPluginManager, + $this->logger, + $this->deletedUsersIndex, ]) - ->setMethods(['handleRequest']) + ->onlyMethods(['handleRequest']) ->getMock(); } - public function testSetPassword() { + public function testSetPassword(): void { $this->proxy ->expects($this->once()) ->method('handleRequest') @@ -86,7 +62,7 @@ class User_ProxyTest extends TestCase { $this->assertTrue($this->proxy->setPassword('MyUid', 'MyPassword')); } - public function testSetDisplayName() { + public function testSetDisplayName(): void { $this->proxy ->expects($this->once()) ->method('handleRequest') @@ -96,7 +72,7 @@ class User_ProxyTest extends TestCase { $this->assertTrue($this->proxy->setDisplayName('MyUid', 'MyPassword')); } - public function testCreateUser() { + public function testCreateUser(): void { $this->proxy ->expects($this->once()) ->method('handleRequest') diff --git a/apps/user_ldap/tests/WizardTest.php b/apps/user_ldap/tests/WizardTest.php index 378d549bc27..3ae9a409e88 100644 --- a/apps/user_ldap/tests/WizardTest.php +++ b/apps/user_ldap/tests/WizardTest.php @@ -1,32 +1,11 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * @author Viktor Szépe <viktor@szepe.net> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\Access; @@ -57,36 +36,32 @@ class WizardTest extends TestCase { } } - private function getWizardAndMocks() { + private function getWizardAndMocks(): array { static $confMethods; - static $connMethods; - static $accMethods; if (is_null($confMethods)) { $confMethods = get_class_methods('\OCA\User_LDAP\Configuration'); - $connMethods = get_class_methods('\OCA\User_LDAP\Connection'); - $accMethods = get_class_methods('\OCA\User_LDAP\Access'); } - /** @var ILDAPWrapper|\PHPUnit\Framework\MockObject\MockObject $lw */ + /** @var ILDAPWrapper&MockObject $lw */ $lw = $this->createMock(ILDAPWrapper::class); - /** @var Configuration|\PHPUnit\Framework\MockObject\MockObject $conf */ + /** @var Configuration&MockObject $conf */ $conf = $this->getMockBuilder(Configuration::class) - ->setMethods($confMethods) - ->setConstructorArgs([$lw, null, null]) + ->onlyMethods($confMethods) + ->setConstructorArgs(['', true]) ->getMock(); - /** @var Access|\PHPUnit\Framework\MockObject\MockObject $access */ + /** @var Access&MockObject $access */ $access = $this->createMock(Access::class); return [new Wizard($conf, $lw, $access), $conf, $lw, $access]; } - private function prepareLdapWrapperForConnections(MockObject &$ldap) { + private function prepareLdapWrapperForConnections(MockObject $ldap) { $ldap->expects($this->once()) ->method('connect') - //dummy value, usually invalid - ->willReturn(true); + //dummy value + ->willReturn(ldap_connect('ldap://example.com')); $ldap->expects($this->exactly(3)) ->method('setOption') @@ -97,8 +72,8 @@ class WizardTest extends TestCase { ->willReturn(true); } - public function testCumulativeSearchOnAttributeLimited() { - list($wizard, $configuration, $ldap) = $this->getWizardAndMocks(); + public function testCumulativeSearchOnAttributeLimited(): void { + [$wizard, $configuration, $ldap] = $this->getWizardAndMocks(); $configuration->expects($this->any()) ->method('__get') @@ -157,8 +132,8 @@ class WizardTest extends TestCase { unset($uidnumber); } - public function testCumulativeSearchOnAttributeUnlimited() { - list($wizard, $configuration, $ldap) = $this->getWizardAndMocks(); + public function testCumulativeSearchOnAttributeUnlimited(): void { + [$wizard, $configuration, $ldap] = $this->getWizardAndMocks(); $configuration->expects($this->any()) ->method('__get') @@ -174,7 +149,7 @@ class WizardTest extends TestCase { $ldap->expects($this->any()) ->method('isResource') ->willReturnCallback(function ($r) { - if ($r === true) { + if ($r instanceof \LDAP\Connection) { return true; } if ($r % 24 === 0) { @@ -233,8 +208,8 @@ class WizardTest extends TestCase { unset($uidnumber); } - public function testDetectEmailAttributeAlreadySet() { - list($wizard, $configuration, $ldap, $access) + public function testDetectEmailAttributeAlreadySet(): void { + [$wizard, $configuration, $ldap, $access] = $this->getWizardAndMocks(); $configuration->expects($this->any()) @@ -255,8 +230,8 @@ class WizardTest extends TestCase { $wizard->detectEmailAttribute(); } - public function testDetectEmailAttributeOverrideSet() { - list($wizard, $configuration, $ldap, $access) + public function testDetectEmailAttributeOverrideSet(): void { + [$wizard, $configuration, $ldap, $access] = $this->getWizardAndMocks(); $configuration->expects($this->any()) @@ -294,8 +269,8 @@ class WizardTest extends TestCase { $result['changes']['ldap_email_attr']); } - public function testDetectEmailAttributeFind() { - list($wizard, $configuration, $ldap, $access) + public function testDetectEmailAttributeFind(): void { + [$wizard, $configuration, $ldap, $access] = $this->getWizardAndMocks(); $configuration->expects($this->any()) @@ -333,8 +308,8 @@ class WizardTest extends TestCase { $result['changes']['ldap_email_attr']); } - public function testDetectEmailAttributeFindNothing() { - list($wizard, $configuration, $ldap, $access) + public function testDetectEmailAttributeFindNothing(): void { + [$wizard, $configuration, $ldap, $access] = $this->getWizardAndMocks(); $configuration->expects($this->any()) @@ -368,13 +343,13 @@ class WizardTest extends TestCase { }); $result = $wizard->detectEmailAttribute(); - $this->assertSame(false, $result->hasChanges()); + $this->assertFalse($result->hasChanges()); } - public function testCumulativeSearchOnAttributeSkipReadDN() { + public function testCumulativeSearchOnAttributeSkipReadDN(): void { // tests that there is no infinite loop, when skipping already processed // DNs (they can be returned multiple times for multiple filters ) - list($wizard, $configuration, $ldap) = $this->getWizardAndMocks(); + [$wizard, $configuration, $ldap] = $this->getWizardAndMocks(); $configuration->expects($this->any()) ->method('__get') @@ -445,7 +420,7 @@ class WizardTest extends TestCase { // The following expectations are the real test $filters = ['f1', 'f2', '*']; $resultArray = $wizard->cumulativeSearchOnAttribute($filters, 'cn', 0); - $this->assertSame(6, count($resultArray)); + $this->assertCount(6, $resultArray); unset($mark); } } diff --git a/apps/user_ldap/vendor/ui-multiselect/MIT-LICENSE b/apps/user_ldap/vendor/ui-multiselect/MIT-LICENSE deleted file mode 100644 index 2dc8e79e3ad..00000000000 --- a/apps/user_ldap/vendor/ui-multiselect/MIT-LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2011 Eric Hynds - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |