summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap
diff options
context:
space:
mode:
Diffstat (limited to 'apps/user_ldap')
-rw-r--r--apps/user_ldap/appinfo/info.xml3
-rw-r--r--apps/user_ldap/composer/composer/autoload_classmap.php6
-rw-r--r--apps/user_ldap/composer/composer/autoload_static.php6
-rw-r--r--apps/user_ldap/composer/composer/installed.php4
-rw-r--r--apps/user_ldap/l10n/ar.js313
-rw-r--r--apps/user_ldap/l10n/ar.json313
-rw-r--r--apps/user_ldap/l10n/ca.js21
-rw-r--r--apps/user_ldap/l10n/ca.json21
-rw-r--r--apps/user_ldap/l10n/cs.js2
-rw-r--r--apps/user_ldap/l10n/cs.json2
-rw-r--r--apps/user_ldap/l10n/de_DE.js2
-rw-r--r--apps/user_ldap/l10n/de_DE.json2
-rw-r--r--apps/user_ldap/l10n/en_GB.js2
-rw-r--r--apps/user_ldap/l10n/en_GB.json2
-rw-r--r--apps/user_ldap/l10n/es.js2
-rw-r--r--apps/user_ldap/l10n/es.json2
-rw-r--r--apps/user_ldap/l10n/es_EC.js41
-rw-r--r--apps/user_ldap/l10n/es_EC.json41
-rw-r--r--apps/user_ldap/l10n/eu.js15
-rw-r--r--apps/user_ldap/l10n/eu.json15
-rw-r--r--apps/user_ldap/l10n/fa.js159
-rw-r--r--apps/user_ldap/l10n/fa.json159
-rw-r--r--apps/user_ldap/l10n/gl.js28
-rw-r--r--apps/user_ldap/l10n/gl.json28
-rw-r--r--apps/user_ldap/l10n/it.js28
-rw-r--r--apps/user_ldap/l10n/it.json28
-rw-r--r--apps/user_ldap/l10n/pt_BR.js2
-rw-r--r--apps/user_ldap/l10n/pt_BR.json2
-rw-r--r--apps/user_ldap/l10n/ru.js2
-rw-r--r--apps/user_ldap/l10n/ru.json2
-rw-r--r--apps/user_ldap/l10n/sr.js2
-rw-r--r--apps/user_ldap/l10n/sr.json2
-rw-r--r--apps/user_ldap/l10n/sv.js2
-rw-r--r--apps/user_ldap/l10n/sv.json2
-rw-r--r--apps/user_ldap/l10n/tr.js2
-rw-r--r--apps/user_ldap/l10n/tr.json2
-rw-r--r--apps/user_ldap/l10n/uk.js4
-rw-r--r--apps/user_ldap/l10n/uk.json4
-rw-r--r--apps/user_ldap/l10n/zh_CN.js28
-rw-r--r--apps/user_ldap/l10n/zh_CN.json28
-rw-r--r--apps/user_ldap/l10n/zh_HK.js6
-rw-r--r--apps/user_ldap/l10n/zh_HK.json6
-rw-r--r--apps/user_ldap/l10n/zh_TW.js2
-rw-r--r--apps/user_ldap/l10n/zh_TW.json2
-rw-r--r--apps/user_ldap/lib/Access.php8
-rw-r--r--apps/user_ldap/lib/AppInfo/Application.php6
-rw-r--r--apps/user_ldap/lib/Command/CheckGroup.php181
-rw-r--r--apps/user_ldap/lib/Controller/ConfigAPIController.php102
-rw-r--r--apps/user_ldap/lib/Db/GroupMembership.php48
-rw-r--r--apps/user_ldap/lib/Db/GroupMembershipMapper.php77
-rw-r--r--apps/user_ldap/lib/Group_LDAP.php39
-rw-r--r--apps/user_ldap/lib/Group_Proxy.php48
-rw-r--r--apps/user_ldap/lib/Jobs/UpdateGroups.php237
-rw-r--r--apps/user_ldap/lib/LDAP.php9
-rw-r--r--apps/user_ldap/lib/Migration/Version1190Date20230706134108.php113
-rw-r--r--apps/user_ldap/lib/Migration/Version1190Date20230706134109.php46
-rw-r--r--apps/user_ldap/lib/Proxy.php2
-rw-r--r--apps/user_ldap/lib/Service/UpdateGroupsService.php194
-rw-r--r--apps/user_ldap/openapi.json384
-rw-r--r--apps/user_ldap/tests/LDAPProviderTest.php2
-rw-r--r--apps/user_ldap/tests/Service/UpdateGroupsServiceTest.php (renamed from apps/user_ldap/tests/Jobs/UpdateGroupsTest.php)94
61 files changed, 2213 insertions, 722 deletions
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index 20f439148e1..e96d1b40a02 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -9,7 +9,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.18.0</version>
+ <version>1.19.0</version>
<licence>agpl</licence>
<author>Dominik Schmidt</author>
<author>Arthur Schiwon</author>
@@ -48,6 +48,7 @@ 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\ResetGroup</command>
diff --git a/apps/user_ldap/composer/composer/autoload_classmap.php b/apps/user_ldap/composer/composer/autoload_classmap.php
index c9001d3d59a..74ffce2caff 100644
--- a/apps/user_ldap/composer/composer/autoload_classmap.php
+++ b/apps/user_ldap/composer/composer/autoload_classmap.php
@@ -11,6 +11,7 @@ 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',
@@ -28,6 +29,8 @@ return array(
'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',
@@ -70,9 +73,12 @@ return array(
'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\\TLinkId' => $baseDir . '/../lib/PagedResults/TLinkId.php',
'OCA\\User_LDAP\\Proxy' => $baseDir . '/../lib/Proxy.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\\UserPluginManager' => $baseDir . '/../lib/UserPluginManager.php',
diff --git a/apps/user_ldap/composer/composer/autoload_static.php b/apps/user_ldap/composer/composer/autoload_static.php
index 53d7bcb6481..cead1740b88 100644
--- a/apps/user_ldap/composer/composer/autoload_static.php
+++ b/apps/user_ldap/composer/composer/autoload_static.php
@@ -26,6 +26,7 @@ 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',
@@ -43,6 +44,8 @@ class ComposerStaticInitUser_LDAP
'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',
@@ -85,9 +88,12 @@ class ComposerStaticInitUser_LDAP
'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\\TLinkId' => __DIR__ . '/..' . '/../lib/PagedResults/TLinkId.php',
'OCA\\User_LDAP\\Proxy' => __DIR__ . '/..' . '/../lib/Proxy.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\\UserPluginManager' => __DIR__ . '/..' . '/../lib/UserPluginManager.php',
diff --git a/apps/user_ldap/composer/composer/installed.php b/apps/user_ldap/composer/composer/installed.php
index 1a66c7f2416..82b21976e1b 100644
--- a/apps/user_ldap/composer/composer/installed.php
+++ b/apps/user_ldap/composer/composer/installed.php
@@ -3,7 +3,7 @@
'name' => '__root__',
'pretty_version' => 'dev-master',
'version' => 'dev-master',
- 'reference' => 'b1797842784b250fb01ed5e3bf130705eb94751b',
+ 'reference' => '0ecd81bfdcfcd878556de3485d292fb4ea340d9e',
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
@@ -13,7 +13,7 @@
'__root__' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
- 'reference' => 'b1797842784b250fb01ed5e3bf130705eb94751b',
+ 'reference' => '0ecd81bfdcfcd878556de3485d292fb4ea340d9e',
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
diff --git a/apps/user_ldap/l10n/ar.js b/apps/user_ldap/l10n/ar.js
index b0f89d241ab..ea55a3289ee 100644
--- a/apps/user_ldap/l10n/ar.js
+++ b/apps/user_ldap/l10n/ar.js
@@ -1,176 +1,219 @@
OC.L10N.register(
"user_ldap",
{
- "Failed to clear the mappings." : "فشل مسح الارتباطات (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." : "تكوين غير صحيح. يرجى الرجوع إلي السجلات لمزيد من التفاصيل.",
- "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. Please have a look at the logs for further details." : "تكوين غير صحيح. يرجى الرجوع إلي سجلات الحركات logs لمزيد من التفاصيل.",
+ "No action specified" : "لم يتم تحديد أيّ إجراءٍ",
+ "No configuration specified" : "لم يتم تحديد أيّ إعداداتٍ",
+ "No data specified" : "لم يتم تحديد أيّ بياناتٍ",
+ "Invalid data specified" : "البيانات المُحدّدة غير صالحة",
+ " Could not set configuration %s" : "تعذّر تعيين الإعداد %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…" : "اختبار التهيئة...",
+ "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." : "تعذر اكتشاف الاسم المميز الأساسي تلقائيًا، يرجى مراجعة بيانات الاعتماد والمضيف والمنفذ.",
- "Could not detect Base DN, please enter it manually." : "تعذر اكتشاف الاسم المميز الأساسي، يرجى إدخاله يدويًا.",
- "{nthServer}. Server" : "الخادم {nthServer}.",
- "No object found in the given Base DN. Please revise." : "لم يتم العثور على كائن في الاسم المميز الأساسي المحدد. يرجي التعديل.",
- "More than 1,000 directory entries available." : "أكثر من 1,000 دليل مدخلات متاحة.",
- "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?" : "هل ترغب فعلاً في حذف إعدادات الخادم الحالي؟",
+ "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!" : "تم مسح التعيينات بنجاح!",
- "Error while clearing the mappings." : "خطأ أثناء مسح التعيينات.",
- "Anonymous bind is not allowed. Please provide a User DN and Password." : "الربط المجهول غير مسموح به. يرجى تقديم الاسم المميز للمستخدم وكلمة مرور.",
- "LDAP Operations error. Anonymous bind might not be allowed." : "خطأ في عمليات بروتوكول الوصول إلي الدليل البسيط. قد لا يكون مسموح بالربط المجهول.",
+ "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?" : "تفعيل الوضع سوف ينتج عنه تمكين استعلامات بروتوكول الوصول إلي الدليل البسيط التلقائية. وقد يستغرق الأمر بعض الوقت بناء على حجم بروتوكول الوصول إلي الدليل البسيط الخاص بك. هل ما زلت تريد تفعيل الوضع؟",
- "Mode switch" : "تشغيل النمط",
+ "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." : "ضع في اعتبارك تضييق نطاق البحث، لأنه يشمل العديد من المستخدمين، ولن يتمكن سوى أول واحد منهم من تسجيل الدخول.",
+ "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." : "عامل تصفية البحث غير صالح، ربما بسبب مشكلات في بناء الجملة مثل عدم تساوي عدد الأقواس المفتوحة والمغلقة. يرجي المراجعة.",
- "Please provide a login name to test against" : "يرجى تقديم اسم تسجيل الدخول للاختبار وفقا له",
- "Password change rejected. Hint: " : "رفض تغيير كلمة المرور. ملحوظة:",
+ "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، و حيثيّات الدخول credentials.",
+ "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: " : "تمّ رفض تغيير كلمة المرور. إرشادُ:",
"Please login with the new password" : "الرجاء تسجيل الدخول باستخدام كلمة المرور الجديدة",
- "Your password will expire tomorrow." : "تنتهي صلاحية كلمة مرورك غدًا.",
- "Your password will expire today." : "تنتهي كلمة المرور الخاصة بك اليوم.",
- "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 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 ",
+ "_%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" : "المساعدة",
+ "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 Filter:" : "عامل تصفية بروتوكول الوصول إلي الدليل البسيط:",
- "The filter specifies which LDAP groups shall have access to the %s instance." : "يحدد عامل التصفية مجموعات بروتوكول الوصول إلي الدليل البسيط التي سوف يكون لها حق الوصول إلى %sنموذج.",
- "Verify settings and count the groups" : "تحقق من الإعدادات وحصر المجموعات",
- "When logging in, %s will find the user based on the following attributes:" : "عند تسجيل الدخول، %sسوف تجد المستخدم بناءً على السمات التالية:",
- "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\"",
+ "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" : "اختبار اسم تسجيل الدخول",
- "Verify settings" : "تحديد الإعدادات",
- "%s. Server:" : "%s. خادم:",
- "Add a new configuration" : "إضاف تكوين جديد",
+ "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: //",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "يمكنك التغاضي عن البروتوكول، ما لم يكن SSL لازماً. إذا كان الأمر كذلك، فابدأ بـ ldaps",
"Port" : "المنفذ",
- "Detect Port" : "اكتشاف المنفذ",
- "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." : "الاسم المميز للعميل المستخدم الذي يجب ربطه به، على سبيل المثال uid = العميل، dc = مثال، dc = com. للوصول مجهول الهوية، اترك خانتي الاسم المميز وكلمة المرور فارغتين.",
+ "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." : "للوصول المجهول، اترك حقل الاسم المميز وكلمة المرور فارغين.",
- "Save Credentials" : "حفظ بيانات الاعتماد",
- "One Base DN per line" : "اسم مميز واحد أساسي لكل سطر",
- "You can specify Base DN for users and groups in the Advanced tab" : "يمكنك تحديد اسم مميز أساسي Base DN للمستخدمين والمجموعات من علامة تبويب الإعدادات المتقدمة",
- "Detect Base DN" : "اكتشاف الاسم المميز الأساسي",
- "Test Base DN" : "اختبر الاسم المميز الأساسي Base DN",
- "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "إلغاء طلبات بروتوكول الوصول إلي الدليل البسيط LDAP التلقائية. أفضل للإعدادات الأكبر، ولكنه يتطلب بعض المعرفة فيما يخص بروتوكول الوصول إلي الدليل البسيط.",
- "Manually enter LDAP filters (recommended for large directories)" : "إدخال عوامل تصفية بروتوكول الوصول إلي الدليل البسيط يدويًا (موصى به للأدلة الكبيرة)",
- "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." : "يحدد عامل التصفية مستخدمي بروتوكول الوصول إلي الدليل البسيط الذين يمكنهم الوصول إلى %sالنموذج.",
- "Verify settings and count users" : "التحقق من الإعدادات وعدد المستخدمين",
- "Saving" : "جاري الحفظ ...",
+ "For anonymous access, leave DN and Password empty." : "للوصول المجهول anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.",
+ "Save Credentials" : "حفظ حيثيّات الدخول 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" : "المتابعة",
- "Please renew your password." : "الرجاء تجديد كلمة المرور الخاصة بك.",
- "An internal error occurred." : "طرأ هناك خطأ.",
- "Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مسؤول النظام.",
- "Current password" : "الكلمة السرية الحالية",
- "New password" : "الكلمة السرية الجديدة",
- "Renew password" : "تجديد كلمة السر",
- "Wrong password." : "الكلمة السرية خاطئة.",
+ "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" : "خادم",
+ "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> الوحدة النمطية لمعالج النص التشعبي لبروتوكول الوصول إلي الدليل البسيط غير مثبتة، والواجهة الخلفية لن تعمل. يرجى طلب تثبيتها من قبل مسؤول النظام.",
+ "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." : "توفير مضيف احتياطي اختياري. يجب أن يكون نسخة طبق الأصل من خادم بروتوكول الوصول إلي الدليل البسيط/ الدليل النشط الرئيسي.",
- "Backup (Replica) Port" : "منفذ النسخ الاحتياطي (النسخ المتماثل)",
- "Disable Main Server" : "تعطيل الخادم الرئيسي",
- "Only connect to the replica server." : "الاتصال بخادم النسخ المتماثل فقط.",
- "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." : "لا يوصي به، استخدمه للاختبار فقط! إذا كان الاتصال يعمل فقط مع هذا الخيار، فقم باستيراد شهادة طبقة المنافذ الآمنة لخادم بروتوكول الوصول إلي الدليل البسيط في خادم%s الخاص بك.",
- "Cache Time-To-Live" : "مدة صلاحية ذاكرة التخزين المؤقت",
- "in seconds. A change empties the cache." : "خلال ثوان. يؤدي التغيير إلى إفراغ ذاكرة التخزين المؤقت.",
- "Directory 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." : "تستخدم خاصية بروتوكول الوصول إلي الدليل البسيط لإنشاء اسم عرض المستخدم.",
- "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)«." : "اختياري. نظرا لإضافة بروتوكول الوصول إلي الدليل البسيط إلى اسم العرض بين قوسين. ينتج عنه فيعلى سبيل المثال » جون دو(john.doe@example.org)«.",
- "Base User Tree" : "شجرة المستخدم الأساسي",
- "One User Base DN per line" : "اسم مميز أساسي لمستخدم واحد لكل سطر",
+ "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" : "اختياري؛ تحديد واحد لكل سطر",
+ "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." : "تستخدم خاصية بروتوكول الوصول إلي الدليل البسيط لإنشاء اسم عرض المجموعات.",
- "Base Group Tree" : "شجرة المجموعة الأساسية",
- "One Group Base DN per line" : "اسم مميز أساسي لمجموعة واحدة لكل سطر",
- "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 الموجودة في كائنات المجموعة على عنوان محدد موقع الموارد المُوحّد لبحث بروتوكول الوصول إلي الدليل البسيط والذي يحدد الكائنات التي تنتمي إلى المجموعة. (يؤدي الإعداد الفارغ إلى تعطيل وظيفة عضوية المجموعة الديناميكية.)",
+ "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.)" : "عند التشغيل، يتم دعم المجموعات التي تحتوي على مجموعات. (تعمل فقط إذا كان تحديد عضو المجموعة يحتوي على الأسماء المميزة).",
- "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.)" : "يتم استخدام حجم الحزمة/الأجزاء لعمليات بحث بروتوكول الوصول إلي الدليل البسيط المقسمة إلى صفحات والتي قد تعطي نتائج ضخمة مثل تعداد المستخدم أو المجموعة. (الضبط علي 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\" للمستخدمين تغيير كلمة المرور الخاصة بهم والسماح للمسؤولين المتميزين ومسؤولي المجموعة بتغيير كلمة مرور مستخدمي خادوم بروتوكول الوصول إلي الدليل البسيط. وتعمل هذه الخاصية يعمل عندما يتم تهيئة وضبط سياسات التحكم في الوصول على خادوم بروتوكول الوصول إلي الدليل البسيط وفقًا لذلك. وحيث أن كلمات المرور يتم إرسالها فى صورة نص عادي إلى خادوم بروتوكول الوصول إلي الدليل البسيط، فيجب استخدام تشفير النقل وضبط تجزئة كلمة المرور على خادوم بروتوكول الوصول إلي الدليل البسيط.",
- "(New password is sent as plain text to LDAP)" : "(يتم إرسال كلمة المرور الجديدة كنص عادي إلى خادوم بروتوكول الوصول إلي الدليل البسيط )",
+ "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 للمستخدمين تغيير كلمة المرور الخاصة بهم والسماح للمشرفين المتميزين super admin ومسؤولي المجموعات بتغيير كلمة مرور مستخدمي خادومهم. وتعمل هذه الخاصية عندما يتم تهيئة وضبط سياسات التحكم في الوصول على خادوم 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." : "سياسة الاسم المميز لكلمة المرورالافتراضية التي سيتم استخدامها لمعالجة انتهاء صلاحية كلمة المرور. تعمل فقط عندما يتم تمكين تغيير كلمة مرور خادوم بروتوكول الوصول إلي الدليل البسيط لكل مستخدم ويكون مدعومًا فقط بواسطة أوبن إل دي أيه بي \"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\" الذين ليس لديهم حصة محددة في حقل الحصة النسبية.",
+ "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" : "قاعدة تسمية المجلد الرئيسي للمستخدم",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "قُم بتعيين البريد الإلكتروني للمستخدمين من خاصّية خادوم LDAP الخاصة بهم. اتركه فارغًا للتصرُّف الافتراضي.",
+ "User Home Folder Naming Rule" : "قاعدة تسمية المجلد الرئيسي للمستخدم User home folder",
+ "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" : "حقل الترويسة headline",
+ "User profile Headline will be set from the specified attribute" : "خانة الترويسة headline في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
+ "Biography Field" : "خانة السيرة الذاتية biography",
+ "User profile Biography will be set from the specified attribute" : "خانة السيرة الذاتية biography في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Internal Username" : "اسم المستخدم الداخلي",
- "Internal Username Attribute:" : "خاصية اسم المستخدم الداخلي:",
- "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." : "بشكل افتراضي، يتم اكتشاف خاصية المعرف الفريد العالمي تلقائيًا. ويتم استخدام خاصية المعرف الفريد العالمي لتحديد مستخدمي ومجموعات بروتوكول الوصول إلي الدليل البسيط علي نحو موثوق. أيضًا، سيتم إنشاء اسم المستخدم الداخلي بناءً على المعرف الفريد العالمي إذا لم يتم تحديده أعلاه. يمكنك تجاوز الإعداد وتجاوز الخاصية حسب اختيارك. يجب عليك التأكد من إمكانية الوصول إلي الخاصية التي قمت باختيارها من قبل كل من المستخدمين والمجموعات وأنها فريدة. اتركه فارغًا للوضع الافتراضي. تصبح التغييرات نافذة فقط على مستخدمي ومجموعات بروتوكول الوصول إلي الدليل البسيط المعينين حديثًا (المضافين).",
- "UUID Attribute for Users:" : "خاصية المعرف الفريد العالمي للمستخدمين:",
- "UUID Attribute for Groups:" : "خاصية المعرف الفريد العالمي للمجموعات:",
- "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." : "تُستخدم أسماء المستخدمين لتخزين وتخصيص البيانات التعريف الوصفية. من أجل تحديد المستخدمين والتعرف عليهم بدقة، سيكون لكل مستخدم خادوم بروتوكول الوصول إلي الدليل البسيط \"LDAP\" اسم مستخدم داخلي. يتطلب هذا تعيينًا من اسم المستخدم إلى مستخدم خادوم بروتوكول الوصول إلي الدليل البسيط \"LDAP\". يتم تعيين اسم المستخدم الذي تم إنشاؤه إلى المعرف الفريد العالمي\"UUID\" لمستخدم LDAP. بالإضافة إلى ذلك، يتم تخزين الاسم المميز مؤقتًا أيضًا لتقليل تفاعل LDAP، ولكنه لا يستخدم لتحديد الهوية. وعند تغير الاسم المميز يتم العثور على التغييرات. ويتم استخدام اسم المستخدم الداخلي في كل مكان. مسح التعيينات سيكون له آثار متبقية في كل مكان. مسح التعيينات ليس حساسًا للتكوين، فهو يؤثر على جميع تكوينات LDAP! لا تقم مطلقًا بمسح التعيينات في بيئة الإنتاج، فقط في مرحلة الاختبار أو المرحلة التجريبية.",
- "Clear Username-LDAP User Mapping" : "مسح اسم المستخدم- تعيين مستخدم بروتوكول الوصول إلي الدليل البسيط",
- "Clear Groupname-LDAP Group Mapping" : "مسح اسم المجموعة - تعيين مجموعة بروتوكول الوصول إلي الدليل البسيط "
+ "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 و المجموعة"
},
"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 519eb1d75a7..3ba6966c9a1 100644
--- a/apps/user_ldap/l10n/ar.json
+++ b/apps/user_ldap/l10n/ar.json
@@ -1,174 +1,217 @@
{ "translations": {
- "Failed to clear the mappings." : "فشل مسح الارتباطات (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." : "تكوين غير صحيح. يرجى الرجوع إلي السجلات لمزيد من التفاصيل.",
- "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. Please have a look at the logs for further details." : "تكوين غير صحيح. يرجى الرجوع إلي سجلات الحركات logs لمزيد من التفاصيل.",
+ "No action specified" : "لم يتم تحديد أيّ إجراءٍ",
+ "No configuration specified" : "لم يتم تحديد أيّ إعداداتٍ",
+ "No data specified" : "لم يتم تحديد أيّ بياناتٍ",
+ "Invalid data specified" : "البيانات المُحدّدة غير صالحة",
+ " Could not set configuration %s" : "تعذّر تعيين الإعداد %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…" : "اختبار التهيئة...",
+ "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." : "تعذر اكتشاف الاسم المميز الأساسي تلقائيًا، يرجى مراجعة بيانات الاعتماد والمضيف والمنفذ.",
- "Could not detect Base DN, please enter it manually." : "تعذر اكتشاف الاسم المميز الأساسي، يرجى إدخاله يدويًا.",
- "{nthServer}. Server" : "الخادم {nthServer}.",
- "No object found in the given Base DN. Please revise." : "لم يتم العثور على كائن في الاسم المميز الأساسي المحدد. يرجي التعديل.",
- "More than 1,000 directory entries available." : "أكثر من 1,000 دليل مدخلات متاحة.",
- "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?" : "هل ترغب فعلاً في حذف إعدادات الخادم الحالي؟",
+ "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!" : "تم مسح التعيينات بنجاح!",
- "Error while clearing the mappings." : "خطأ أثناء مسح التعيينات.",
- "Anonymous bind is not allowed. Please provide a User DN and Password." : "الربط المجهول غير مسموح به. يرجى تقديم الاسم المميز للمستخدم وكلمة مرور.",
- "LDAP Operations error. Anonymous bind might not be allowed." : "خطأ في عمليات بروتوكول الوصول إلي الدليل البسيط. قد لا يكون مسموح بالربط المجهول.",
+ "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?" : "تفعيل الوضع سوف ينتج عنه تمكين استعلامات بروتوكول الوصول إلي الدليل البسيط التلقائية. وقد يستغرق الأمر بعض الوقت بناء على حجم بروتوكول الوصول إلي الدليل البسيط الخاص بك. هل ما زلت تريد تفعيل الوضع؟",
- "Mode switch" : "تشغيل النمط",
+ "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." : "ضع في اعتبارك تضييق نطاق البحث، لأنه يشمل العديد من المستخدمين، ولن يتمكن سوى أول واحد منهم من تسجيل الدخول.",
+ "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." : "عامل تصفية البحث غير صالح، ربما بسبب مشكلات في بناء الجملة مثل عدم تساوي عدد الأقواس المفتوحة والمغلقة. يرجي المراجعة.",
- "Please provide a login name to test against" : "يرجى تقديم اسم تسجيل الدخول للاختبار وفقا له",
- "Password change rejected. Hint: " : "رفض تغيير كلمة المرور. ملحوظة:",
+ "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، و حيثيّات الدخول credentials.",
+ "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: " : "تمّ رفض تغيير كلمة المرور. إرشادُ:",
"Please login with the new password" : "الرجاء تسجيل الدخول باستخدام كلمة المرور الجديدة",
- "Your password will expire tomorrow." : "تنتهي صلاحية كلمة مرورك غدًا.",
- "Your password will expire today." : "تنتهي كلمة المرور الخاصة بك اليوم.",
- "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 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 ",
+ "_%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" : "المساعدة",
+ "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 Filter:" : "عامل تصفية بروتوكول الوصول إلي الدليل البسيط:",
- "The filter specifies which LDAP groups shall have access to the %s instance." : "يحدد عامل التصفية مجموعات بروتوكول الوصول إلي الدليل البسيط التي سوف يكون لها حق الوصول إلى %sنموذج.",
- "Verify settings and count the groups" : "تحقق من الإعدادات وحصر المجموعات",
- "When logging in, %s will find the user based on the following attributes:" : "عند تسجيل الدخول، %sسوف تجد المستخدم بناءً على السمات التالية:",
- "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\"",
+ "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" : "اختبار اسم تسجيل الدخول",
- "Verify settings" : "تحديد الإعدادات",
- "%s. Server:" : "%s. خادم:",
- "Add a new configuration" : "إضاف تكوين جديد",
+ "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: //",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "يمكنك التغاضي عن البروتوكول، ما لم يكن SSL لازماً. إذا كان الأمر كذلك، فابدأ بـ ldaps",
"Port" : "المنفذ",
- "Detect Port" : "اكتشاف المنفذ",
- "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." : "الاسم المميز للعميل المستخدم الذي يجب ربطه به، على سبيل المثال uid = العميل، dc = مثال، dc = com. للوصول مجهول الهوية، اترك خانتي الاسم المميز وكلمة المرور فارغتين.",
+ "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." : "للوصول المجهول، اترك حقل الاسم المميز وكلمة المرور فارغين.",
- "Save Credentials" : "حفظ بيانات الاعتماد",
- "One Base DN per line" : "اسم مميز واحد أساسي لكل سطر",
- "You can specify Base DN for users and groups in the Advanced tab" : "يمكنك تحديد اسم مميز أساسي Base DN للمستخدمين والمجموعات من علامة تبويب الإعدادات المتقدمة",
- "Detect Base DN" : "اكتشاف الاسم المميز الأساسي",
- "Test Base DN" : "اختبر الاسم المميز الأساسي Base DN",
- "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "إلغاء طلبات بروتوكول الوصول إلي الدليل البسيط LDAP التلقائية. أفضل للإعدادات الأكبر، ولكنه يتطلب بعض المعرفة فيما يخص بروتوكول الوصول إلي الدليل البسيط.",
- "Manually enter LDAP filters (recommended for large directories)" : "إدخال عوامل تصفية بروتوكول الوصول إلي الدليل البسيط يدويًا (موصى به للأدلة الكبيرة)",
- "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." : "يحدد عامل التصفية مستخدمي بروتوكول الوصول إلي الدليل البسيط الذين يمكنهم الوصول إلى %sالنموذج.",
- "Verify settings and count users" : "التحقق من الإعدادات وعدد المستخدمين",
- "Saving" : "جاري الحفظ ...",
+ "For anonymous access, leave DN and Password empty." : "للوصول المجهول anonymous access، اترك خانتيْ الاسم المميز وكلمة المرور فارغتين.",
+ "Save Credentials" : "حفظ حيثيّات الدخول 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" : "المتابعة",
- "Please renew your password." : "الرجاء تجديد كلمة المرور الخاصة بك.",
- "An internal error occurred." : "طرأ هناك خطأ.",
- "Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مسؤول النظام.",
- "Current password" : "الكلمة السرية الحالية",
- "New password" : "الكلمة السرية الجديدة",
- "Renew password" : "تجديد كلمة السر",
- "Wrong password." : "الكلمة السرية خاطئة.",
+ "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" : "خادم",
+ "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> الوحدة النمطية لمعالج النص التشعبي لبروتوكول الوصول إلي الدليل البسيط غير مثبتة، والواجهة الخلفية لن تعمل. يرجى طلب تثبيتها من قبل مسؤول النظام.",
+ "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." : "توفير مضيف احتياطي اختياري. يجب أن يكون نسخة طبق الأصل من خادم بروتوكول الوصول إلي الدليل البسيط/ الدليل النشط الرئيسي.",
- "Backup (Replica) Port" : "منفذ النسخ الاحتياطي (النسخ المتماثل)",
- "Disable Main Server" : "تعطيل الخادم الرئيسي",
- "Only connect to the replica server." : "الاتصال بخادم النسخ المتماثل فقط.",
- "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." : "لا يوصي به، استخدمه للاختبار فقط! إذا كان الاتصال يعمل فقط مع هذا الخيار، فقم باستيراد شهادة طبقة المنافذ الآمنة لخادم بروتوكول الوصول إلي الدليل البسيط في خادم%s الخاص بك.",
- "Cache Time-To-Live" : "مدة صلاحية ذاكرة التخزين المؤقت",
- "in seconds. A change empties the cache." : "خلال ثوان. يؤدي التغيير إلى إفراغ ذاكرة التخزين المؤقت.",
- "Directory 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." : "تستخدم خاصية بروتوكول الوصول إلي الدليل البسيط لإنشاء اسم عرض المستخدم.",
- "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)«." : "اختياري. نظرا لإضافة بروتوكول الوصول إلي الدليل البسيط إلى اسم العرض بين قوسين. ينتج عنه فيعلى سبيل المثال » جون دو(john.doe@example.org)«.",
- "Base User Tree" : "شجرة المستخدم الأساسي",
- "One User Base DN per line" : "اسم مميز أساسي لمستخدم واحد لكل سطر",
+ "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" : "اختياري؛ تحديد واحد لكل سطر",
+ "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." : "تستخدم خاصية بروتوكول الوصول إلي الدليل البسيط لإنشاء اسم عرض المجموعات.",
- "Base Group Tree" : "شجرة المجموعة الأساسية",
- "One Group Base DN per line" : "اسم مميز أساسي لمجموعة واحدة لكل سطر",
- "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 الموجودة في كائنات المجموعة على عنوان محدد موقع الموارد المُوحّد لبحث بروتوكول الوصول إلي الدليل البسيط والذي يحدد الكائنات التي تنتمي إلى المجموعة. (يؤدي الإعداد الفارغ إلى تعطيل وظيفة عضوية المجموعة الديناميكية.)",
+ "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.)" : "عند التشغيل، يتم دعم المجموعات التي تحتوي على مجموعات. (تعمل فقط إذا كان تحديد عضو المجموعة يحتوي على الأسماء المميزة).",
- "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.)" : "يتم استخدام حجم الحزمة/الأجزاء لعمليات بحث بروتوكول الوصول إلي الدليل البسيط المقسمة إلى صفحات والتي قد تعطي نتائج ضخمة مثل تعداد المستخدم أو المجموعة. (الضبط علي 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\" للمستخدمين تغيير كلمة المرور الخاصة بهم والسماح للمسؤولين المتميزين ومسؤولي المجموعة بتغيير كلمة مرور مستخدمي خادوم بروتوكول الوصول إلي الدليل البسيط. وتعمل هذه الخاصية يعمل عندما يتم تهيئة وضبط سياسات التحكم في الوصول على خادوم بروتوكول الوصول إلي الدليل البسيط وفقًا لذلك. وحيث أن كلمات المرور يتم إرسالها فى صورة نص عادي إلى خادوم بروتوكول الوصول إلي الدليل البسيط، فيجب استخدام تشفير النقل وضبط تجزئة كلمة المرور على خادوم بروتوكول الوصول إلي الدليل البسيط.",
- "(New password is sent as plain text to LDAP)" : "(يتم إرسال كلمة المرور الجديدة كنص عادي إلى خادوم بروتوكول الوصول إلي الدليل البسيط )",
+ "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 للمستخدمين تغيير كلمة المرور الخاصة بهم والسماح للمشرفين المتميزين super admin ومسؤولي المجموعات بتغيير كلمة مرور مستخدمي خادومهم. وتعمل هذه الخاصية عندما يتم تهيئة وضبط سياسات التحكم في الوصول على خادوم 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." : "سياسة الاسم المميز لكلمة المرورالافتراضية التي سيتم استخدامها لمعالجة انتهاء صلاحية كلمة المرور. تعمل فقط عندما يتم تمكين تغيير كلمة مرور خادوم بروتوكول الوصول إلي الدليل البسيط لكل مستخدم ويكون مدعومًا فقط بواسطة أوبن إل دي أيه بي \"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\" الذين ليس لديهم حصة محددة في حقل الحصة النسبية.",
+ "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" : "قاعدة تسمية المجلد الرئيسي للمستخدم",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "قُم بتعيين البريد الإلكتروني للمستخدمين من خاصّية خادوم LDAP الخاصة بهم. اتركه فارغًا للتصرُّف الافتراضي.",
+ "User Home Folder Naming Rule" : "قاعدة تسمية المجلد الرئيسي للمستخدم User home folder",
+ "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" : "حقل الترويسة headline",
+ "User profile Headline will be set from the specified attribute" : "خانة الترويسة headline في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
+ "Biography Field" : "خانة السيرة الذاتية biography",
+ "User profile Biography will be set from the specified attribute" : "خانة السيرة الذاتية biography في الملف الشخصي للمستخدم سوف يتم تعيينها من الخاصّية المُحدّدة",
"Internal Username" : "اسم المستخدم الداخلي",
- "Internal Username Attribute:" : "خاصية اسم المستخدم الداخلي:",
- "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." : "بشكل افتراضي، يتم اكتشاف خاصية المعرف الفريد العالمي تلقائيًا. ويتم استخدام خاصية المعرف الفريد العالمي لتحديد مستخدمي ومجموعات بروتوكول الوصول إلي الدليل البسيط علي نحو موثوق. أيضًا، سيتم إنشاء اسم المستخدم الداخلي بناءً على المعرف الفريد العالمي إذا لم يتم تحديده أعلاه. يمكنك تجاوز الإعداد وتجاوز الخاصية حسب اختيارك. يجب عليك التأكد من إمكانية الوصول إلي الخاصية التي قمت باختيارها من قبل كل من المستخدمين والمجموعات وأنها فريدة. اتركه فارغًا للوضع الافتراضي. تصبح التغييرات نافذة فقط على مستخدمي ومجموعات بروتوكول الوصول إلي الدليل البسيط المعينين حديثًا (المضافين).",
- "UUID Attribute for Users:" : "خاصية المعرف الفريد العالمي للمستخدمين:",
- "UUID Attribute for Groups:" : "خاصية المعرف الفريد العالمي للمجموعات:",
- "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." : "تُستخدم أسماء المستخدمين لتخزين وتخصيص البيانات التعريف الوصفية. من أجل تحديد المستخدمين والتعرف عليهم بدقة، سيكون لكل مستخدم خادوم بروتوكول الوصول إلي الدليل البسيط \"LDAP\" اسم مستخدم داخلي. يتطلب هذا تعيينًا من اسم المستخدم إلى مستخدم خادوم بروتوكول الوصول إلي الدليل البسيط \"LDAP\". يتم تعيين اسم المستخدم الذي تم إنشاؤه إلى المعرف الفريد العالمي\"UUID\" لمستخدم LDAP. بالإضافة إلى ذلك، يتم تخزين الاسم المميز مؤقتًا أيضًا لتقليل تفاعل LDAP، ولكنه لا يستخدم لتحديد الهوية. وعند تغير الاسم المميز يتم العثور على التغييرات. ويتم استخدام اسم المستخدم الداخلي في كل مكان. مسح التعيينات سيكون له آثار متبقية في كل مكان. مسح التعيينات ليس حساسًا للتكوين، فهو يؤثر على جميع تكوينات LDAP! لا تقم مطلقًا بمسح التعيينات في بيئة الإنتاج، فقط في مرحلة الاختبار أو المرحلة التجريبية.",
- "Clear Username-LDAP User Mapping" : "مسح اسم المستخدم- تعيين مستخدم بروتوكول الوصول إلي الدليل البسيط",
- "Clear Groupname-LDAP Group Mapping" : "مسح اسم المجموعة - تعيين مجموعة بروتوكول الوصول إلي الدليل البسيط "
+ "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 و المجموعة"
},"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/ca.js b/apps/user_ldap/l10n/ca.js
index 6c57d092fe6..1c8b4d7c913 100644
--- a/apps/user_ldap/l10n/ca.js
+++ b/apps/user_ldap/l10n/ca.js
@@ -155,6 +155,8 @@ OC.L10N.register(
"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",
@@ -183,6 +185,25 @@ OC.L10N.register(
"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 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",
"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. 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:",
diff --git a/apps/user_ldap/l10n/ca.json b/apps/user_ldap/l10n/ca.json
index a9208943afd..25b0962174e 100644
--- a/apps/user_ldap/l10n/ca.json
+++ b/apps/user_ldap/l10n/ca.json
@@ -153,6 +153,8 @@
"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",
@@ -181,6 +183,25 @@
"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 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",
"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. 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:",
diff --git a/apps/user_ldap/l10n/cs.js b/apps/user_ldap/l10n/cs.js
index 779e3a42e13..59cb5060ab0 100644
--- a/apps/user_ldap/l10n/cs.js
+++ b/apps/user_ldap/l10n/cs.js
@@ -155,6 +155,8 @@ OC.L10N.register(
"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áklad stromu skupin",
diff --git a/apps/user_ldap/l10n/cs.json b/apps/user_ldap/l10n/cs.json
index a848b0fdeea..74a28baf237 100644
--- a/apps/user_ldap/l10n/cs.json
+++ b/apps/user_ldap/l10n/cs.json
@@ -153,6 +153,8 @@
"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áklad stromu skupin",
diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js
index 9e6d329fb75..db789abe9dd 100644
--- a/apps/user_ldap/l10n/de_DE.js
+++ b/apps/user_ldap/l10n/de_DE.js
@@ -155,6 +155,8 @@ OC.L10N.register(
"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",
diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json
index 351f1a0ddd7..a284df0afb8 100644
--- a/apps/user_ldap/l10n/de_DE.json
+++ b/apps/user_ldap/l10n/de_DE.json
@@ -153,6 +153,8 @@
"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",
diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js
index c0a638cf50b..95af6d42a27 100644
--- a/apps/user_ldap/l10n/en_GB.js
+++ b/apps/user_ldap/l10n/en_GB.js
@@ -155,6 +155,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",
diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json
index c974665c560..29aa75db02d 100644
--- a/apps/user_ldap/l10n/en_GB.json
+++ b/apps/user_ldap/l10n/en_GB.json
@@ -153,6 +153,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",
diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js
index 269e39b4ff2..4e8a85fde06 100644
--- a/apps/user_ldap/l10n/es.js
+++ b/apps/user_ldap/l10n/es.js
@@ -155,6 +155,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 que faltan en LDAP",
+ "When switched on, users imported from LDAP which are then missing will be disabled" : "Si se activa, los usuarios importados de LDAP que falten 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",
diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json
index 5e9be52afec..2979e0e0343 100644
--- a/apps/user_ldap/l10n/es.json
+++ b/apps/user_ldap/l10n/es.json
@@ -153,6 +153,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 que faltan en LDAP",
+ "When switched on, users imported from LDAP which are then missing will be disabled" : "Si se activa, los usuarios importados de LDAP que falten 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",
diff --git a/apps/user_ldap/l10n/es_EC.js b/apps/user_ldap/l10n/es_EC.js
index 4145049c1db..460ef4be76d 100644
--- a/apps/user_ldap/l10n/es_EC.js
+++ b/apps/user_ldap/l10n/es_EC.js
@@ -10,6 +10,7 @@ OC.L10N.register(
"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",
+ "Invalid data specified" : "Datos especificados no válidos",
" Could not set configuration %s" : "No fue posible establecer la configuración %s",
"Action does not exist" : "La acción no existe",
"Renewing …" : "Renovando ...",
@@ -49,16 +50,27 @@ 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 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 admite 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",
+ "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. ","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:",
@@ -72,10 +84,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 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",
@@ -139,6 +155,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",
@@ -164,7 +182,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. 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.",
diff --git a/apps/user_ldap/l10n/es_EC.json b/apps/user_ldap/l10n/es_EC.json
index 6c3a8ce3d41..85228579461 100644
--- a/apps/user_ldap/l10n/es_EC.json
+++ b/apps/user_ldap/l10n/es_EC.json
@@ -8,6 +8,7 @@
"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",
+ "Invalid data specified" : "Datos especificados no válidos",
" Could not set configuration %s" : "No fue posible establecer la configuración %s",
"Action does not exist" : "La acción no existe",
"Renewing …" : "Renovando ...",
@@ -47,16 +48,27 @@
"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 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 admite 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",
+ "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. ","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:",
@@ -70,10 +82,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 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",
@@ -137,6 +153,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",
@@ -162,7 +180,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. 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.",
diff --git a/apps/user_ldap/l10n/eu.js b/apps/user_ldap/l10n/eu.js
index 0c98fb522f3..e05622aedbb 100644
--- a/apps/user_ldap/l10n/eu.js
+++ b/apps/user_ldap/l10n/eu.js
@@ -155,6 +155,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",
@@ -183,12 +185,25 @@ OC.L10N.register(
"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",
"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. 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",
diff --git a/apps/user_ldap/l10n/eu.json b/apps/user_ldap/l10n/eu.json
index 9e83a667301..5bc48300c39 100644
--- a/apps/user_ldap/l10n/eu.json
+++ b/apps/user_ldap/l10n/eu.json
@@ -153,6 +153,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",
@@ -181,12 +183,25 @@
"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",
"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. 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",
diff --git a/apps/user_ldap/l10n/fa.js b/apps/user_ldap/l10n/fa.js
index 082f297f98f..2d201d6d87e 100644
--- a/apps/user_ldap/l10n/fa.js
+++ b/apps/user_ldap/l10n/fa.js
@@ -3,88 +3,217 @@ 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.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details.",
"No action specified" : "فعالیتی مشخص نشده است",
"No configuration specified" : "هیچ پیکربندی مشخص نشده است",
"No data specified" : "داده ای مشخص نشده است",
+ "Invalid data specified" : "Invalid data specified",
+ " Could not set configuration %s" : " Could not set configuration %s",
+ "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.",
+ "Password change rejected. Hint: " : "Password change rejected. Hint: ",
+ "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" : "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" : "نام کاربری داخلی",
+ "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 گروه نقشه برداری"
},
-"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..724cdd37920 100644
--- a/apps/user_ldap/l10n/fa.json
+++ b/apps/user_ldap/l10n/fa.json
@@ -1,88 +1,217 @@
{ "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.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Invalid configuration. Please have a look at the logs for further details.",
"No action specified" : "فعالیتی مشخص نشده است",
"No configuration specified" : "هیچ پیکربندی مشخص نشده است",
"No data specified" : "داده ای مشخص نشده است",
+ "Invalid data specified" : "Invalid data specified",
+ " Could not set configuration %s" : " Could not set configuration %s",
+ "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.",
+ "Password change rejected. Hint: " : "Password change rejected. Hint: ",
+ "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" : "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" : "نام کاربری داخلی",
+ "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;"
+},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js
index 32ca55b2bab..a3b0e687edc 100644
--- a/apps/user_ldap/l10n/gl.js
+++ b/apps/user_ldap/l10n/gl.js
@@ -47,7 +47,7 @@ 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.",
+ "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 a LDAP/AD. Verifique a máquina, o porto e as credenciais.",
@@ -60,12 +60,12 @@ OC.L10N.register(
"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",
+ "LDAP/AD integration" : "Integración de LDAP/AD",
"_%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 vostede mesmo nos axustes avanzados de LDAP. ",
+ "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",
@@ -110,7 +110,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.",
@@ -121,7 +121,7 @@ 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",
@@ -133,7 +133,7 @@ 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>Advertencia:</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.",
@@ -149,12 +149,14 @@ OC.L10N.register(
"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@exemplo.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",
+ "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",
@@ -166,7 +168,7 @@ OC.L10N.register(
"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 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 «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)",
@@ -176,9 +178,9 @@ 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." : "Substituír 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." : "Substituír a cota predeterminada para usuarios LDAP que non teñen unha cota estabelecida 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." : "Estabelecer o correo do usuario dende 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»",
@@ -206,11 +208,11 @@ OC.L10N.register(
"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.",
+ "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. Vde. 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.",
"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 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.",
"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»"
},
diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json
index 8cf049d2112..ead5a8f0170 100644
--- a/apps/user_ldap/l10n/gl.json
+++ b/apps/user_ldap/l10n/gl.json
@@ -45,7 +45,7 @@
"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.",
+ "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 a LDAP/AD. Verifique a máquina, o porto e as credenciais.",
@@ -58,12 +58,12 @@
"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",
+ "LDAP/AD integration" : "Integración de LDAP/AD",
"_%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 vostede mesmo nos axustes avanzados de LDAP. ",
+ "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",
@@ -108,7 +108,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.",
@@ -119,7 +119,7 @@
"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",
@@ -131,7 +131,7 @@
"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>Advertencia:</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.",
@@ -147,12 +147,14 @@
"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@exemplo.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",
+ "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",
@@ -164,7 +166,7 @@
"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 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 «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)",
@@ -174,9 +176,9 @@
"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." : "Substituír 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." : "Substituír a cota predeterminada para usuarios LDAP que non teñen unha cota estabelecida 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." : "Estabelecer o correo do usuario dende 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»",
@@ -204,11 +206,11 @@
"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.",
+ "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. Vde. 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.",
"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 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.",
"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»"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js
index 8df55443cd0..eb7a6c2e1d0 100644
--- a/apps/user_ldap/l10n/it.js
+++ b/apps/user_ldap/l10n/it.js
@@ -10,6 +10,7 @@ OC.L10N.register(
"No action specified" : "Nessuna azione specificata",
"No configuration specified" : "Nessuna configurazione specificata",
"No data specified" : "Nessun dato specificato",
+ "Invalid data specified" : "Dati specificati non validi",
" Could not set configuration %s" : "Impossibile impostare la configurazione %s",
"Action does not exist" : "L'azione non esiste",
"Renewing …" : "Rinnovo...",
@@ -60,6 +61,10 @@ OC.L10N.register(
"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.","La tua password scadrà oggi tra %n giorni."],
"LDAP/AD integration" : "Integrazione LDAP/AD",
+ "_%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",
@@ -86,6 +91,7 @@ OC.L10N.register(
"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 +155,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",
@@ -177,7 +185,27 @@ 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",
"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. 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).",
diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json
index 3523be2ca02..f1031636b1b 100644
--- a/apps/user_ldap/l10n/it.json
+++ b/apps/user_ldap/l10n/it.json
@@ -8,6 +8,7 @@
"No action specified" : "Nessuna azione specificata",
"No configuration specified" : "Nessuna configurazione specificata",
"No data specified" : "Nessun dato specificato",
+ "Invalid data specified" : "Dati specificati non validi",
" Could not set configuration %s" : "Impossibile impostare la configurazione %s",
"Action does not exist" : "L'azione non esiste",
"Renewing …" : "Rinnovo...",
@@ -58,6 +59,10 @@
"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.","La tua password scadrà oggi tra %n giorni."],
"LDAP/AD integration" : "Integrazione LDAP/AD",
+ "_%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",
@@ -84,6 +89,7 @@
"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",
@@ -147,6 +153,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",
@@ -175,7 +183,27 @@
"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",
"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. 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).",
diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js
index 31556eb272e..a5220e5b5f0 100644
--- a/apps/user_ldap/l10n/pt_BR.js
+++ b/apps/user_ldap/l10n/pt_BR.js
@@ -155,6 +155,8 @@ 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" : "Desabilitar usuários ausentes do 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",
diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json
index 50def2eec46..3e55a77a531 100644
--- a/apps/user_ldap/l10n/pt_BR.json
+++ b/apps/user_ldap/l10n/pt_BR.json
@@ -153,6 +153,8 @@
"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" : "Desabilitar usuários ausentes do 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",
diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js
index 56747ba155c..c675878b3be 100644
--- a/apps/user_ldap/l10n/ru.js
+++ b/apps/user_ldap/l10n/ru.js
@@ -155,6 +155,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" : "База дерева групп",
diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json
index f97a17a182a..bdd69e53d8d 100644
--- a/apps/user_ldap/l10n/ru.json
+++ b/apps/user_ldap/l10n/ru.json
@@ -153,6 +153,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" : "База дерева групп",
diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js
index 0dd3fe3c7da..704b28a0dc9 100644
--- a/apps/user_ldap/l10n/sr.js
+++ b/apps/user_ldap/l10n/sr.js
@@ -155,6 +155,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" : "Стабло основне групе",
diff --git a/apps/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json
index 4a743428361..d41b0005aa3 100644
--- a/apps/user_ldap/l10n/sr.json
+++ b/apps/user_ldap/l10n/sr.json
@@ -153,6 +153,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" : "Стабло основне групе",
diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js
index a735c6d53dc..f7b5a5cb38d 100644
--- a/apps/user_ldap/l10n/sv.js
+++ b/apps/user_ldap/l10n/sv.js
@@ -155,6 +155,8 @@ OC.L10N.register(
"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",
diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json
index 3b629de3d5e..b81cf360a2b 100644
--- a/apps/user_ldap/l10n/sv.json
+++ b/apps/user_ldap/l10n/sv.json
@@ -153,6 +153,8 @@
"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",
diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js
index cdf8ff0a098..68d504c4dee 100644
--- a/apps/user_ldap/l10n/tr.js
+++ b/apps/user_ldap/l10n/tr.js
@@ -155,6 +155,8 @@ OC.L10N.register(
"One User Base DN per line" : "Her Satıra Bir Kullanıcı Base DN",
"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 devre dışı bırakılsın",
+ "When switched on, users imported from LDAP which are then missing will be disabled" : "Bu seçenek etkinleştirildiğinde, LDAP üzerinden içe aktarılmış ancak daha sonra kaybolmuş kullanıcılar devre dışı bırakı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.",
"Base Group Tree" : "Temel Grup Ağacı",
diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json
index 4c07f79e6db..99eeb463f7a 100644
--- a/apps/user_ldap/l10n/tr.json
+++ b/apps/user_ldap/l10n/tr.json
@@ -153,6 +153,8 @@
"One User Base DN per line" : "Her Satıra Bir Kullanıcı Base DN",
"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 devre dışı bırakılsın",
+ "When switched on, users imported from LDAP which are then missing will be disabled" : "Bu seçenek etkinleştirildiğinde, LDAP üzerinden içe aktarılmış ancak daha sonra kaybolmuş kullanıcılar devre dışı bırakı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.",
"Base Group Tree" : "Temel Grup Ağacı",
diff --git a/apps/user_ldap/l10n/uk.js b/apps/user_ldap/l10n/uk.js
index 391f41ff995..54503516376 100644
--- a/apps/user_ldap/l10n/uk.js
+++ b/apps/user_ldap/l10n/uk.js
@@ -133,7 +133,7 @@ OC.L10N.register(
"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 сервера.",
@@ -189,7 +189,7 @@ OC.L10N.register(
"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! Ніколи не очищайте зіставлення у виробничому середовищі, лише на стадії тестування чи експерименту.",
+ "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"
},
diff --git a/apps/user_ldap/l10n/uk.json b/apps/user_ldap/l10n/uk.json
index 3894b315880..b642ec2129d 100644
--- a/apps/user_ldap/l10n/uk.json
+++ b/apps/user_ldap/l10n/uk.json
@@ -131,7 +131,7 @@
"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 сервера.",
@@ -187,7 +187,7 @@
"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! Ніколи не очищайте зіставлення у виробничому середовищі, лише на стадії тестування чи експерименту.",
+ "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"
},"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);"
diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js
index 847b0d28330..fac005b2891 100644
--- a/apps/user_ldap/l10n/zh_CN.js
+++ b/apps/user_ldap/l10n/zh_CN.js
@@ -4,12 +4,13 @@ OC.L10N.register(
"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." : "配置无效。更多细节请查看日志。",
"No action specified" : "未指定操作",
"No configuration specified" : "未指定配置文件",
"No data specified" : "未指定数据",
+ "Invalid data specified" : "指定了无效的数据",
" Could not set configuration %s" : " 无法设定配置文件 %s",
"Action does not exist" : "操作不存在",
"Renewing …" : "正在更新……",
@@ -60,6 +61,10 @@ OC.L10N.register(
"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 集成",
+ "_%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" : "无效的主机",
@@ -86,6 +91,7 @@ OC.L10N.register(
"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 +155,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" : "基础组树",
@@ -177,9 +185,27 @@ 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" : "用户个人资料中的自述将按照指定属性设置",
"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 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射(或增加)的 LDAP 用户和组。",
diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json
index 7599b62a8ac..74a32fb694a 100644
--- a/apps/user_ldap/l10n/zh_CN.json
+++ b/apps/user_ldap/l10n/zh_CN.json
@@ -2,12 +2,13 @@
"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." : "配置无效。更多细节请查看日志。",
"No action specified" : "未指定操作",
"No configuration specified" : "未指定配置文件",
"No data specified" : "未指定数据",
+ "Invalid data specified" : "指定了无效的数据",
" Could not set configuration %s" : " 无法设定配置文件 %s",
"Action does not exist" : "操作不存在",
"Renewing …" : "正在更新……",
@@ -58,6 +59,10 @@
"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 集成",
+ "_%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" : "无效的主机",
@@ -84,6 +89,7 @@
"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" : "增加一个新的配置",
@@ -147,6 +153,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" : "基础组树",
@@ -175,9 +183,27 @@
"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" : "用户个人资料中的自述将按照指定属性设置",
"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 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射(或增加)的 LDAP 用户和组。",
diff --git a/apps/user_ldap/l10n/zh_HK.js b/apps/user_ldap/l10n/zh_HK.js
index f8e39d59e32..95f84803e3c 100644
--- a/apps/user_ldap/l10n/zh_HK.js
+++ b/apps/user_ldap/l10n/zh_HK.js
@@ -70,7 +70,7 @@ OC.L10N.register(
"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 Directories。如使用者配額、電子郵件、虛擬化身圖片、群組成員資格等屬性可以透過有適當查詢與過濾條件的目錄從 Nextcloud 拉取。\n\n使用者以其 LDAP 或 AD 憑證登入 Nextcloud,並根據 LDAP 或 AD 伺服器處理的身份驗證請求來授予存取權限。Nextcloud 並不儲存 LDAP 或 AD 的密碼,而是使用這些憑證來對使用者進行身份驗證,然後 Nextcloud 會使用工作階段作為使用者 ID。更多資訊在 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 找到:",
@@ -155,6 +155,8 @@ OC.L10N.register(
"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" : "基本群組樹",
@@ -203,7 +205,7 @@ OC.L10N.register(
"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. 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 使用者有效。將其留空會使用預設行為。",
+ "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 用戶及群組生效。",
diff --git a/apps/user_ldap/l10n/zh_HK.json b/apps/user_ldap/l10n/zh_HK.json
index 31b7e606335..b2102d302fa 100644
--- a/apps/user_ldap/l10n/zh_HK.json
+++ b/apps/user_ldap/l10n/zh_HK.json
@@ -68,7 +68,7 @@
"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 Directories。如使用者配額、電子郵件、虛擬化身圖片、群組成員資格等屬性可以透過有適當查詢與過濾條件的目錄從 Nextcloud 拉取。\n\n使用者以其 LDAP 或 AD 憑證登入 Nextcloud,並根據 LDAP 或 AD 伺服器處理的身份驗證請求來授予存取權限。Nextcloud 並不儲存 LDAP 或 AD 的密碼,而是使用這些憑證來對使用者進行身份驗證,然後 Nextcloud 會使用工作階段作為使用者 ID。更多資訊在 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 找到:",
@@ -153,6 +153,8 @@
"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" : "基本群組樹",
@@ -201,7 +203,7 @@
"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. 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 使用者有效。將其留空會使用預設行為。",
+ "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 用戶及群組生效。",
diff --git a/apps/user_ldap/l10n/zh_TW.js b/apps/user_ldap/l10n/zh_TW.js
index bf4569b9e61..eab5f928228 100644
--- a/apps/user_ldap/l10n/zh_TW.js
+++ b/apps/user_ldap/l10n/zh_TW.js
@@ -155,6 +155,8 @@ OC.L10N.register(
"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" : "Base Group Tree",
diff --git a/apps/user_ldap/l10n/zh_TW.json b/apps/user_ldap/l10n/zh_TW.json
index 5312e5718b7..4155fe4d91d 100644
--- a/apps/user_ldap/l10n/zh_TW.json
+++ b/apps/user_ldap/l10n/zh_TW.json
@@ -153,6 +153,8 @@
"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" : "Base Group Tree",
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index 3fbb003ed51..0b115c42764 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -1545,12 +1545,16 @@ class Access extends LDAPUtility {
return '';
}
// wildcards don't work with some attributes
- $filter[] = $fallbackAttribute . '=' . $originalSearch;
+ if ($originalSearch !== '') {
+ $filter[] = $fallbackAttribute . '=' . $originalSearch;
+ }
$filter[] = $fallbackAttribute . '=' . $search;
} else {
foreach ($searchAttributes as $attribute) {
// wildcards don't work with some attributes
- $filter[] = $attribute . '=' . $originalSearch;
+ if ($originalSearch !== '') {
+ $filter[] = $attribute . '=' . $originalSearch;
+ }
$filter[] = $attribute . '=' . $search;
}
}
diff --git a/apps/user_ldap/lib/AppInfo/Application.php b/apps/user_ldap/lib/AppInfo/Application.php
index 757ac141d3d..d6fb062a028 100644
--- a/apps/user_ldap/lib/AppInfo/Application.php
+++ b/apps/user_ldap/lib/AppInfo/Application.php
@@ -59,7 +59,6 @@ use OCP\Notification\IManager as INotificationManager;
use OCP\Share\IManager as IShareManager;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class Application extends App implements IBootstrap {
public function __construct() {
@@ -120,7 +119,6 @@ class Application extends App implements IBootstrap {
$context->injectFn(function (
INotificationManager $notificationManager,
IAppContainer $appContainer,
- EventDispatcherInterface $legacyDispatcher,
IEventDispatcher $dispatcher,
IGroupManager $groupManager,
User_Proxy $userBackend,
@@ -136,7 +134,7 @@ class Application extends App implements IBootstrap {
$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);
@@ -153,7 +151,7 @@ class Application extends App implements IBootstrap {
);
}
- private function registerBackendDependents(IAppContainer $appContainer, EventDispatcherInterface $dispatcher) {
+ private function registerBackendDependents(IAppContainer $appContainer, IEventDispatcher $dispatcher) {
$dispatcher->addListener(
'OCA\\Files_External::loadAdditionalBackends',
function () use ($appContainer) {
diff --git a/apps/user_ldap/lib/Command/CheckGroup.php b/apps/user_ldap/lib/Command/CheckGroup.php
new file mode 100644
index 00000000000..68f96512a9b
--- /dev/null
+++ b/apps/user_ldap/lib/Command/CheckGroup.php
@@ -0,0 +1,181 @@
+<?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 Côme Chilliet <come.chilliet@nextcloud.com>
+ * @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/>
+ *
+ */
+
+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 0;
+ } elseif ($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 0;
+ } else {
+ throw new \Exception('The given group is not a recognized LDAP group.');
+ }
+ } catch (\Exception $e) {
+ $output->writeln('<error>' . $e->getMessage(). '</error>');
+ return 1;
+ }
+ }
+
+ 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/Controller/ConfigAPIController.php b/apps/user_ldap/lib/Controller/ConfigAPIController.php
index e408d03fcd5..23c35895c94 100644
--- a/apps/user_ldap/lib/Controller/ConfigAPIController.php
+++ b/apps/user_ldap/lib/Controller/ConfigAPIController.php
@@ -29,6 +29,7 @@ use OC\Security\IdentityProof\Manager;
use OCA\User_LDAP\Configuration;
use OCA\User_LDAP\ConnectionFactory;
use OCA\User_LDAP\Helper;
+use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSBadRequestException;
use OCP\AppFramework\OCS\OCSException;
@@ -76,42 +77,10 @@ class ConfigAPIController extends OCSController {
}
/**
- * 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>
- *
- * For JSON output provide the format=json parameter
+ * Create a new (empty) configuration and return the resulting prefix
*
* @AuthorizedAdminSetting(settings=OCA\User_LDAP\Settings\Admin)
- * @return DataResponse
+ * @return DataResponse<Http::STATUS_OK, array{configID: string}, array{}>
* @throws OCSException
*/
public function create() {
@@ -128,27 +97,15 @@ class ConfigAPIController extends OCSController {
}
/**
- * 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
*
* @AuthorizedAdminSetting(settings=OCA\User_LDAP\Settings\Admin)
- * @param string $configID
- * @return DataResponse
- * @throws OCSBadRequestException
+ * @param string $configID ID of the config
+ * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
* @throws OCSException
+ * @throws OCSNotFoundException Config not found
+ *
+ * 200: Config deleted successfully
*/
public function delete($configID) {
try {
@@ -167,28 +124,17 @@ class ConfigAPIController extends OCSController {
}
/**
- * Modifies 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>
+ * Modify a configuration
*
* @AuthorizedAdminSetting(settings=OCA\User_LDAP\Settings\Admin)
- * @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, array<empty>, array{}>
* @throws OCSException
+ * @throws OCSBadRequestException Modifying config is not possible
+ * @throws OCSNotFoundException Config not found
+ *
+ * 200: Config returned
*/
public function modify($configID, $configData) {
try {
@@ -220,8 +166,9 @@ class ConfigAPIController extends OCSController {
}
/**
- * Retrieves a configuration
+ * Get a configuration
*
+ * Output can look like this:
* <?xml version="1.0"?>
* <ocs>
* <meta>
@@ -285,10 +232,13 @@ class ConfigAPIController extends OCSController {
* </ocs>
*
* @AuthorizedAdminSetting(settings=OCA\User_LDAP\Settings\Admin)
- * @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
*/
public function show($configID, $showPassword = false) {
try {
@@ -296,7 +246,7 @@ class ConfigAPIController extends OCSController {
$config = new Configuration($configID);
$data = $config->getConfiguration();
- if (!(int)$showPassword) {
+ if (!$showPassword) {
$data['ldapAgentPassword'] = '***';
}
foreach ($data as $key => $value) {
diff --git a/apps/user_ldap/lib/Db/GroupMembership.php b/apps/user_ldap/lib/Db/GroupMembership.php
new file mode 100644
index 00000000000..25be5296d52
--- /dev/null
+++ b/apps/user_ldap/lib/Db/GroupMembership.php
@@ -0,0 +1,48 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2023 Côme Chilliet <come.chilliet@nextcloud.com>
+ *
+ * @author Côme Chilliet <come.chilliet@nextcloud.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/>.
+ *
+ */
+
+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..8f6af16b267
--- /dev/null
+++ b/apps/user_ldap/lib/Db/GroupMembershipMapper.php
@@ -0,0 +1,77 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2023 Côme Chilliet <come.chilliet@nextcloud.com>
+ *
+ * @author Côme Chilliet <come.chilliet@nextcloud.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/>.
+ *
+ */
+
+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);
+ }
+
+ 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/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php
index 84267171d37..b3ff63d3b5c 100644
--- a/apps/user_ldap/lib/Group_LDAP.php
+++ b/apps/user_ldap/lib/Group_LDAP.php
@@ -48,11 +48,12 @@ use Exception;
use OC\ServerNotAvailableException;
use OCP\Cache\CappedMemoryCache;
use OCP\GroupInterface;
+use OCP\Group\Backend\ABackend;
use OCP\Group\Backend\IDeleteGroupBackend;
use OCP\Group\Backend\IGetDisplayNameBackend;
use Psr\Log\LoggerInterface;
-class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, IGetDisplayNameBackend, IDeleteGroupBackend {
+class Group_LDAP extends ABackend implements GroupInterface, IGroupLDAP, IGetDisplayNameBackend, IDeleteGroupBackend {
protected bool $enabled = false;
/** @var CappedMemoryCache<string[]> $cachedGroupMembers array of users with gid as key */
@@ -63,6 +64,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I
protected CappedMemoryCache $cachedNestedGroups;
protected GroupPluginManager $groupPluginManager;
protected LoggerInterface $logger;
+ protected Access $access;
/**
* @var string $ldapGroupMemberAssocAttr contains the LDAP setting (in lower case) with the same name
@@ -70,7 +72,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I
protected string $ldapGroupMemberAssocAttr;
public function __construct(Access $access, GroupPluginManager $groupPluginManager) {
- parent::__construct($access);
+ $this->access = $access;
$filter = $this->access->connection->ldapGroupFilter;
$gAssoc = $this->access->connection->ldapGroupMemberAssocAttr;
if (!empty($filter) && !empty($gAssoc)) {
@@ -1105,31 +1107,43 @@ 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;
}
@@ -1336,4 +1350,11 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I
$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);
+ }
}
diff --git a/apps/user_ldap/lib/Group_Proxy.php b/apps/user_ldap/lib/Group_Proxy.php
index 5f8d0562fd9..114902ff9ba 100644
--- a/apps/user_ldap/lib/Group_Proxy.php
+++ b/apps/user_ldap/lib/Group_Proxy.php
@@ -28,11 +28,15 @@
*/
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\INamedBackend;
+use OCP\GroupInterface;
-class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGetDisplayNameBackend, INamedBackend, IDeleteGroupBackend {
+class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGetDisplayNameBackend, INamedBackend, IDeleteGroupBackend, IBatchMethodsBackend {
private $backends = [];
private ?Group_LDAP $refBackend = null;
private Helper $helper;
@@ -256,6 +260,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
@@ -287,6 +306,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
diff --git a/apps/user_ldap/lib/Jobs/UpdateGroups.php b/apps/user_ldap/lib/Jobs/UpdateGroups.php
index 48687494a61..487f36f4f30 100644
--- a/apps/user_ldap/lib/Jobs/UpdateGroups.php
+++ b/apps/user_ldap/lib/Jobs/UpdateGroups.php
@@ -1,10 +1,14 @@
<?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 Côme Chilliet <come.chilliet@nextcloud.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
@@ -30,47 +34,20 @@ namespace OCA\User_LDAP\Jobs;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\TimedJob;
-use OCA\User_LDAP\Group_Proxy;
use OCP\DB\Exception;
-use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\EventDispatcher\IEventDispatcher;
-use OCP\Group\Events\UserAddedEvent;
-use OCP\Group\Events\UserRemovedEvent;
use OCP\IConfig;
-use OCP\IDBConnection;
-use OCP\IGroupManager;
-use OCP\IUser;
-use OCP\IUserManager;
+use OCA\User_LDAP\Service\UpdateGroupsService;
use Psr\Log\LoggerInterface;
class UpdateGroups extends TimedJob {
- /** @var ?array<string, array{owncloudusers: string, owncloudname: string}> */
- private ?array $groupsFromDB = null;
- private Group_Proxy $groupBackend;
- private IEventDispatcher $dispatcher;
- private IGroupManager $groupManager;
- private IUserManager $userManager;
- private LoggerInterface $logger;
- private IDBConnection $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
+ ITimeFactory $timeFactory,
) {
parent::__construct($timeFactory);
$this->interval = (int)$config->getAppValue('user_ldap', 'bgjRefreshInterval', '3600');
- $this->groupBackend = $groupBackend;
- $this->dispatcher = $dispatcher;
- $this->groupManager = $groupManager;
- $this->userManager = $userManager;
- $this->logger = $logger;
- $this->dbc = $dbc;
}
/**
@@ -78,201 +55,7 @@ class UpdateGroups extends TimedJob {
* @throws Exception
*/
public function run($argument): void {
- $this->updateGroups();
- }
-
- /**
- * @throws Exception
- */
- public function updateGroups(): void {
- $this->logger->debug(
- 'Run background job "updateGroups"',
- ['app' => 'user_ldap']
- );
-
- /** @var string[] $knownGroups */
- $knownGroups = array_keys($this->getKnownGroups());
- $actualGroups = $this->groupBackend->getGroups();
-
- if (empty($actualGroups) && empty($knownGroups)) {
- $this->logger->info(
- 'bgJ "updateGroups" – groups do not seem to be configured properly, aborting.',
- ['app' => 'user_ldap']
- );
- return;
- }
-
- $this->handleKnownGroups(array_intersect($actualGroups, $knownGroups));
- $this->handleCreatedGroups(array_diff($actualGroups, $knownGroups));
- $this->handleRemovedGroups(array_diff($knownGroups, $actualGroups));
-
- $this->logger->debug(
- 'bgJ "updateGroups" – Finished.',
- ['app' => 'user_ldap']
- );
- }
-
- /**
- * @return array<string, array{owncloudusers: string, owncloudname: string}>
- * @throws Exception
- */
- private function getKnownGroups(): array {
- if (is_array($this->groupsFromDB)) {
- return $this->groupsFromDB;
- }
- $qb = $this->dbc->getQueryBuilder();
- $qb->select(['owncloudname', 'owncloudusers'])
- ->from('ldap_group_members');
-
- $qResult = $qb->executeQuery();
- $result = $qResult->fetchAll();
- $qResult->closeCursor();
-
- $this->groupsFromDB = [];
- foreach ($result as $dataset) {
- $this->groupsFromDB[$dataset['owncloudname']] = $dataset;
- }
-
- return $this->groupsFromDB;
- }
-
- /**
- * @param string[] $groups
- * @throws Exception
- */
- private function handleKnownGroups(array $groups): void {
- $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')));
-
- $groupsFromDB = $this->getKnownGroups();
- foreach ($groups as $group) {
- $knownUsers = unserialize($groupsFromDB[$group]['owncloudusers']);
- $actualUsers = $this->groupBackend->usersInGroup($group);
- $hasChanged = false;
-
- $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(
- 'bgJ "updateGroups" – Failed to get group {group} for update',
- [
- 'app' => 'user_ldap',
- 'group' => $group
- ]
- );
- continue;
- }
- 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->executeStatement();
- }
- }
- $this->logger->debug(
- 'bgJ "updateGroups" – FINISHED dealing with known Groups.',
- ['app' => 'user_ldap']
- );
- }
-
- /**
- * @param string[] $createdGroups
- * @throws Exception
- */
- private function handleCreatedGroups(array $createdGroups): void {
- $this->logger->debug(
- 'bgJ "updateGroups" – dealing with created Groups.',
- ['app' => 'user_ldap']
- );
-
- $query = $this->dbc->getQueryBuilder();
- $query->insert('ldap_group_members')
- ->setValue('owncloudname', $query->createParameter('owncloudname'))
- ->setValue('owncloudusers', $query->createParameter('owncloudusers'));
-
- foreach ($createdGroups as $createdGroup) {
- $this->logger->info(
- 'bgJ "updateGroups" – new group "' . $createdGroup . '" found.',
- ['app' => 'user_ldap']
- );
- $users = serialize($this->groupBackend->usersInGroup($createdGroup));
-
- $query->setParameter('owncloudname', $createdGroup)
- ->setParameter('owncloudusers', $users);
- $query->executeStatement();
- }
- $this->logger->debug(
- 'bgJ "updateGroups" – FINISHED dealing with created Groups.',
- ['app' => 'user_ldap']
- );
- }
-
- /**
- * @param string[] $removedGroups
- * @throws Exception
- */
- private function handleRemovedGroups(array $removedGroups): void {
- $this->logger->debug(
- 'bgJ "updateGroups" – dealing with removed groups.',
- ['app' => 'user_ldap']
- );
-
- $query = $this->dbc->getQueryBuilder();
- $query->delete('ldap_group_members')
- ->where($query->expr()->in('owncloudname', $query->createParameter('owncloudnames')));
-
- foreach (array_chunk($removedGroups, 1000) as $removedGroupsChunk) {
- $this->logger->info(
- 'bgJ "updateGroups" – groups {removedGroups} were removed.',
- [
- 'app' => 'user_ldap',
- 'removedGroups' => $removedGroupsChunk
- ]
- );
- $query->setParameter('owncloudnames', $removedGroupsChunk, IQueryBuilder::PARAM_STR_ARRAY);
- $query->executeStatement();
- }
-
- $this->logger->debug(
- 'bgJ "updateGroups" – FINISHED dealing with removed groups.',
- ['app' => 'user_ldap']
- );
+ $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 6309a0c8f91..edaf08a7816 100644
--- a/apps/user_ldap/lib/LDAP.php
+++ b/apps/user_ldap/lib/LDAP.php
@@ -33,6 +33,7 @@
*/
namespace OCA\User_LDAP;
+use OCP\IConfig;
use OCP\Profiler\IProfiler;
use OC\ServerNotAvailableException;
use OCA\User_LDAP\DataCollector\LdapDataCollector;
@@ -317,6 +318,14 @@ class LDAP implements ILDAPWrapper {
private function preFunctionCall(string $functionName, array $args): void {
$this->curArgs = $args;
+ if(strcasecmp($functionName, 'ldap_bind') === 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;
+ }
+
$this->logger->debug('Calling LDAP function {func} with parameters {args}', [
'app' => 'user_ldap',
'func' => $functionName,
diff --git a/apps/user_ldap/lib/Migration/Version1190Date20230706134108.php b/apps/user_ldap/lib/Migration/Version1190Date20230706134108.php
new file mode 100644
index 00000000000..3f554f56e64
--- /dev/null
+++ b/apps/user_ldap/lib/Migration/Version1190Date20230706134108.php
@@ -0,0 +1,113 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2023 Your name <your@email.com>
+ *
+ * @author Your name <your@email.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/>.
+ *
+ */
+
+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']);
+ foreach ($knownUsers as $knownUser) {
+ $insert
+ ->setParameter('groupid', $row['owncloudname'])
+ ->setParameter('userid', $knownUser)
+ ;
+
+ $insert->executeStatement();
+ }
+ }
+ $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..bc88dc2beb9
--- /dev/null
+++ b/apps/user_ldap/lib/Migration/Version1190Date20230706134109.php
@@ -0,0 +1,46 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2023 Your name <your@email.com>
+ *
+ * @author Your name <your@email.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/>.
+ *
+ */
+
+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/Proxy.php b/apps/user_ldap/lib/Proxy.php
index 8cdb1b1da6a..e2e33f3007b 100644
--- a/apps/user_ldap/lib/Proxy.php
+++ b/apps/user_ldap/lib/Proxy.php
@@ -130,7 +130,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/UpdateGroupsService.php b/apps/user_ldap/lib/Service/UpdateGroupsService.php
new file mode 100644
index 00000000000..faee092a372
--- /dev/null
+++ b/apps/user_ldap/lib/Service/UpdateGroupsService.php
@@ -0,0 +1,194 @@
+<?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 Côme Chilliet <come.chilliet@nextcloud.com>
+ * @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/>
+ *
+ */
+
+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) {
+ $this->groupMembershipMapper->delete($groupMemberships[$removedUser]);
+ $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) {
+ $this->groupMembershipMapper->insert(GroupMembership::fromParams(['groupid' => $group,'userid' => $addedUser]));
+ $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) {
+ $this->groupMembershipMapper->insert(GroupMembership::fromParams(['groupid' => $createdGroup,'userid' => $user]));
+ 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/openapi.json b/apps/user_ldap/openapi.json
new file mode 100644
index 00000000000..43d2d8016b5
--- /dev/null
+++ b/apps/user_ldap/openapi.json
@@ -0,0 +1,384 @@
+{
+ "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",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "default": "true"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "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>(&amp;(objectclass=nextcloudUser)(nextcloudEnabled=TRUE))</ldapUserFilter> <ldapUserFilterMode>1</ldapUserFilterMode> <ldapGroupFilter>(&amp;(|(objectclass=nextcloudGroup)))</ldapGroupFilter> <ldapGroupFilterMode>0</ldapGroupFilterMode> <ldapGroupFilterObjectclass>nextcloudGroup</ldapGroupFilterObjectclass> <ldapGroupFilterGroups></ldapGroupFilterGroups> <ldapGroupDisplayName>cn</ldapGroupDisplayName> <ldapGroupMemberAssocAttr>memberUid</ldapGroupMemberAssocAttr> <ldapLoginFilter>(&amp;(|(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": "showPassword",
+ "in": "query",
+ "description": "Whether to show the password",
+ "schema": {
+ "type": "integer",
+ "default": 0
+ }
+ },
+ {
+ "name": "configID",
+ "in": "path",
+ "description": "ID of the config",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "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": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "put": {
+ "operationId": "configapi-modify",
+ "summary": "Modify a configuration",
+ "description": "This endpoint requires admin access",
+ "tags": [
+ "configapi"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "configData",
+ "in": "query",
+ "description": "New config",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "configID",
+ "in": "path",
+ "description": "ID of the config",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "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": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Config not found",
+ "content": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "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",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "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": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "tags": []
+} \ No newline at end of file
diff --git a/apps/user_ldap/tests/LDAPProviderTest.php b/apps/user_ldap/tests/LDAPProviderTest.php
index 8a071119d16..3e34ce7bdbb 100644
--- a/apps/user_ldap/tests/LDAPProviderTest.php
+++ b/apps/user_ldap/tests/LDAPProviderTest.php
@@ -39,7 +39,6 @@ use OCP\EventDispatcher\IEventDispatcher;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IServerContainer;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
/**
* Class LDAPProviderTest
@@ -76,7 +75,6 @@ class LDAPProviderTest extends \Test\TestCase {
->setMethods(['getBackends'])
->setConstructorArgs([
$this->createMock(IConfig::class),
- $this->createMock(EventDispatcherInterface::class),
$this->createMock(ICacheFactory::class),
$this->createMock(IEventDispatcher::class),
])
diff --git a/apps/user_ldap/tests/Jobs/UpdateGroupsTest.php b/apps/user_ldap/tests/Service/UpdateGroupsServiceTest.php
index 22a02451e27..abf9c57c9c1 100644
--- a/apps/user_ldap/tests/Jobs/UpdateGroupsTest.php
+++ b/apps/user_ldap/tests/Service/UpdateGroupsServiceTest.php
@@ -6,6 +6,7 @@ declare(strict_types=1);
* @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Côme Chilliet <come.chilliet@nextcloud.com>
* @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
@@ -24,19 +25,17 @@ declare(strict_types=1);
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-namespace OCA\user_ldap\tests\Jobs;
+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\Jobs\UpdateGroups;
+use OCA\User_LDAP\Service\UpdateGroupsService;
use OCP\AppFramework\Utility\ITimeFactory;
-use OCP\DB\IResult;
-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\IConfig;
-use OCP\IDBConnection;
use OCP\IGroup;
use OCP\IGroupManager;
use OCP\IUser;
@@ -44,10 +43,8 @@ use OCP\IUserManager;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
use Test\TestCase;
-use function serialize;
-
-class UpdateGroupsTest extends TestCase {
+class UpdateGroupsServiceTest extends TestCase {
/** @var Group_Proxy|MockObject */
protected $groupBackend;
/** @var IEventDispatcher|MockObject */
@@ -58,14 +55,14 @@ class UpdateGroupsTest extends TestCase {
protected $userManager;
/** @var LoggerInterface|MockObject */
protected $logger;
- /** @var IDBConnection|MockObject */
- protected $dbc;
+ /** @var GroupMembershipMapper|MockObject */
+ protected $groupMembershipMapper;
/** @var IConfig|MockObject */
protected $config;
/** @var ITimeFactory|MockObject */
protected $timeFactory;
- protected UpdateGroups $updateGroupsJob;
+ protected UpdateGroupsService $updateGroupsService;
public function setUp(): void {
$this->groupBackend = $this->createMock(Group_Proxy::class);
@@ -73,17 +70,17 @@ class UpdateGroupsTest extends TestCase {
$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->groupMembershipMapper = $this->createMock(GroupMembershipMapper::class);
$this->config = $this->createMock(IConfig::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
- $this->updateGroupsJob = new UpdateGroups(
+ $this->updateGroupsService = new UpdateGroupsService(
$this->groupBackend,
$this->dispatcher,
$this->groupManager,
$this->userManager,
$this->logger,
- $this->dbc,
+ $this->groupMembershipMapper,
$this->config,
$this->timeFactory
);
@@ -91,12 +88,12 @@ class UpdateGroupsTest extends TestCase {
public function testHandleKnownGroups(): void {
$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'])
+ '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) {
@@ -115,45 +112,20 @@ class UpdateGroupsTest extends TestCase {
];
$groups = array_intersect(array_keys($knownGroups), array_keys($actualGroups));
- /** @var IQueryBuilder|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('executeStatement');
- $updateQb->expects($this->any())
- ->method('expr')
- ->willReturn($this->createMock(IExpressionBuilder::class));
-
- $stmt = $this->createMock(IResult::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('executeQuery')
- ->willReturn($stmt);
-
- $this->dbc->expects($this->any())
- ->method('getQueryBuilder')
- ->willReturnOnConsecutiveCalls($updateQb, $selectQb);
+ $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')
@@ -192,7 +164,7 @@ class UpdateGroupsTest extends TestCase {
}
});
- $this->invokePrivate($this->updateGroupsJob, 'handleKnownGroups', [$groups]);
+ $this->updateGroupsService->handleKnownGroups($groups);
$this->assertSame(2, $removedEvents);
$this->assertSame(2, $addedEvents);