Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/accessibility/l10n/vi.js4
-rw-r--r--apps/accessibility/l10n/vi.json4
-rw-r--r--apps/admin_audit/l10n/pt_BR.js2
-rw-r--r--apps/admin_audit/l10n/pt_BR.json2
-rw-r--r--apps/comments/l10n/hu.js7
-rw-r--r--apps/comments/l10n/hu.json7
-rw-r--r--apps/dashboard/l10n/cs.js2
-rw-r--r--apps/dashboard/l10n/cs.json2
-rw-r--r--apps/dashboard/l10n/da.js34
-rw-r--r--apps/dashboard/l10n/da.json32
-rw-r--r--apps/dav/lib/CalDAV/BirthdayService.php20
-rw-r--r--apps/dav/lib/CalDAV/Schedule/IMipPlugin.php14
-rw-r--r--apps/dav/lib/CardDAV/Converter.php4
-rw-r--r--apps/dav/tests/unit/CardDAV/ConverterTest.php14
-rw-r--r--apps/dav/tests/unit/CardDAV/SyncServiceTest.php14
-rw-r--r--apps/federation/l10n/hu.js12
-rw-r--r--apps/federation/l10n/hu.json12
-rw-r--r--apps/files/l10n/es.js6
-rw-r--r--apps/files/l10n/es.json6
-rw-r--r--apps/files/l10n/pt_BR.js2
-rw-r--r--apps/files/l10n/pt_BR.json2
-rw-r--r--apps/files/l10n/sl.js6
-rw-r--r--apps/files/l10n/sl.json6
-rw-r--r--apps/files/l10n/vi.js2
-rw-r--r--apps/files/l10n/vi.json2
-rw-r--r--apps/files_external/3rdparty/.gitignore3
-rw-r--r--apps/files_external/3rdparty/composer.json4
-rw-r--r--apps/files_external/3rdparty/composer.lock50
-rw-r--r--apps/files_external/3rdparty/composer/ClassLoader.php40
-rw-r--r--apps/files_external/3rdparty/composer/InstalledVersions.php301
-rw-r--r--apps/files_external/3rdparty/composer/autoload_classmap.php8
-rw-r--r--apps/files_external/3rdparty/composer/autoload_psr4.php1
-rw-r--r--apps/files_external/3rdparty/composer/autoload_real.php6
-rw-r--r--apps/files_external/3rdparty/composer/autoload_static.php13
-rw-r--r--apps/files_external/3rdparty/composer/installed.json190
-rw-r--r--apps/files_external/3rdparty/composer/installed.php42
-rw-r--r--apps/files_external/3rdparty/composer/platform_check.php26
-rw-r--r--apps/files_external/3rdparty/icewind/smb/.gitignore1
-rw-r--r--apps/files_external/3rdparty/icewind/smb/README.md20
-rw-r--r--apps/files_external/3rdparty/icewind/smb/composer.json62
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/ACL.php3
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/AbstractServer.php30
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/AbstractShare.php12
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/AnonymousAuth.php10
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/BasicAuth.php21
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Change.php21
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php28
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidRequestException.php8
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Exception/RevisionMismatchException.php2
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/IAuth.php19
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/IFileInfo.php45
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php8
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/IOptions.php20
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/IServer.php39
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/IShare.php83
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/ISystem.php34
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/ITimeZoneProvider.php2
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/KerberosAuth.php10
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php104
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Native/NativeReadStream.php59
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Native/NativeServer.php29
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php133
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php124
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Native/NativeStream.php48
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Native/NativeWriteStream.php50
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Options.php25
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/ServerFactory.php6
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/StringBuffer.php63
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/System.php20
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php2
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php49
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Wrapped/FileInfo.php75
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php34
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Wrapped/Parser.php120
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php74
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Wrapped/Server.php31
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php226
-rw-r--r--apps/files_external/3rdparty/icewind/streams/.gitignore3
-rw-r--r--apps/files_external/3rdparty/icewind/streams/.travis.yml24
-rw-r--r--apps/files_external/3rdparty/icewind/streams/README.md7
-rw-r--r--apps/files_external/3rdparty/icewind/streams/composer.json29
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php46
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/CountWrapper.php15
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/Directory.php2
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/DirectoryFilter.php17
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/DirectoryWrapper.php49
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/File.php10
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/HashWrapper.php78
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/IteratorDirectory.php42
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/NullWrapper.php18
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/Path.php4
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php6
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/ReadHashWrapper.php40
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/RetryWrapper.php22
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/SeekableWrapper.php25
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/Url.php6
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/UrlCallback.php (renamed from apps/files_external/3rdparty/icewind/streams/src/UrlCallBack.php)60
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/Wrapper.php61
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/WrapperHandler.php114
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/WriteHashWrapper.php37
-rw-r--r--apps/files_sharing/l10n/de.js1
-rw-r--r--apps/files_sharing/l10n/de.json1
-rw-r--r--apps/files_sharing/l10n/es.js1
-rw-r--r--apps/files_sharing/l10n/es.json1
-rw-r--r--apps/files_sharing/l10n/it.js1
-rw-r--r--apps/files_sharing/l10n/it.json1
-rw-r--r--apps/files_sharing/lib/Controller/ShareController.php2
-rw-r--r--apps/files_sharing/tests/Controller/ShareControllerTest.php8
-rw-r--r--apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php2
-rw-r--r--apps/provisioning_api/composer/composer/autoload_classmap.php1
-rw-r--r--apps/provisioning_api/composer/composer/autoload_static.php1
-rw-r--r--apps/provisioning_api/lib/AppInfo/Application.php2
-rw-r--r--apps/provisioning_api/lib/Capabilities.php62
-rw-r--r--apps/provisioning_api/lib/Controller/AUserData.php35
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php83
-rw-r--r--apps/provisioning_api/tests/CapabilitiesTest.php92
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php212
-rw-r--r--apps/settings/js/federationscopemenu.js45
-rw-r--r--apps/settings/js/federationsettingsview.js39
-rw-r--r--apps/settings/js/settings/personalInfo.js6
-rw-r--r--apps/settings/js/usersettings.js8
-rw-r--r--apps/settings/l10n/ar.js4
-rw-r--r--apps/settings/l10n/ar.json4
-rw-r--r--apps/settings/l10n/ast.js2
-rw-r--r--apps/settings/l10n/ast.json2
-rw-r--r--apps/settings/l10n/az.js2
-rw-r--r--apps/settings/l10n/az.json2
-rw-r--r--apps/settings/l10n/bg.js4
-rw-r--r--apps/settings/l10n/bg.json4
-rw-r--r--apps/settings/l10n/br.js10
-rw-r--r--apps/settings/l10n/br.json10
-rw-r--r--apps/settings/l10n/bs.js4
-rw-r--r--apps/settings/l10n/bs.json4
-rw-r--r--apps/settings/l10n/ca.js8
-rw-r--r--apps/settings/l10n/ca.json8
-rw-r--r--apps/settings/l10n/cs.js26
-rw-r--r--apps/settings/l10n/cs.json26
-rw-r--r--apps/settings/l10n/da.js4
-rw-r--r--apps/settings/l10n/da.json4
-rw-r--r--apps/settings/l10n/de.js12
-rw-r--r--apps/settings/l10n/de.json12
-rw-r--r--apps/settings/l10n/de_DE.js16
-rw-r--r--apps/settings/l10n/de_DE.json16
-rw-r--r--apps/settings/l10n/el.js8
-rw-r--r--apps/settings/l10n/el.json8
-rw-r--r--apps/settings/l10n/en_GB.js4
-rw-r--r--apps/settings/l10n/en_GB.json4
-rw-r--r--apps/settings/l10n/eo.js4
-rw-r--r--apps/settings/l10n/eo.json4
-rw-r--r--apps/settings/l10n/es.js20
-rw-r--r--apps/settings/l10n/es.json20
-rw-r--r--apps/settings/l10n/es_419.js4
-rw-r--r--apps/settings/l10n/es_419.json4
-rw-r--r--apps/settings/l10n/es_AR.js4
-rw-r--r--apps/settings/l10n/es_AR.json4
-rw-r--r--apps/settings/l10n/es_CL.js4
-rw-r--r--apps/settings/l10n/es_CL.json4
-rw-r--r--apps/settings/l10n/es_CO.js4
-rw-r--r--apps/settings/l10n/es_CO.json4
-rw-r--r--apps/settings/l10n/es_CR.js4
-rw-r--r--apps/settings/l10n/es_CR.json4
-rw-r--r--apps/settings/l10n/es_DO.js4
-rw-r--r--apps/settings/l10n/es_DO.json4
-rw-r--r--apps/settings/l10n/es_EC.js4
-rw-r--r--apps/settings/l10n/es_EC.json4
-rw-r--r--apps/settings/l10n/es_GT.js4
-rw-r--r--apps/settings/l10n/es_GT.json4
-rw-r--r--apps/settings/l10n/es_HN.js4
-rw-r--r--apps/settings/l10n/es_HN.json4
-rw-r--r--apps/settings/l10n/es_MX.js4
-rw-r--r--apps/settings/l10n/es_MX.json4
-rw-r--r--apps/settings/l10n/es_NI.js4
-rw-r--r--apps/settings/l10n/es_NI.json4
-rw-r--r--apps/settings/l10n/es_PA.js4
-rw-r--r--apps/settings/l10n/es_PA.json4
-rw-r--r--apps/settings/l10n/es_PE.js4
-rw-r--r--apps/settings/l10n/es_PE.json4
-rw-r--r--apps/settings/l10n/es_PR.js4
-rw-r--r--apps/settings/l10n/es_PR.json4
-rw-r--r--apps/settings/l10n/es_PY.js4
-rw-r--r--apps/settings/l10n/es_PY.json4
-rw-r--r--apps/settings/l10n/es_SV.js4
-rw-r--r--apps/settings/l10n/es_SV.json4
-rw-r--r--apps/settings/l10n/es_UY.js4
-rw-r--r--apps/settings/l10n/es_UY.json4
-rw-r--r--apps/settings/l10n/et_EE.js4
-rw-r--r--apps/settings/l10n/et_EE.json4
-rw-r--r--apps/settings/l10n/eu.js6
-rw-r--r--apps/settings/l10n/eu.json6
-rw-r--r--apps/settings/l10n/fa.js4
-rw-r--r--apps/settings/l10n/fa.json4
-rw-r--r--apps/settings/l10n/fi.js8
-rw-r--r--apps/settings/l10n/fi.json8
-rw-r--r--apps/settings/l10n/fo.js4
-rw-r--r--apps/settings/l10n/fo.json4
-rw-r--r--apps/settings/l10n/fr.js8
-rw-r--r--apps/settings/l10n/fr.json8
-rw-r--r--apps/settings/l10n/gl.js10
-rw-r--r--apps/settings/l10n/gl.json10
-rw-r--r--apps/settings/l10n/he.js8
-rw-r--r--apps/settings/l10n/he.json8
-rw-r--r--apps/settings/l10n/hr.js8
-rw-r--r--apps/settings/l10n/hr.json8
-rw-r--r--apps/settings/l10n/hu.js10
-rw-r--r--apps/settings/l10n/hu.json10
-rw-r--r--apps/settings/l10n/ia.js4
-rw-r--r--apps/settings/l10n/ia.json4
-rw-r--r--apps/settings/l10n/id.js4
-rw-r--r--apps/settings/l10n/id.json4
-rw-r--r--apps/settings/l10n/is.js4
-rw-r--r--apps/settings/l10n/is.json4
-rw-r--r--apps/settings/l10n/it.js19
-rw-r--r--apps/settings/l10n/it.json19
-rw-r--r--apps/settings/l10n/ja.js10
-rw-r--r--apps/settings/l10n/ja.json10
-rw-r--r--apps/settings/l10n/ka_GE.js4
-rw-r--r--apps/settings/l10n/ka_GE.json4
-rw-r--r--apps/settings/l10n/ko.js4
-rw-r--r--apps/settings/l10n/ko.json4
-rw-r--r--apps/settings/l10n/lt_LT.js9
-rw-r--r--apps/settings/l10n/lt_LT.json9
-rw-r--r--apps/settings/l10n/lv.js4
-rw-r--r--apps/settings/l10n/lv.json4
-rw-r--r--apps/settings/l10n/mk.js8
-rw-r--r--apps/settings/l10n/mk.json8
-rw-r--r--apps/settings/l10n/mn.js4
-rw-r--r--apps/settings/l10n/mn.json4
-rw-r--r--apps/settings/l10n/nb.js10
-rw-r--r--apps/settings/l10n/nb.json10
-rw-r--r--apps/settings/l10n/nl.js16
-rw-r--r--apps/settings/l10n/nl.json16
-rw-r--r--apps/settings/l10n/oc.js8
-rw-r--r--apps/settings/l10n/oc.json8
-rw-r--r--apps/settings/l10n/pl.js16
-rw-r--r--apps/settings/l10n/pl.json16
-rw-r--r--apps/settings/l10n/pt_BR.js36
-rw-r--r--apps/settings/l10n/pt_BR.json36
-rw-r--r--apps/settings/l10n/pt_PT.js4
-rw-r--r--apps/settings/l10n/pt_PT.json4
-rw-r--r--apps/settings/l10n/ro.js4
-rw-r--r--apps/settings/l10n/ro.json4
-rw-r--r--apps/settings/l10n/ru.js8
-rw-r--r--apps/settings/l10n/ru.json8
-rw-r--r--apps/settings/l10n/sk.js8
-rw-r--r--apps/settings/l10n/sk.json8
-rw-r--r--apps/settings/l10n/sl.js15
-rw-r--r--apps/settings/l10n/sl.json15
-rw-r--r--apps/settings/l10n/sq.js4
-rw-r--r--apps/settings/l10n/sq.json4
-rw-r--r--apps/settings/l10n/sr.js8
-rw-r--r--apps/settings/l10n/sr.json8
-rw-r--r--apps/settings/l10n/sv.js10
-rw-r--r--apps/settings/l10n/sv.json10
-rw-r--r--apps/settings/l10n/th.js2
-rw-r--r--apps/settings/l10n/th.json2
-rw-r--r--apps/settings/l10n/tr.js16
-rw-r--r--apps/settings/l10n/tr.json16
-rw-r--r--apps/settings/l10n/uk.js10
-rw-r--r--apps/settings/l10n/uk.json10
-rw-r--r--apps/settings/l10n/vi.js2
-rw-r--r--apps/settings/l10n/vi.json2
-rw-r--r--apps/settings/l10n/zh_CN.js16
-rw-r--r--apps/settings/l10n/zh_CN.json16
-rw-r--r--apps/settings/l10n/zh_HK.js16
-rw-r--r--apps/settings/l10n/zh_HK.json16
-rw-r--r--apps/settings/l10n/zh_TW.js18
-rw-r--r--apps/settings/l10n/zh_TW.json18
-rw-r--r--apps/settings/lib/Controller/UsersController.php15
-rw-r--r--apps/settings/lib/Settings/Personal/PersonalInfo.php43
-rw-r--r--apps/settings/templates/settings/admin/sharing.php4
-rw-r--r--apps/settings/templates/settings/personal/personal.info.php38
-rw-r--r--apps/settings/tests/Controller/UsersControllerTest.php29
-rw-r--r--apps/sharebymail/l10n/cs.js2
-rw-r--r--apps/sharebymail/l10n/cs.json2
-rw-r--r--apps/sharebymail/l10n/de.js1
-rw-r--r--apps/sharebymail/l10n/de.json1
-rw-r--r--apps/sharebymail/l10n/it.js1
-rw-r--r--apps/sharebymail/l10n/it.json1
-rw-r--r--apps/sharebymail/l10n/pt_BR.js2
-rw-r--r--apps/sharebymail/l10n/pt_BR.json2
-rw-r--r--apps/updatenotification/l10n/cs.js4
-rw-r--r--apps/updatenotification/l10n/cs.json4
-rw-r--r--apps/updatenotification/l10n/it.js5
-rw-r--r--apps/updatenotification/l10n/it.json5
-rw-r--r--apps/user_ldap/l10n/de_DE.js8
-rw-r--r--apps/user_ldap/l10n/de_DE.json8
-rw-r--r--apps/workflowengine/l10n/hu.js50
-rw-r--r--apps/workflowengine/l10n/hu.json50
-rw-r--r--build/integration/features/bootstrap/Provisioning.php6
-rw-r--r--build/integration/features/provisioning-v1.feature77
-rw-r--r--build/psalm-baseline.xml8
-rw-r--r--config/config.sample.php11
-rw-r--r--core/Application.php4
-rw-r--r--core/Command/Db/AddMissingIndices.php7
-rw-r--r--core/Controller/SearchController.php1
-rw-r--r--core/Migrations/Version13000Date20170718121200.php1
-rwxr-xr-xcore/img/caldav/attendees.pngbin0 -> 446 bytes
-rwxr-xr-xcore/img/caldav/description.pngbin0 -> 166 bytes
-rwxr-xr-xcore/img/caldav/link.pngbin0 -> 412 bytes
-rwxr-xr-xcore/img/caldav/location.pngbin0 -> 358 bytes
-rwxr-xr-xcore/img/caldav/organizer.pngbin0 -> 337 bytes
-rwxr-xr-xcore/img/caldav/time.pngbin0 -> 243 bytes
-rwxr-xr-xcore/img/caldav/title.pngbin0 -> 160 bytes
-rw-r--r--core/l10n/ar.js76
-rw-r--r--core/l10n/ar.json76
-rw-r--r--core/l10n/cs.js14
-rw-r--r--core/l10n/cs.json14
-rw-r--r--core/l10n/de.js2
-rw-r--r--core/l10n/de.json2
-rw-r--r--core/l10n/hu.js45
-rw-r--r--core/l10n/hu.json45
-rw-r--r--core/l10n/pl.js2
-rw-r--r--core/l10n/pl.json2
-rw-r--r--core/l10n/pt_BR.js4
-rw-r--r--core/l10n/pt_BR.json4
-rw-r--r--core/l10n/sl.js3
-rw-r--r--core/l10n/sl.json3
-rw-r--r--core/l10n/vi.js2
-rw-r--r--core/l10n/vi.json2
-rw-r--r--lib/composer/composer/autoload_classmap.php2
-rw-r--r--lib/composer/composer/autoload_static.php2
-rw-r--r--lib/l10n/cs.js4
-rw-r--r--lib/l10n/cs.json4
-rw-r--r--lib/l10n/de_DE.js14
-rw-r--r--lib/l10n/de_DE.json14
-rw-r--r--lib/l10n/es.js1
-rw-r--r--lib/l10n/es.json1
-rw-r--r--lib/l10n/pl.js2
-rw-r--r--lib/l10n/pl.json2
-rw-r--r--lib/private/Accounts/AccountManager.php70
-rw-r--r--lib/private/Accounts/AccountProperty.php22
-rw-r--r--lib/private/Avatar/AvatarManager.php44
-rw-r--r--lib/private/Avatar/PlaceholderAvatar.php183
-rw-r--r--lib/private/Avatar/UserAvatar.php1
-rw-r--r--lib/private/DB/MigrationService.php6
-rw-r--r--lib/private/Files/Storage/Local.php12
-rw-r--r--lib/private/Files/View.php2
-rw-r--r--lib/private/KnownUser/KnownUserService.php4
-rw-r--r--lib/private/LDAP/NullLDAPProviderFactory.php36
-rw-r--r--lib/private/Server.php21
-rw-r--r--lib/private/Share20/DefaultShareProvider.php3
-rw-r--r--lib/private/Share20/Manager.php3
-rw-r--r--lib/public/Accounts/IAccountManager.php59
-rw-r--r--lib/public/LDAP/ILDAPProviderFactory.php2
-rw-r--r--tests/lib/Accounts/AccountManagerTest.php135
-rw-r--r--tests/lib/Accounts/AccountPropertyTest.php49
-rw-r--r--tests/lib/Accounts/AccountTest.php36
-rw-r--r--tests/lib/Avatar/AvatarManagerTest.php135
-rw-r--r--tests/lib/Share20/DefaultShareProviderTest.php3
349 files changed, 4484 insertions, 2179 deletions
diff --git a/apps/accessibility/l10n/vi.js b/apps/accessibility/l10n/vi.js
index 2e45af02e86..07bfe5c3a66 100644
--- a/apps/accessibility/l10n/vi.js
+++ b/apps/accessibility/l10n/vi.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"Accessibility" : "Khả năng tiếp cận",
"Accessibility options for nextcloud" : "Tùy chọn truy cập cho nextcloud",
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Cung cấp nhiều tùy chọn truy cập để dễ dàng sử dụng Nextcloud",
- "Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Truy cập đa dạng là rất quan trọng với chúng tôi. Chúng tôi tuân theo các tiêu chuẩn mạng và kiểm tra để khiến mọi thứ đều có thể sử dụng được ngay cả khi không có chuột, và hỗ trợ những phần mềm hỗ trợ như đọc màn hình. Chúng tôi hướng đến sự tương thích với {guidelines}Nguyên Tắc Truy Cập Cho Nội Dung Mạng{linkend} 2.1 ở cấp độ AA, với chế độ tương phản cao là AAA",
- "If you find any issues, don’t hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Nếu bạn tìm được bất cứ vấn đề gì, đừng ngần ngại để báo cáo chúng trên {issuetracker} hệ thống theo dõi vấn đề của chúng tôi{linkend}. Và nếu bạn muốn can thiệp, hãy gia nhập {designteam}đội ngũ thiết kế{linkend}!"
+ "Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Truy cập đa dạng là rất quan trọng với chúng tôi. Chúng tôi tuân theo các tiêu chuẩn mạng và kiểm tra để khiến mọi thứ đều có thể sử dụng được ngay cả khi không có chuột, và hỗ trợ những phần mềm hỗ trợ như đọc màn hình. Chúng tôi hướng đến sự tương thích với Nguyên Tắc Truy Cập Cho Nội Dung Mạng 2.1 ở cấp độ AA, với chế độ tương phản cao là AAA",
+ "If you find any issues, don’t hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Nếu bạn tìm được bất cứ vấn đề gì, đừng ngần ngại để báo cáo chúng trên hệ thống theo dõi vấn đề của chúng tôi."
},
"nplurals=1; plural=0;");
diff --git a/apps/accessibility/l10n/vi.json b/apps/accessibility/l10n/vi.json
index aedb0faf9e4..257abfd0ffa 100644
--- a/apps/accessibility/l10n/vi.json
+++ b/apps/accessibility/l10n/vi.json
@@ -11,7 +11,7 @@
"Accessibility" : "Khả năng tiếp cận",
"Accessibility options for nextcloud" : "Tùy chọn truy cập cho nextcloud",
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Cung cấp nhiều tùy chọn truy cập để dễ dàng sử dụng Nextcloud",
- "Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Truy cập đa dạng là rất quan trọng với chúng tôi. Chúng tôi tuân theo các tiêu chuẩn mạng và kiểm tra để khiến mọi thứ đều có thể sử dụng được ngay cả khi không có chuột, và hỗ trợ những phần mềm hỗ trợ như đọc màn hình. Chúng tôi hướng đến sự tương thích với {guidelines}Nguyên Tắc Truy Cập Cho Nội Dung Mạng{linkend} 2.1 ở cấp độ AA, với chế độ tương phản cao là AAA",
- "If you find any issues, don’t hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Nếu bạn tìm được bất cứ vấn đề gì, đừng ngần ngại để báo cáo chúng trên {issuetracker} hệ thống theo dõi vấn đề của chúng tôi{linkend}. Và nếu bạn muốn can thiệp, hãy gia nhập {designteam}đội ngũ thiết kế{linkend}!"
+ "Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Truy cập đa dạng là rất quan trọng với chúng tôi. Chúng tôi tuân theo các tiêu chuẩn mạng và kiểm tra để khiến mọi thứ đều có thể sử dụng được ngay cả khi không có chuột, và hỗ trợ những phần mềm hỗ trợ như đọc màn hình. Chúng tôi hướng đến sự tương thích với Nguyên Tắc Truy Cập Cho Nội Dung Mạng 2.1 ở cấp độ AA, với chế độ tương phản cao là AAA",
+ "If you find any issues, don’t hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Nếu bạn tìm được bất cứ vấn đề gì, đừng ngần ngại để báo cáo chúng trên hệ thống theo dõi vấn đề của chúng tôi."
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/admin_audit/l10n/pt_BR.js b/apps/admin_audit/l10n/pt_BR.js
index 535d25025c7..03736d2b309 100644
--- a/apps/admin_audit/l10n/pt_BR.js
+++ b/apps/admin_audit/l10n/pt_BR.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"admin_audit",
{
- "Auditing / Logging" : "Auditoria/Registro",
+ "Auditing / Logging" : "Auditoria / Registro",
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Fornece recursos de registro para Nextcloud, como registros de acesso a arquivos ou outras ações confidenciais."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/admin_audit/l10n/pt_BR.json b/apps/admin_audit/l10n/pt_BR.json
index 0c6a29620e7..392c961c5c4 100644
--- a/apps/admin_audit/l10n/pt_BR.json
+++ b/apps/admin_audit/l10n/pt_BR.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Auditing / Logging" : "Auditoria/Registro",
+ "Auditing / Logging" : "Auditoria / Registro",
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Fornece recursos de registro para Nextcloud, como registros de acesso a arquivos ou outras ações confidenciais."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/comments/l10n/hu.js b/apps/comments/l10n/hu.js
index 119a8dc439f..13a5caa4f0e 100644
--- a/apps/comments/l10n/hu.js
+++ b/apps/comments/l10n/hu.js
@@ -15,12 +15,19 @@ OC.L10N.register(
"Files app plugin to add comments to files" : "A Fájlok alkalmazás bővítménye, amellyel megjegyzések adhatóak a fájlokhoz",
"Edit comment" : "Hozzászólás szerkesztése",
"Delete comment" : "Hozzászólás törlése",
+ "Cancel edit" : "Változások elvetése",
+ "Post comment" : "Hozzászólás közzététele",
"No comments yet, start the conversation!" : "Még nincsenek hozzászólások, kezdje el a beszélgetést!",
+ "No more messages" : "Nincs több üzenet",
"Retry" : "Újra",
+ "Unable to load the comments list" : "A megjegyzések listájának betöltése sikertelen",
"_%n unread comment_::_%n unread comments_" : ["%n olvasatlan hozzászólás","%n olvasatlan hozzászólás"],
"_1 new comment_::_{unread} new comments_" : ["1 új hozzászólás","{unread} új hozzászólás"],
"Comment" : "Hozzászólás",
+ "An error occurred while trying to edit the comment" : "Hiba történt a megjegyzés szerkesztése közben",
"Comment deleted" : "Hozzászólás törölve",
+ "An error occurred while trying to delete the comment" : "Hiba történt a megjegyzés törlése közben",
+ "An error occurred while trying to create the comment" : "Hiba történt a megjegyzés létrehozása közben",
"New comment …" : "Új hozzászólás…",
"Post" : "Küldés",
"Cancel" : "Mégse",
diff --git a/apps/comments/l10n/hu.json b/apps/comments/l10n/hu.json
index b48f76d0fb3..56cf7cf1688 100644
--- a/apps/comments/l10n/hu.json
+++ b/apps/comments/l10n/hu.json
@@ -13,12 +13,19 @@
"Files app plugin to add comments to files" : "A Fájlok alkalmazás bővítménye, amellyel megjegyzések adhatóak a fájlokhoz",
"Edit comment" : "Hozzászólás szerkesztése",
"Delete comment" : "Hozzászólás törlése",
+ "Cancel edit" : "Változások elvetése",
+ "Post comment" : "Hozzászólás közzététele",
"No comments yet, start the conversation!" : "Még nincsenek hozzászólások, kezdje el a beszélgetést!",
+ "No more messages" : "Nincs több üzenet",
"Retry" : "Újra",
+ "Unable to load the comments list" : "A megjegyzések listájának betöltése sikertelen",
"_%n unread comment_::_%n unread comments_" : ["%n olvasatlan hozzászólás","%n olvasatlan hozzászólás"],
"_1 new comment_::_{unread} new comments_" : ["1 új hozzászólás","{unread} új hozzászólás"],
"Comment" : "Hozzászólás",
+ "An error occurred while trying to edit the comment" : "Hiba történt a megjegyzés szerkesztése közben",
"Comment deleted" : "Hozzászólás törölve",
+ "An error occurred while trying to delete the comment" : "Hiba történt a megjegyzés törlése közben",
+ "An error occurred while trying to create the comment" : "Hiba történt a megjegyzés létrehozása közben",
"New comment …" : "Új hozzászólás…",
"Post" : "Küldés",
"Cancel" : "Mégse",
diff --git a/apps/dashboard/l10n/cs.js b/apps/dashboard/l10n/cs.js
index 3f8710026ce..ff05544c45b 100644
--- a/apps/dashboard/l10n/cs.js
+++ b/apps/dashboard/l10n/cs.js
@@ -4,7 +4,7 @@ OC.L10N.register(
"Dashboard" : "Nástěnka",
"Dashboard app" : "Aplikace Nástěnka",
"Show something" : "Zobrazit něco",
- "Customize" : "Přizpůsobit",
+ "Customize" : "Přizpůsobit si",
"Edit widgets" : "Upravit ovládací prvky",
"Get more widgets from the app store" : "Získejte další ovládací prvky z katalogu aplikací",
"Change background image" : "Změnit obrázek na pozadí",
diff --git a/apps/dashboard/l10n/cs.json b/apps/dashboard/l10n/cs.json
index 5896ce0ec37..6fa72173506 100644
--- a/apps/dashboard/l10n/cs.json
+++ b/apps/dashboard/l10n/cs.json
@@ -2,7 +2,7 @@
"Dashboard" : "Nástěnka",
"Dashboard app" : "Aplikace Nástěnka",
"Show something" : "Zobrazit něco",
- "Customize" : "Přizpůsobit",
+ "Customize" : "Přizpůsobit si",
"Edit widgets" : "Upravit ovládací prvky",
"Get more widgets from the app store" : "Získejte další ovládací prvky z katalogu aplikací",
"Change background image" : "Změnit obrázek na pozadí",
diff --git a/apps/dashboard/l10n/da.js b/apps/dashboard/l10n/da.js
new file mode 100644
index 00000000000..0c5cc013be1
--- /dev/null
+++ b/apps/dashboard/l10n/da.js
@@ -0,0 +1,34 @@
+OC.L10N.register(
+ "dashboard",
+ {
+ "Dashboard" : "Dashboard",
+ "Dashboard app" : "Dashboard app",
+ "Show something" : "Vis noget",
+ "Customize" : "Tilpas",
+ "Edit widgets" : "Redigér widgets",
+ "Get more widgets from the app store" : "Hent flere widgets fra app store",
+ "Change background image" : "Ændre baggrund",
+ "Weather service" : "Vejret",
+ "For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Af hensyn til dit privatliv, er det din Nextcloud-server der henter vejr-data og udbyderen modtager således ingen oplysninger om dig.",
+ "Weather data from Met.no" : "Vejr-data leveres af Met.no",
+ "geocoding with Nominatim" : "Geocoding med Nominatim",
+ "elevation data from OpenTopoData" : "Højde-data fra OpenTopoData",
+ "Weather" : "Vejr",
+ "Status" : "Status",
+ "Good morning" : "God morgen",
+ "Good morning, {name}" : "God morgen {name}",
+ "Good afternoon" : "God eftermiddag",
+ "Good afternoon, {name}" : "God eftermiddag {name}",
+ "Good evening" : "God aften",
+ "Good evening, {name}" : "God aften {name}",
+ "Hello" : "Hej",
+ "Hello, {name}" : "Hej {name}",
+ "Pick from Files" : "Vælg fra Filer",
+ "Default images" : "Standardbilleder",
+ "Plain background" : "Standard baggrund",
+ "Insert from {productName}" : "Indsæt fra {productName}",
+ "Good night, {name}" : "Godnat {name}",
+ "Good night" : "Godnat",
+ "Pick from files" : "Vælg fra Filer"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/dashboard/l10n/da.json b/apps/dashboard/l10n/da.json
new file mode 100644
index 00000000000..622ad2929d2
--- /dev/null
+++ b/apps/dashboard/l10n/da.json
@@ -0,0 +1,32 @@
+{ "translations": {
+ "Dashboard" : "Dashboard",
+ "Dashboard app" : "Dashboard app",
+ "Show something" : "Vis noget",
+ "Customize" : "Tilpas",
+ "Edit widgets" : "Redigér widgets",
+ "Get more widgets from the app store" : "Hent flere widgets fra app store",
+ "Change background image" : "Ændre baggrund",
+ "Weather service" : "Vejret",
+ "For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Af hensyn til dit privatliv, er det din Nextcloud-server der henter vejr-data og udbyderen modtager således ingen oplysninger om dig.",
+ "Weather data from Met.no" : "Vejr-data leveres af Met.no",
+ "geocoding with Nominatim" : "Geocoding med Nominatim",
+ "elevation data from OpenTopoData" : "Højde-data fra OpenTopoData",
+ "Weather" : "Vejr",
+ "Status" : "Status",
+ "Good morning" : "God morgen",
+ "Good morning, {name}" : "God morgen {name}",
+ "Good afternoon" : "God eftermiddag",
+ "Good afternoon, {name}" : "God eftermiddag {name}",
+ "Good evening" : "God aften",
+ "Good evening, {name}" : "God aften {name}",
+ "Hello" : "Hej",
+ "Hello, {name}" : "Hej {name}",
+ "Pick from Files" : "Vælg fra Filer",
+ "Default images" : "Standardbilleder",
+ "Plain background" : "Standard baggrund",
+ "Insert from {productName}" : "Indsæt fra {productName}",
+ "Good night, {name}" : "Godnat {name}",
+ "Good night" : "Godnat",
+ "Pick from files" : "Vælg fra Filer"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dav/lib/CalDAV/BirthdayService.php b/apps/dav/lib/CalDAV/BirthdayService.php
index e9f4787a328..fc525934f15 100644
--- a/apps/dav/lib/CalDAV/BirthdayService.php
+++ b/apps/dav/lib/CalDAV/BirthdayService.php
@@ -381,12 +381,26 @@ class BirthdayService {
$objectUri = $book['uri'] . '-' . $cardUri . $type['postfix'] . '.ics';
$calendarData = $this->buildDateFromContact($cardData, $type['field'], $type['postfix']);
$existing = $this->calDavBackEnd->getCalendarObject($calendarId, $objectUri);
- if (is_null($calendarData)) {
- if (!is_null($existing)) {
+ if ($calendarData === null) {
+ if ($existing !== null) {
$this->calDavBackEnd->deleteCalendarObject($calendarId, $objectUri);
}
} else {
- if (is_null($existing)) {
+ if ($existing === null) {
+ // not found by URI, but maybe by UID
+ // happens when a contact with birthday is moved to a different address book
+ $calendarInfo = $this->calDavBackEnd->getCalendarById($calendarId);
+ $extraData = $this->calDavBackEnd->getDenormalizedData($calendarData->serialize());
+
+ if ($calendarInfo && array_key_exists('principaluri', $calendarInfo)) {
+ $existing2path = $this->calDavBackEnd->getCalendarObjectByUID($calendarInfo['principaluri'], $extraData['uid']);
+ if ($existing2path !== null && array_key_exists('uri', $calendarInfo)) {
+ // delete the old birthday entry first so that we do not get duplicate UIDs
+ $existing2objectUri = substr($existing2path, strlen($calendarInfo['uri']) + 1);
+ $this->calDavBackEnd->deleteCalendarObject($calendarId, $existing2objectUri);
+ }
+ }
+
$this->calDavBackEnd->createCalendarObject($calendarId, $objectUri, $calendarData->serialize());
} else {
if ($this->birthdayEvenChanged($existing['calendardata'], $calendarData)) {
diff --git a/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php b/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php
index bfc82c0ee90..4cdac3cb44f 100644
--- a/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php
+++ b/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php
@@ -531,16 +531,16 @@ class IMipPlugin extends SabreIMipPlugin {
private function addBulletList(IEMailTemplate $template, IL10N $l10n, $vevent) {
if ($vevent->SUMMARY) {
$template->addBodyListItem($vevent->SUMMARY, $l10n->t('Title:'),
- $this->getAbsoluteImagePath('caldav/title.svg'),'','',self::IMIP_INDENT);
+ $this->getAbsoluteImagePath('caldav/title.png'),'','',self::IMIP_INDENT);
}
$meetingWhen = $this->generateWhenString($l10n, $vevent);
if ($meetingWhen) {
$template->addBodyListItem($meetingWhen, $l10n->t('Time:'),
- $this->getAbsoluteImagePath('caldav/time.svg'),'','',self::IMIP_INDENT);
+ $this->getAbsoluteImagePath('caldav/time.png'),'','',self::IMIP_INDENT);
}
if ($vevent->LOCATION) {
$template->addBodyListItem($vevent->LOCATION, $l10n->t('Location:'),
- $this->getAbsoluteImagePath('caldav/location.svg'),'','',self::IMIP_INDENT);
+ $this->getAbsoluteImagePath('caldav/location.png'),'','',self::IMIP_INDENT);
}
if ($vevent->URL) {
$url = $vevent->URL->getValue();
@@ -548,7 +548,7 @@ class IMipPlugin extends SabreIMipPlugin {
htmlspecialchars($url),
htmlspecialchars($url)),
$l10n->t('Link:'),
- $this->getAbsoluteImagePath('caldav/link.svg'),
+ $this->getAbsoluteImagePath('caldav/link.png'),
$url,'',self::IMIP_INDENT);
}
@@ -557,7 +557,7 @@ class IMipPlugin extends SabreIMipPlugin {
/* Put description last, like an email body, since it can be arbitrarily long */
if ($vevent->DESCRIPTION) {
$template->addBodyListItem($vevent->DESCRIPTION->getValue(), $l10n->t('Description:'),
- $this->getAbsoluteImagePath('caldav/description.svg'),'','',self::IMIP_INDENT);
+ $this->getAbsoluteImagePath('caldav/description.png'),'','',self::IMIP_INDENT);
}
}
@@ -603,7 +603,7 @@ class IMipPlugin extends SabreIMipPlugin {
}
}
$template->addBodyListItem($organizerHTML, $l10n->t('Organizer:'),
- $this->getAbsoluteImagePath('caldav/organizer.svg'),
+ $this->getAbsoluteImagePath('caldav/organizer.png'),
$organizerText,'',self::IMIP_INDENT);
}
@@ -632,7 +632,7 @@ class IMipPlugin extends SabreIMipPlugin {
}
$template->addBodyListItem(implode('<br/>',$attendeesHTML), $l10n->t('Attendees:'),
- $this->getAbsoluteImagePath('caldav/attendees.svg'),
+ $this->getAbsoluteImagePath('caldav/attendees.png'),
implode("\n",$attendeesText),'',self::IMIP_INDENT);
}
diff --git a/apps/dav/lib/CardDAV/Converter.php b/apps/dav/lib/CardDAV/Converter.php
index 59e5401d058..95ac43aba36 100644
--- a/apps/dav/lib/CardDAV/Converter.php
+++ b/apps/dav/lib/CardDAV/Converter.php
@@ -71,8 +71,8 @@ class Converter {
foreach ($userData as $property => $value) {
$shareWithTrustedServers =
- $value['scope'] === AccountManager::VISIBILITY_CONTACTS_ONLY ||
- $value['scope'] === AccountManager::VISIBILITY_PUBLIC;
+ $value['scope'] === AccountManager::SCOPE_FEDERATED ||
+ $value['scope'] === AccountManager::SCOPE_PUBLISHED;
$emptyValue = !isset($value['value']) || $value['value'] === '';
diff --git a/apps/dav/tests/unit/CardDAV/ConverterTest.php b/apps/dav/tests/unit/CardDAV/ConverterTest.php
index aef5cf8ef1c..43344451437 100644
--- a/apps/dav/tests/unit/CardDAV/ConverterTest.php
+++ b/apps/dav/tests/unit/CardDAV/ConverterTest.php
@@ -53,36 +53,36 @@ class ConverterTest extends TestCase {
IAccountManager::PROPERTY_DISPLAYNAME =>
[
'value' => $user->getDisplayName(),
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => AccountManager::SCOPE_FEDERATED,
],
IAccountManager::PROPERTY_ADDRESS =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
],
IAccountManager::PROPERTY_WEBSITE =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
],
IAccountManager::PROPERTY_EMAIL =>
[
'value' => $user->getEMailAddress(),
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => AccountManager::SCOPE_FEDERATED,
],
IAccountManager::PROPERTY_AVATAR =>
[
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY
+ 'scope' => AccountManager::SCOPE_FEDERATED
],
IAccountManager::PROPERTY_PHONE =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
],
IAccountManager::PROPERTY_TWITTER =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
],
]
);
diff --git a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php
index eb8186807c6..724670bc986 100644
--- a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php
+++ b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php
@@ -136,36 +136,36 @@ class SyncServiceTest extends TestCase {
IAccountManager::PROPERTY_DISPLAYNAME =>
[
'value' => $user->getDisplayName(),
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => AccountManager::SCOPE_FEDERATED,
],
IAccountManager::PROPERTY_ADDRESS =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
],
IAccountManager::PROPERTY_WEBSITE =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
],
IAccountManager::PROPERTY_EMAIL =>
[
'value' => $user->getEMailAddress(),
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => AccountManager::SCOPE_FEDERATED,
],
IAccountManager::PROPERTY_AVATAR =>
[
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY
+ 'scope' => AccountManager::SCOPE_FEDERATED
],
IAccountManager::PROPERTY_PHONE =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
],
IAccountManager::PROPERTY_TWITTER =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
],
]
);
diff --git a/apps/federation/l10n/hu.js b/apps/federation/l10n/hu.js
index 535e71b3937..126f3a5ef55 100644
--- a/apps/federation/l10n/hu.js
+++ b/apps/federation/l10n/hu.js
@@ -3,16 +3,16 @@ OC.L10N.register(
{
"Added to the list of trusted servers" : "Hozzáadva a megbízható kiszolgálók listájához",
"Server is already in the list of trusted servers." : "A kiszolgáló már szerepel a megbízható kiszolgálók között.",
- "No server to federate with found" : "Nem található egyesíthető kiszolgáló",
+ "No server to federate with found" : "Nem található olyan kiszolgáló, amellyel föderálni lehetne",
"Could not add server" : "A kiszolgáló nem adható hozzá",
- "Federation" : "Egyesítés",
- "Federation allows you to connect with other trusted servers to exchange the user directory." : "Az egyesítés lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cserélhessenek.",
- "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Az egyesítés lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók az egyesített megosztáshoz.",
+ "Federation" : "Föderáció",
+ "Federation allows you to connect with other trusted servers to exchange the user directory." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cserélhessenek.",
+ "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók a föderált megosztásnál.",
"Trusted servers" : "Megbízható kiszolgálók",
- "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Az egyesítés lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók az egyesített megosztáshoz. Nem szükséges egy kiszolgálót megbízhatóként hozzáadni ahhoz, hogy egyesített megosztást hozzon létre.",
+ "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók a föderált megosztásnál. Nem szükséges egy kiszolgálót megbízhatóként hozzáadni ahhoz, hogy föderált megosztást hozzon létre.",
"Add server automatically once a federated share was created successfully" : "Kiszolgáló automatikus hozzáadása, ha az egyesített megosztás létrehozása sikeres",
"+ Add trusted server" : "+ Megbízható kiszolgáló hozzáadása",
- "Trusted server" : "Megbízható kiszolgál",
+ "Trusted server" : "Megbízható kiszolgáló",
"Add" : "Hozzáadás"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/hu.json b/apps/federation/l10n/hu.json
index 76f9bfd3d2a..5898af48fc3 100644
--- a/apps/federation/l10n/hu.json
+++ b/apps/federation/l10n/hu.json
@@ -1,16 +1,16 @@
{ "translations": {
"Added to the list of trusted servers" : "Hozzáadva a megbízható kiszolgálók listájához",
"Server is already in the list of trusted servers." : "A kiszolgáló már szerepel a megbízható kiszolgálók között.",
- "No server to federate with found" : "Nem található egyesíthető kiszolgáló",
+ "No server to federate with found" : "Nem található olyan kiszolgáló, amellyel föderálni lehetne",
"Could not add server" : "A kiszolgáló nem adható hozzá",
- "Federation" : "Egyesítés",
- "Federation allows you to connect with other trusted servers to exchange the user directory." : "Az egyesítés lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cserélhessenek.",
- "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Az egyesítés lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók az egyesített megosztáshoz.",
+ "Federation" : "Föderáció",
+ "Federation allows you to connect with other trusted servers to exchange the user directory." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cserélhessenek.",
+ "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók a föderált megosztásnál.",
"Trusted servers" : "Megbízható kiszolgálók",
- "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Az egyesítés lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók az egyesített megosztáshoz. Nem szükséges egy kiszolgálót megbízhatóként hozzáadni ahhoz, hogy egyesített megosztást hozzon létre.",
+ "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók a föderált megosztásnál. Nem szükséges egy kiszolgálót megbízhatóként hozzáadni ahhoz, hogy föderált megosztást hozzon létre.",
"Add server automatically once a federated share was created successfully" : "Kiszolgáló automatikus hozzáadása, ha az egyesített megosztás létrehozása sikeres",
"+ Add trusted server" : "+ Megbízható kiszolgáló hozzáadása",
- "Trusted server" : "Megbízható kiszolgál",
+ "Trusted server" : "Megbízható kiszolgáló",
"Add" : "Hozzáadás"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 5dd5012f681..35d077e2e6e 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -130,7 +130,13 @@ OC.L10N.register(
"{user} deleted an encrypted file in {file}" : "{user} ha borrado un archivo cifrado en {file}",
"You restored {file}" : "Has restaurado {file}",
"{user} restored {file}" : "{user} restauró {file}",
+ "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Has renombrado {oldfile} (oculto) a {newfile} (oculto)",
+ "You renamed {oldfile} (hidden) to {newfile}" : "Has renombrado {oldfile} (oculto) a {newfile}",
+ "You renamed {oldfile} to {newfile} (hidden)" : "Has renombrado {oldfile} a {newfile} (oculto)",
"You renamed {oldfile} to {newfile}" : "Has renombrado {oldfile} a {newfile}",
+ "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renombro {oldfile} (oculto) a {newfile} (oculto)",
+ "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renombro {oldfile} (oculto) a {newfile}",
+ "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renombro {oldfile} a {newfile} (oculto)",
"{user} renamed {oldfile} to {newfile}" : "{user} ha renombrado {oldfile} a {newfile}",
"You moved {oldfile} to {newfile}" : "Has movido {oldfile} a {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 138a7d51b2c..53dcaeeba1e 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -128,7 +128,13 @@
"{user} deleted an encrypted file in {file}" : "{user} ha borrado un archivo cifrado en {file}",
"You restored {file}" : "Has restaurado {file}",
"{user} restored {file}" : "{user} restauró {file}",
+ "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Has renombrado {oldfile} (oculto) a {newfile} (oculto)",
+ "You renamed {oldfile} (hidden) to {newfile}" : "Has renombrado {oldfile} (oculto) a {newfile}",
+ "You renamed {oldfile} to {newfile} (hidden)" : "Has renombrado {oldfile} a {newfile} (oculto)",
"You renamed {oldfile} to {newfile}" : "Has renombrado {oldfile} a {newfile}",
+ "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renombro {oldfile} (oculto) a {newfile} (oculto)",
+ "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renombro {oldfile} (oculto) a {newfile}",
+ "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renombro {oldfile} a {newfile} (oculto)",
"{user} renamed {oldfile} to {newfile}" : "{user} ha renombrado {oldfile} a {newfile}",
"You moved {oldfile} to {newfile}" : "Has movido {oldfile} a {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 52498325b1f..531232bd419 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -186,7 +186,7 @@ OC.L10N.register(
"%s%% of %s used" : "%s%% usados de %s",
"%1$s of %2$s used" : "%1$s usados de %2$s",
"Settings" : "Configurações",
- "Show hidden files" : "Exibir arquivos ocultos",
+ "Show hidden files" : "Mostrar arquivos ocultos",
"Crop image previews" : "Cortar visualizações de imagem",
"WebDAV" : "WebDAV",
"Use this address to access your Files via WebDAV" : "Use este endereço para acessar seus Arquivos via WebDAV",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index db2dfc0325f..8bf9ff8537e 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -184,7 +184,7 @@
"%s%% of %s used" : "%s%% usados de %s",
"%1$s of %2$s used" : "%1$s usados de %2$s",
"Settings" : "Configurações",
- "Show hidden files" : "Exibir arquivos ocultos",
+ "Show hidden files" : "Mostrar arquivos ocultos",
"Crop image previews" : "Cortar visualizações de imagem",
"WebDAV" : "WebDAV",
"Use this address to access your Files via WebDAV" : "Use este endereço para acessar seus Arquivos via WebDAV",
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index 33923ed12fd..3e66d39c03e 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -130,7 +130,13 @@ OC.L10N.register(
"{user} deleted an encrypted file in {file}" : "{user} izbriše šifrirano datoteko {file}",
"You restored {file}" : "Obnovite datoteko {file}",
"{user} restored {file}" : "{user} obnovi datoteko {file}",
+ "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Preimenujete datoteko {oldfile} (skrito) v {newfile} (skrito)",
+ "You renamed {oldfile} (hidden) to {newfile}" : "Preimenujete {oldfile} (skrito) v {newfile}",
+ "You renamed {oldfile} to {newfile} (hidden)" : "Preimenujete datoteko {oldfile} v {newfile} (skrito)",
"You renamed {oldfile} to {newfile}" : "Preimenujete datoteko {oldfile} v {newfile}",
+ "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} preimenuje datoteko {oldfile} (skrito) v {newfile} (skrito)",
+ "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} preimenuje {oldfile} (skrito) v {newfile}",
+ "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} preimenuje datoteko {oldfile} v {newfile} (skrito)",
"{user} renamed {oldfile} to {newfile}" : "{user} preimenuje datoteko {oldfile} v {newfile}",
"You moved {oldfile} to {newfile}" : "Premaknete datoteko {oldfile} v {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} premakne datoteko {oldfile} v {newfile}",
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index 339176dca6a..9bb9fba9d0d 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -128,7 +128,13 @@
"{user} deleted an encrypted file in {file}" : "{user} izbriše šifrirano datoteko {file}",
"You restored {file}" : "Obnovite datoteko {file}",
"{user} restored {file}" : "{user} obnovi datoteko {file}",
+ "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Preimenujete datoteko {oldfile} (skrito) v {newfile} (skrito)",
+ "You renamed {oldfile} (hidden) to {newfile}" : "Preimenujete {oldfile} (skrito) v {newfile}",
+ "You renamed {oldfile} to {newfile} (hidden)" : "Preimenujete datoteko {oldfile} v {newfile} (skrito)",
"You renamed {oldfile} to {newfile}" : "Preimenujete datoteko {oldfile} v {newfile}",
+ "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} preimenuje datoteko {oldfile} (skrito) v {newfile} (skrito)",
+ "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} preimenuje {oldfile} (skrito) v {newfile}",
+ "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} preimenuje datoteko {oldfile} v {newfile} (skrito)",
"{user} renamed {oldfile} to {newfile}" : "{user} preimenuje datoteko {oldfile} v {newfile}",
"You moved {oldfile} to {newfile}" : "Premaknete datoteko {oldfile} v {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} premakne datoteko {oldfile} v {newfile}",
diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js
index d7e57df9b5a..b13cd04a3a3 100644
--- a/apps/files/l10n/vi.js
+++ b/apps/files/l10n/vi.js
@@ -75,7 +75,7 @@ OC.L10N.register(
"Path" : "Đường dẫn",
"_%n byte_::_%n bytes_" : ["%n bytes"],
"Favorited" : "Được ưa thích",
- "Favorite" : "Ưu thích",
+ "Favorite" : "Ưa thích",
"New folder" : "Tạo thư mục",
"Upload file" : "Tải lên tập tin",
"Recent" : "Gần đây",
diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json
index d71eee27df3..0a7e49c66f6 100644
--- a/apps/files/l10n/vi.json
+++ b/apps/files/l10n/vi.json
@@ -73,7 +73,7 @@
"Path" : "Đường dẫn",
"_%n byte_::_%n bytes_" : ["%n bytes"],
"Favorited" : "Được ưa thích",
- "Favorite" : "Ưu thích",
+ "Favorite" : "Ưa thích",
"New folder" : "Tạo thư mục",
"Upload file" : "Tải lên tập tin",
"Recent" : "Gần đây",
diff --git a/apps/files_external/3rdparty/.gitignore b/apps/files_external/3rdparty/.gitignore
index 5eae814c79d..651eb60572d 100644
--- a/apps/files_external/3rdparty/.gitignore
+++ b/apps/files_external/3rdparty/.gitignore
@@ -6,3 +6,6 @@ icewind/smb/Makefile
icewind/smb/.travis.yml
icewind/smb/.scrutinizer.yml
icewind/streams/tests
+.github
+.php_cs*
+psalm.xml
diff --git a/apps/files_external/3rdparty/composer.json b/apps/files_external/3rdparty/composer.json
index f38f175dd66..3f237c827ee 100644
--- a/apps/files_external/3rdparty/composer.json
+++ b/apps/files_external/3rdparty/composer.json
@@ -8,7 +8,7 @@
"classmap-authoritative": true
},
"require": {
- "icewind/streams": "0.7.1",
- "icewind/smb": "3.2.7"
+ "icewind/streams": "0.7.3",
+ "icewind/smb": "3.4.0"
}
}
diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock
index de8642d82fb..7e180c33662 100644
--- a/apps/files_external/3rdparty/composer.lock
+++ b/apps/files_external/3rdparty/composer.lock
@@ -4,29 +4,31 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "6181c23a5c03b00fbdc659d87c1ad67d",
+ "content-hash": "9905ed45527f669a4165a8b83b6e4141",
"packages": [
{
"name": "icewind/smb",
- "version": "v3.2.7",
+ "version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/icewind1991/SMB.git",
- "reference": "743a7bf35317f1b76cf8e8b804e54a6c5faacad6"
+ "reference": "b5c6921f2e91229c9f71556a4713b4fac91fd394"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/743a7bf35317f1b76cf8e8b804e54a6c5faacad6",
- "reference": "743a7bf35317f1b76cf8e8b804e54a6c5faacad6",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/b5c6921f2e91229c9f71556a4713b4fac91fd394",
+ "reference": "b5c6921f2e91229c9f71556a4713b4fac91fd394",
"shasum": ""
},
"require": {
- "icewind/streams": ">=0.2.0",
- "php": ">=7.1"
+ "icewind/streams": ">=0.7.3",
+ "php": ">=7.2"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^2.13",
- "phpunit/phpunit": "^7.0"
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "phpstan/phpstan": "^0.12.57",
+ "phpunit/phpunit": "^8.5|^9.3.8",
+ "psalm/phar": "^4.3"
},
"type": "library",
"autoload": {
@@ -45,33 +47,37 @@
}
],
"description": "php wrapper for smbclient and libsmbclient-php",
- "time": "2020-09-03T13:00:22+00:00"
+ "support": {
+ "issues": "https://github.com/icewind1991/SMB/issues",
+ "source": "https://github.com/icewind1991/SMB/tree/v3.4.0"
+ },
+ "time": "2021-03-10T14:00:37+00:00"
},
{
"name": "icewind/streams",
- "version": "v0.7.1",
+ "version": "v0.7.3",
"source": {
"type": "git",
"url": "https://github.com/icewind1991/Streams.git",
- "reference": "4db3ed6c366e90b958d00e1d4c6360a9b39b2121"
+ "reference": "22ef9fc5b50d645dbc202206a656cc4dde28f95c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/Streams/zipball/4db3ed6c366e90b958d00e1d4c6360a9b39b2121",
- "reference": "4db3ed6c366e90b958d00e1d4c6360a9b39b2121",
+ "url": "https://api.github.com/repos/icewind1991/Streams/zipball/22ef9fc5b50d645dbc202206a656cc4dde28f95c",
+ "reference": "22ef9fc5b50d645dbc202206a656cc4dde28f95c",
"shasum": ""
},
"require": {
- "php": ">=5.3"
+ "php": ">=7.1"
},
"require-dev": {
- "phpunit/phpunit": "^4.8",
- "satooshi/php-coveralls": "v1.0.0"
+ "friendsofphp/php-cs-fixer": "^2",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^9"
},
"type": "library",
"autoload": {
"psr-4": {
- "Icewind\\Streams\\Tests\\": "tests/",
"Icewind\\Streams\\": "src/"
}
},
@@ -86,7 +92,11 @@
}
],
"description": "A set of generic stream wrappers",
- "time": "2019-02-15T12:57:29+00:00"
+ "support": {
+ "issues": "https://github.com/icewind1991/Streams/issues",
+ "source": "https://github.com/icewind1991/Streams/tree/v0.7.3"
+ },
+ "time": "2021-03-02T19:33:35+00:00"
}
],
"packages-dev": [],
@@ -97,5 +107,5 @@
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
- "plugin-api-version": "1.1.0"
+ "plugin-api-version": "2.0.0"
}
diff --git a/apps/files_external/3rdparty/composer/ClassLoader.php b/apps/files_external/3rdparty/composer/ClassLoader.php
index fce8549f078..247294d66ee 100644
--- a/apps/files_external/3rdparty/composer/ClassLoader.php
+++ b/apps/files_external/3rdparty/composer/ClassLoader.php
@@ -37,11 +37,13 @@ namespace Composer\Autoload;
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
- * @see http://www.php-fig.org/psr/psr-0/
- * @see http://www.php-fig.org/psr/psr-4/
+ * @see https://www.php-fig.org/psr/psr-0/
+ * @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
+ private $vendorDir;
+
// PSR-4
private $prefixLengthsPsr4 = array();
private $prefixDirsPsr4 = array();
@@ -57,10 +59,17 @@ class ClassLoader
private $missingClasses = array();
private $apcuPrefix;
+ private static $registeredLoaders = array();
+
+ public function __construct($vendorDir = null)
+ {
+ $this->vendorDir = $vendorDir;
+ }
+
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
- return call_user_func_array('array_merge', $this->prefixesPsr0);
+ return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
@@ -300,6 +309,17 @@ class ClassLoader
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+
+ if (null === $this->vendorDir) {
+ return;
+ }
+
+ if ($prepend) {
+ self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
+ } else {
+ unset(self::$registeredLoaders[$this->vendorDir]);
+ self::$registeredLoaders[$this->vendorDir] = $this;
+ }
}
/**
@@ -308,6 +328,10 @@ class ClassLoader
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
+
+ if (null !== $this->vendorDir) {
+ unset(self::$registeredLoaders[$this->vendorDir]);
+ }
}
/**
@@ -367,6 +391,16 @@ class ClassLoader
return $file;
}
+ /**
+ * Returns the currently registered loaders indexed by their corresponding vendor directories.
+ *
+ * @return self[]
+ */
+ public static function getRegisteredLoaders()
+ {
+ return self::$registeredLoaders;
+ }
+
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
diff --git a/apps/files_external/3rdparty/composer/InstalledVersions.php b/apps/files_external/3rdparty/composer/InstalledVersions.php
new file mode 100644
index 00000000000..71cd811ef8d
--- /dev/null
+++ b/apps/files_external/3rdparty/composer/InstalledVersions.php
@@ -0,0 +1,301 @@
+<?php
+
+
+
+
+
+
+
+
+
+
+
+namespace Composer;
+
+use Composer\Autoload\ClassLoader;
+use Composer\Semver\VersionParser;
+
+
+
+
+
+
+class InstalledVersions
+{
+private static $installed = array (
+ 'root' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '62929cc646134fbd409cfb4eacb7039d15763b96',
+ 'name' => 'files_external/3rdparty',
+ ),
+ 'versions' =>
+ array (
+ 'files_external/3rdparty' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '62929cc646134fbd409cfb4eacb7039d15763b96',
+ ),
+ 'icewind/smb' =>
+ array (
+ 'pretty_version' => 'v3.4.0',
+ 'version' => '3.4.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'b5c6921f2e91229c9f71556a4713b4fac91fd394',
+ ),
+ 'icewind/streams' =>
+ array (
+ 'pretty_version' => 'v0.7.3',
+ 'version' => '0.7.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '22ef9fc5b50d645dbc202206a656cc4dde28f95c',
+ ),
+ ),
+);
+private static $canGetVendors;
+private static $installedByVendor = array();
+
+
+
+
+
+
+
+public static function getInstalledPackages()
+{
+$packages = array();
+foreach (self::getInstalled() as $installed) {
+$packages[] = array_keys($installed['versions']);
+}
+
+
+if (1 === \count($packages)) {
+return $packages[0];
+}
+
+return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
+}
+
+
+
+
+
+
+
+
+
+public static function isInstalled($packageName)
+{
+foreach (self::getInstalled() as $installed) {
+if (isset($installed['versions'][$packageName])) {
+return true;
+}
+}
+
+return false;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+public static function satisfies(VersionParser $parser, $packageName, $constraint)
+{
+$constraint = $parser->parseConstraints($constraint);
+$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
+
+return $provided->matches($constraint);
+}
+
+
+
+
+
+
+
+
+
+
+public static function getVersionRanges($packageName)
+{
+foreach (self::getInstalled() as $installed) {
+if (!isset($installed['versions'][$packageName])) {
+continue;
+}
+
+$ranges = array();
+if (isset($installed['versions'][$packageName]['pretty_version'])) {
+$ranges[] = $installed['versions'][$packageName]['pretty_version'];
+}
+if (array_key_exists('aliases', $installed['versions'][$packageName])) {
+$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
+}
+if (array_key_exists('replaced', $installed['versions'][$packageName])) {
+$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
+}
+if (array_key_exists('provided', $installed['versions'][$packageName])) {
+$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
+}
+
+return implode(' || ', $ranges);
+}
+
+throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+}
+
+
+
+
+
+public static function getVersion($packageName)
+{
+foreach (self::getInstalled() as $installed) {
+if (!isset($installed['versions'][$packageName])) {
+continue;
+}
+
+if (!isset($installed['versions'][$packageName]['version'])) {
+return null;
+}
+
+return $installed['versions'][$packageName]['version'];
+}
+
+throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+}
+
+
+
+
+
+public static function getPrettyVersion($packageName)
+{
+foreach (self::getInstalled() as $installed) {
+if (!isset($installed['versions'][$packageName])) {
+continue;
+}
+
+if (!isset($installed['versions'][$packageName]['pretty_version'])) {
+return null;
+}
+
+return $installed['versions'][$packageName]['pretty_version'];
+}
+
+throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+}
+
+
+
+
+
+public static function getReference($packageName)
+{
+foreach (self::getInstalled() as $installed) {
+if (!isset($installed['versions'][$packageName])) {
+continue;
+}
+
+if (!isset($installed['versions'][$packageName]['reference'])) {
+return null;
+}
+
+return $installed['versions'][$packageName]['reference'];
+}
+
+throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+}
+
+
+
+
+
+public static function getRootPackage()
+{
+$installed = self::getInstalled();
+
+return $installed[0]['root'];
+}
+
+
+
+
+
+
+
+public static function getRawData()
+{
+return self::$installed;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+public static function reload($data)
+{
+self::$installed = $data;
+self::$installedByVendor = array();
+}
+
+
+
+
+private static function getInstalled()
+{
+if (null === self::$canGetVendors) {
+self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
+}
+
+$installed = array();
+
+if (self::$canGetVendors) {
+foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
+if (isset(self::$installedByVendor[$vendorDir])) {
+$installed[] = self::$installedByVendor[$vendorDir];
+} elseif (is_file($vendorDir.'/composer/installed.php')) {
+$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
+}
+}
+}
+
+$installed[] = self::$installed;
+
+return $installed;
+}
+}
diff --git a/apps/files_external/3rdparty/composer/autoload_classmap.php b/apps/files_external/3rdparty/composer/autoload_classmap.php
index a563765eb9b..d0f82994f29 100644
--- a/apps/files_external/3rdparty/composer/autoload_classmap.php
+++ b/apps/files_external/3rdparty/composer/autoload_classmap.php
@@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = $vendorDir;
return array(
+ 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'Icewind\\SMB\\ACL' => $vendorDir . '/icewind/smb/src/ACL.php',
'Icewind\\SMB\\AbstractServer' => $vendorDir . '/icewind/smb/src/AbstractServer.php',
'Icewind\\SMB\\AbstractShare' => $vendorDir . '/icewind/smb/src/AbstractShare.php',
@@ -57,6 +58,7 @@ return array(
'Icewind\\SMB\\Native\\NativeWriteStream' => $vendorDir . '/icewind/smb/src/Native/NativeWriteStream.php',
'Icewind\\SMB\\Options' => $vendorDir . '/icewind/smb/src/Options.php',
'Icewind\\SMB\\ServerFactory' => $vendorDir . '/icewind/smb/src/ServerFactory.php',
+ 'Icewind\\SMB\\StringBuffer' => $vendorDir . '/icewind/smb/src/StringBuffer.php',
'Icewind\\SMB\\System' => $vendorDir . '/icewind/smb/src/System.php',
'Icewind\\SMB\\TimeZoneProvider' => $vendorDir . '/icewind/smb/src/TimeZoneProvider.php',
'Icewind\\SMB\\Wrapped\\Connection' => $vendorDir . '/icewind/smb/src/Wrapped/Connection.php',
@@ -73,13 +75,17 @@ return array(
'Icewind\\Streams\\DirectoryFilter' => $vendorDir . '/icewind/streams/src/DirectoryFilter.php',
'Icewind\\Streams\\DirectoryWrapper' => $vendorDir . '/icewind/streams/src/DirectoryWrapper.php',
'Icewind\\Streams\\File' => $vendorDir . '/icewind/streams/src/File.php',
+ 'Icewind\\Streams\\HashWrapper' => $vendorDir . '/icewind/streams/src/HashWrapper.php',
'Icewind\\Streams\\IteratorDirectory' => $vendorDir . '/icewind/streams/src/IteratorDirectory.php',
'Icewind\\Streams\\NullWrapper' => $vendorDir . '/icewind/streams/src/NullWrapper.php',
'Icewind\\Streams\\Path' => $vendorDir . '/icewind/streams/src/Path.php',
'Icewind\\Streams\\PathWrapper' => $vendorDir . '/icewind/streams/src/PathWrapper.php',
+ 'Icewind\\Streams\\ReadHashWrapper' => $vendorDir . '/icewind/streams/src/ReadHashWrapper.php',
'Icewind\\Streams\\RetryWrapper' => $vendorDir . '/icewind/streams/src/RetryWrapper.php',
'Icewind\\Streams\\SeekableWrapper' => $vendorDir . '/icewind/streams/src/SeekableWrapper.php',
'Icewind\\Streams\\Url' => $vendorDir . '/icewind/streams/src/Url.php',
- 'Icewind\\Streams\\UrlCallback' => $vendorDir . '/icewind/streams/src/UrlCallBack.php',
+ 'Icewind\\Streams\\UrlCallback' => $vendorDir . '/icewind/streams/src/UrlCallback.php',
'Icewind\\Streams\\Wrapper' => $vendorDir . '/icewind/streams/src/Wrapper.php',
+ 'Icewind\\Streams\\WrapperHandler' => $vendorDir . '/icewind/streams/src/WrapperHandler.php',
+ 'Icewind\\Streams\\WriteHashWrapper' => $vendorDir . '/icewind/streams/src/WriteHashWrapper.php',
);
diff --git a/apps/files_external/3rdparty/composer/autoload_psr4.php b/apps/files_external/3rdparty/composer/autoload_psr4.php
index 82614b5016c..e34149b31a6 100644
--- a/apps/files_external/3rdparty/composer/autoload_psr4.php
+++ b/apps/files_external/3rdparty/composer/autoload_psr4.php
@@ -6,7 +6,6 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = $vendorDir;
return array(
- 'Icewind\\Streams\\Tests\\' => array($vendorDir . '/icewind/streams/tests'),
'Icewind\\Streams\\' => array($vendorDir . '/icewind/streams/src'),
'Icewind\\SMB\\' => array($vendorDir . '/icewind/smb/src'),
);
diff --git a/apps/files_external/3rdparty/composer/autoload_real.php b/apps/files_external/3rdparty/composer/autoload_real.php
index 36857d406cd..7ff3e292529 100644
--- a/apps/files_external/3rdparty/composer/autoload_real.php
+++ b/apps/files_external/3rdparty/composer/autoload_real.php
@@ -22,13 +22,15 @@ class ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3
return self::$loader;
}
+ require __DIR__ . '/platform_check.php';
+
spl_autoload_register(array('ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3', 'loadClassLoader'), true, true);
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
- require_once __DIR__ . '/autoload_static.php';
+ require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3::getInitializer($loader));
} else {
diff --git a/apps/files_external/3rdparty/composer/autoload_static.php b/apps/files_external/3rdparty/composer/autoload_static.php
index 7ae9c4fff7a..899982f2a67 100644
--- a/apps/files_external/3rdparty/composer/autoload_static.php
+++ b/apps/files_external/3rdparty/composer/autoload_static.php
@@ -9,17 +9,12 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3
public static $prefixLengthsPsr4 = array (
'I' =>
array (
- 'Icewind\\Streams\\Tests\\' => 22,
'Icewind\\Streams\\' => 16,
'Icewind\\SMB\\' => 12,
),
);
public static $prefixDirsPsr4 = array (
- 'Icewind\\Streams\\Tests\\' =>
- array (
- 0 => __DIR__ . '/..' . '/icewind/streams/tests',
- ),
'Icewind\\Streams\\' =>
array (
0 => __DIR__ . '/..' . '/icewind/streams/src',
@@ -31,6 +26,7 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3
);
public static $classMap = array (
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'Icewind\\SMB\\ACL' => __DIR__ . '/..' . '/icewind/smb/src/ACL.php',
'Icewind\\SMB\\AbstractServer' => __DIR__ . '/..' . '/icewind/smb/src/AbstractServer.php',
'Icewind\\SMB\\AbstractShare' => __DIR__ . '/..' . '/icewind/smb/src/AbstractShare.php',
@@ -82,6 +78,7 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3
'Icewind\\SMB\\Native\\NativeWriteStream' => __DIR__ . '/..' . '/icewind/smb/src/Native/NativeWriteStream.php',
'Icewind\\SMB\\Options' => __DIR__ . '/..' . '/icewind/smb/src/Options.php',
'Icewind\\SMB\\ServerFactory' => __DIR__ . '/..' . '/icewind/smb/src/ServerFactory.php',
+ 'Icewind\\SMB\\StringBuffer' => __DIR__ . '/..' . '/icewind/smb/src/StringBuffer.php',
'Icewind\\SMB\\System' => __DIR__ . '/..' . '/icewind/smb/src/System.php',
'Icewind\\SMB\\TimeZoneProvider' => __DIR__ . '/..' . '/icewind/smb/src/TimeZoneProvider.php',
'Icewind\\SMB\\Wrapped\\Connection' => __DIR__ . '/..' . '/icewind/smb/src/Wrapped/Connection.php',
@@ -98,15 +95,19 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3
'Icewind\\Streams\\DirectoryFilter' => __DIR__ . '/..' . '/icewind/streams/src/DirectoryFilter.php',
'Icewind\\Streams\\DirectoryWrapper' => __DIR__ . '/..' . '/icewind/streams/src/DirectoryWrapper.php',
'Icewind\\Streams\\File' => __DIR__ . '/..' . '/icewind/streams/src/File.php',
+ 'Icewind\\Streams\\HashWrapper' => __DIR__ . '/..' . '/icewind/streams/src/HashWrapper.php',
'Icewind\\Streams\\IteratorDirectory' => __DIR__ . '/..' . '/icewind/streams/src/IteratorDirectory.php',
'Icewind\\Streams\\NullWrapper' => __DIR__ . '/..' . '/icewind/streams/src/NullWrapper.php',
'Icewind\\Streams\\Path' => __DIR__ . '/..' . '/icewind/streams/src/Path.php',
'Icewind\\Streams\\PathWrapper' => __DIR__ . '/..' . '/icewind/streams/src/PathWrapper.php',
+ 'Icewind\\Streams\\ReadHashWrapper' => __DIR__ . '/..' . '/icewind/streams/src/ReadHashWrapper.php',
'Icewind\\Streams\\RetryWrapper' => __DIR__ . '/..' . '/icewind/streams/src/RetryWrapper.php',
'Icewind\\Streams\\SeekableWrapper' => __DIR__ . '/..' . '/icewind/streams/src/SeekableWrapper.php',
'Icewind\\Streams\\Url' => __DIR__ . '/..' . '/icewind/streams/src/Url.php',
- 'Icewind\\Streams\\UrlCallback' => __DIR__ . '/..' . '/icewind/streams/src/UrlCallBack.php',
+ 'Icewind\\Streams\\UrlCallback' => __DIR__ . '/..' . '/icewind/streams/src/UrlCallback.php',
'Icewind\\Streams\\Wrapper' => __DIR__ . '/..' . '/icewind/streams/src/Wrapper.php',
+ 'Icewind\\Streams\\WrapperHandler' => __DIR__ . '/..' . '/icewind/streams/src/WrapperHandler.php',
+ 'Icewind\\Streams\\WriteHashWrapper' => __DIR__ . '/..' . '/icewind/streams/src/WriteHashWrapper.php',
);
public static function getInitializer(ClassLoader $loader)
diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json
index d903f99b5d9..e6950959c4f 100644
--- a/apps/files_external/3rdparty/composer/installed.json
+++ b/apps/files_external/3rdparty/composer/installed.json
@@ -1,88 +1,104 @@
-[
- {
- "name": "icewind/smb",
- "version": "v3.2.7",
- "version_normalized": "3.2.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/icewind1991/SMB.git",
- "reference": "743a7bf35317f1b76cf8e8b804e54a6c5faacad6"
+{
+ "packages": [
+ {
+ "name": "icewind/smb",
+ "version": "v3.4.0",
+ "version_normalized": "3.4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/icewind1991/SMB.git",
+ "reference": "b5c6921f2e91229c9f71556a4713b4fac91fd394"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/b5c6921f2e91229c9f71556a4713b4fac91fd394",
+ "reference": "b5c6921f2e91229c9f71556a4713b4fac91fd394",
+ "shasum": ""
+ },
+ "require": {
+ "icewind/streams": ">=0.7.3",
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "phpstan/phpstan": "^0.12.57",
+ "phpunit/phpunit": "^8.5|^9.3.8",
+ "psalm/phar": "^4.3"
+ },
+ "time": "2021-03-10T14:00:37+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Icewind\\SMB\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Robin Appelman",
+ "email": "icewind@owncloud.com"
+ }
+ ],
+ "description": "php wrapper for smbclient and libsmbclient-php",
+ "support": {
+ "issues": "https://github.com/icewind1991/SMB/issues",
+ "source": "https://github.com/icewind1991/SMB/tree/v3.4.0"
+ },
+ "install-path": "../icewind/smb"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/743a7bf35317f1b76cf8e8b804e54a6c5faacad6",
- "reference": "743a7bf35317f1b76cf8e8b804e54a6c5faacad6",
- "shasum": ""
- },
- "require": {
- "icewind/streams": ">=0.2.0",
- "php": ">=7.1"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.13",
- "phpunit/phpunit": "^7.0"
- },
- "time": "2020-09-03T13:00:22+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Icewind\\SMB\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Robin Appelman",
- "email": "icewind@owncloud.com"
- }
- ],
- "description": "php wrapper for smbclient and libsmbclient-php"
- },
- {
- "name": "icewind/streams",
- "version": "v0.7.1",
- "version_normalized": "0.7.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/icewind1991/Streams.git",
- "reference": "4db3ed6c366e90b958d00e1d4c6360a9b39b2121"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/icewind1991/Streams/zipball/4db3ed6c366e90b958d00e1d4c6360a9b39b2121",
- "reference": "4db3ed6c366e90b958d00e1d4c6360a9b39b2121",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8",
- "satooshi/php-coveralls": "v1.0.0"
- },
- "time": "2019-02-15T12:57:29+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Icewind\\Streams\\Tests\\": "tests/",
- "Icewind\\Streams\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Robin Appelman",
- "email": "icewind@owncloud.com"
- }
- ],
- "description": "A set of generic stream wrappers"
- }
-]
+ {
+ "name": "icewind/streams",
+ "version": "v0.7.3",
+ "version_normalized": "0.7.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/icewind1991/Streams.git",
+ "reference": "22ef9fc5b50d645dbc202206a656cc4dde28f95c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/icewind1991/Streams/zipball/22ef9fc5b50d645dbc202206a656cc4dde28f95c",
+ "reference": "22ef9fc5b50d645dbc202206a656cc4dde28f95c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^9"
+ },
+ "time": "2021-03-02T19:33:35+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Icewind\\Streams\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Robin Appelman",
+ "email": "icewind@owncloud.com"
+ }
+ ],
+ "description": "A set of generic stream wrappers",
+ "support": {
+ "issues": "https://github.com/icewind1991/Streams/issues",
+ "source": "https://github.com/icewind1991/Streams/tree/v0.7.3"
+ },
+ "install-path": "../icewind/streams"
+ }
+ ],
+ "dev": true,
+ "dev-package-names": []
+}
diff --git a/apps/files_external/3rdparty/composer/installed.php b/apps/files_external/3rdparty/composer/installed.php
new file mode 100644
index 00000000000..8d83406926d
--- /dev/null
+++ b/apps/files_external/3rdparty/composer/installed.php
@@ -0,0 +1,42 @@
+<?php return array (
+ 'root' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '62929cc646134fbd409cfb4eacb7039d15763b96',
+ 'name' => 'files_external/3rdparty',
+ ),
+ 'versions' =>
+ array (
+ 'files_external/3rdparty' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '62929cc646134fbd409cfb4eacb7039d15763b96',
+ ),
+ 'icewind/smb' =>
+ array (
+ 'pretty_version' => 'v3.4.0',
+ 'version' => '3.4.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'b5c6921f2e91229c9f71556a4713b4fac91fd394',
+ ),
+ 'icewind/streams' =>
+ array (
+ 'pretty_version' => 'v0.7.3',
+ 'version' => '0.7.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '22ef9fc5b50d645dbc202206a656cc4dde28f95c',
+ ),
+ ),
+);
diff --git a/apps/files_external/3rdparty/composer/platform_check.php b/apps/files_external/3rdparty/composer/platform_check.php
new file mode 100644
index 00000000000..589e9e770b9
--- /dev/null
+++ b/apps/files_external/3rdparty/composer/platform_check.php
@@ -0,0 +1,26 @@
+<?php
+
+// platform_check.php @generated by Composer
+
+$issues = array();
+
+if (!(PHP_VERSION_ID >= 70200)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.';
+}
+
+if ($issues) {
+ if (!headers_sent()) {
+ header('HTTP/1.1 500 Internal Server Error');
+ }
+ if (!ini_get('display_errors')) {
+ if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+ fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
+ } elseif (!headers_sent()) {
+ echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
+ }
+ }
+ trigger_error(
+ 'Composer detected issues in your platform: ' . implode(' ', $issues),
+ E_USER_ERROR
+ );
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/.gitignore b/apps/files_external/3rdparty/icewind/smb/.gitignore
index 17e19f04f56..ff449e1b5d7 100644
--- a/apps/files_external/3rdparty/icewind/smb/.gitignore
+++ b/apps/files_external/3rdparty/icewind/smb/.gitignore
@@ -4,3 +4,4 @@ composer.lock
.php_cs.cache
listen.php
test.php
+*.cache \ No newline at end of file
diff --git a/apps/files_external/3rdparty/icewind/smb/README.md b/apps/files_external/3rdparty/icewind/smb/README.md
index 6a35e736acb..272c4ebedcd 100644
--- a/apps/files_external/3rdparty/icewind/smb/README.md
+++ b/apps/files_external/3rdparty/icewind/smb/README.md
@@ -1,9 +1,8 @@
SMB
===
-[![Code Coverage](https://scrutinizer-ci.com/g/icewind1991/SMB/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/icewind1991/SMB/?branch=master)
-[![Build Status](https://travis-ci.org/icewind1991/SMB.svg?branch=master)](https://travis-ci.org/icewind1991/SMB)
-[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/icewind1991/SMB/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/icewind1991/SMB/?branch=master)
+[![CI](https://github.com/icewind1991/SMB/actions/workflows/ci.yaml/badge.svg)](https://github.com/icewind1991/SMB/actions/workflows/ci.yaml)
+[![codecov](https://codecov.io/gh/icewind1991/SMB/branch/master/graph/badge.svg?token=eTg0P466k6)](https://codecov.io/gh/icewind1991/SMB)
PHP wrapper for `smbclient` and [`libsmbclient-php`](https://github.com/eduardok/libsmbclient-php)
@@ -103,7 +102,7 @@ fclose($fh);
```
**Note**: write() will truncate your file to 0bytes. You may open a writeable stream with append() which will point
-the cursor to the end of the file or create it if it does not exists yet. (append() is only compatible with libsmbclient-php)
+the cursor to the end of the file or create it if it does not exist yet. (append() is only compatible with libsmbclient-php)
```php
$fh = $share->append('test.txt');
fwrite($fh, 'bar');
@@ -127,11 +126,22 @@ $options->setTimeout(5);
$serverFactory = new ServerFactory($options);
```
+### Setting protocol version
+
+```php
+$options = new Options();
+$options->setMinProtocol(IOptions::PROTOCOL_SMB2);
+$options->setMaxProtocol(IOptions::PROTOCOL_SMB3);
+$serverFactory = new ServerFactory($options);
+```
+
+Note, setting the protocol version is not supported with php-smbclient version 1.0.1 or lower.
+
### Customizing system integration
The `smbclient` backend needs to get various information about the system it's running on to function
such as the paths of various binaries or the system timezone.
-While the default logic for getting this information should work on most systems, it possible to customize this behaviour.
+While the default logic for getting this information should work on most systems, it is possible to customize this behaviour.
In order to customize the integration you provide a custom implementation of `ITimezoneProvider` and/or `ISystem` and pass them as arguments to the `ServerFactory`.
diff --git a/apps/files_external/3rdparty/icewind/smb/composer.json b/apps/files_external/3rdparty/icewind/smb/composer.json
index 02cd629565e..6ab6100af71 100644
--- a/apps/files_external/3rdparty/icewind/smb/composer.json
+++ b/apps/files_external/3rdparty/icewind/smb/composer.json
@@ -1,29 +1,37 @@
{
- "name" : "icewind/smb",
- "description" : "php wrapper for smbclient and libsmbclient-php",
- "license" : "MIT",
- "authors" : [
- {
- "name" : "Robin Appelman",
- "email": "icewind@owncloud.com"
- }
- ],
- "require" : {
- "php": ">=7.1",
- "icewind/streams": ">=0.2.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.0",
- "friendsofphp/php-cs-fixer": "^2.13"
- },
- "autoload" : {
- "psr-4": {
- "Icewind\\SMB\\": "src/"
- }
- },
- "autoload-dev" : {
- "psr-4": {
- "Icewind\\SMB\\Test\\": "tests/"
- }
- }
+ "name": "icewind/smb",
+ "description": "php wrapper for smbclient and libsmbclient-php",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Robin Appelman",
+ "email": "icewind@owncloud.com"
+ }
+ ],
+ "require": {
+ "php": ">=7.2",
+ "icewind/streams": ">=0.7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5|^9.3.8",
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "phpstan/phpstan": "^0.12.57",
+ "psalm/phar": "^4.3"
+ },
+ "autoload": {
+ "psr-4": {
+ "Icewind\\SMB\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Icewind\\SMB\\Test\\": "tests/"
+ }
+ },
+ "scripts": {
+ "lint": "parallel-lint --exclude src --exclude vendor --exclude target --exclude build .",
+ "cs:check": "php-cs-fixer fix --dry-run --diff",
+ "cs:fix": "php-cs-fixer fix",
+ "psalm": "psalm.phar"
+ }
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/ACL.php b/apps/files_external/3rdparty/icewind/smb/src/ACL.php
index bdb77257f17..0b5b05a86af 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/ACL.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/ACL.php
@@ -33,8 +33,11 @@ class ACL {
const FLAG_OBJECT_INHERIT = 0x1;
const FLAG_CONTAINER_INHERIT = 0x2;
+ /** @var int */
private $type;
+ /** @var int */
private $flags;
+ /** @var int */
private $mask;
public function __construct(int $type, int $flags, int $mask) {
diff --git a/apps/files_external/3rdparty/icewind/smb/src/AbstractServer.php b/apps/files_external/3rdparty/icewind/smb/src/AbstractServer.php
index aa2adfa67b3..810ca807d9b 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/AbstractServer.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/AbstractServer.php
@@ -24,24 +24,16 @@ namespace Icewind\SMB;
abstract class AbstractServer implements IServer {
const LOCALE = 'en_US.UTF-8';
- /**
- * @var string $host
- */
+ /** @var string */
protected $host;
- /**
- * @var IAuth $user
- */
+ /** @var IAuth */
protected $auth;
- /**
- * @var ISystem
- */
+ /** @var ISystem */
protected $system;
- /**
- * @var TimeZoneProvider
- */
+ /** @var ITimeZoneProvider */
protected $timezoneProvider;
/** @var IOptions */
@@ -51,10 +43,10 @@ abstract class AbstractServer implements IServer {
* @param string $host
* @param IAuth $auth
* @param ISystem $system
- * @param TimeZoneProvider $timeZoneProvider
+ * @param ITimeZoneProvider $timeZoneProvider
* @param IOptions $options
*/
- public function __construct($host, IAuth $auth, ISystem $system, TimeZoneProvider $timeZoneProvider, IOptions $options) {
+ public function __construct(string $host, IAuth $auth, ISystem $system, ITimeZoneProvider $timeZoneProvider, IOptions $options) {
$this->host = $host;
$this->auth = $auth;
$this->system = $system;
@@ -62,23 +54,23 @@ abstract class AbstractServer implements IServer {
$this->options = $options;
}
- public function getAuth() {
+ public function getAuth(): IAuth {
return $this->auth;
}
- public function getHost() {
+ public function getHost(): string {
return $this->host;
}
- public function getTimeZone() {
+ public function getTimeZone(): string {
return $this->timezoneProvider->get($this->host);
}
- public function getSystem() {
+ public function getSystem(): ISystem {
return $this->system;
}
- public function getOptions() {
+ public function getOptions(): IOptions {
return $this->options;
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/AbstractShare.php b/apps/files_external/3rdparty/icewind/smb/src/AbstractShare.php
index b53c253be08..454eb143e49 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/AbstractShare.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/AbstractShare.php
@@ -10,13 +10,18 @@ namespace Icewind\SMB;
use Icewind\SMB\Exception\InvalidPathException;
abstract class AbstractShare implements IShare {
+ /** @var string[] */
private $forbiddenCharacters;
public function __construct() {
$this->forbiddenCharacters = ['?', '<', '>', ':', '*', '|', '"', chr(0), "\n", "\r"];
}
- protected function verifyPath($path) {
+ /**
+ * @param string $path
+ * @throws InvalidPathException
+ */
+ protected function verifyPath(string $path): void {
foreach ($this->forbiddenCharacters as $char) {
if (strpos($path, $char) !== false) {
throw new InvalidPathException('Invalid path, "' . $char . '" is not allowed');
@@ -24,7 +29,10 @@ abstract class AbstractShare implements IShare {
}
}
- public function setForbiddenChars(array $charList) {
+ /**
+ * @param string[] $charList
+ */
+ public function setForbiddenChars(array $charList): void {
$this->forbiddenCharacters = $charList;
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/AnonymousAuth.php b/apps/files_external/3rdparty/icewind/smb/src/AnonymousAuth.php
index 737cc7c63f1..0f3524002be 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/AnonymousAuth.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/AnonymousAuth.php
@@ -22,23 +22,23 @@
namespace Icewind\SMB;
class AnonymousAuth implements IAuth {
- public function getUsername() {
+ public function getUsername(): ?string {
return null;
}
- public function getWorkgroup() {
+ public function getWorkgroup(): ?string {
return 'dummy';
}
- public function getPassword() {
+ public function getPassword(): ?string {
return null;
}
- public function getExtraCommandLineArguments() {
+ public function getExtraCommandLineArguments(): string {
return '-N';
}
- public function setExtraSmbClientOptions($smbClientState) {
+ public function setExtraSmbClientOptions($smbClientState): void {
smbclient_option_set($smbClientState, SMBCLIENT_OPT_AUTO_ANONYMOUS_LOGIN, true);
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/BasicAuth.php b/apps/files_external/3rdparty/icewind/smb/src/BasicAuth.php
index 9d7f9b5d306..04004e6ebd8 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/BasicAuth.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/BasicAuth.php
@@ -24,41 +24,34 @@ namespace Icewind\SMB;
class BasicAuth implements IAuth {
/** @var string */
private $username;
- /** @var string */
+ /** @var string|null */
private $workgroup;
/** @var string */
private $password;
- /**
- * BasicAuth constructor.
- *
- * @param string $username
- * @param string $workgroup
- * @param string $password
- */
- public function __construct($username, $workgroup, $password) {
+ public function __construct(string $username, ?string $workgroup, string $password) {
$this->username = $username;
$this->workgroup = $workgroup;
$this->password = $password;
}
- public function getUsername() {
+ public function getUsername(): ?string {
return $this->username;
}
- public function getWorkgroup() {
+ public function getWorkgroup(): ?string {
return $this->workgroup;
}
- public function getPassword() {
+ public function getPassword(): ?string {
return $this->password;
}
- public function getExtraCommandLineArguments() {
+ public function getExtraCommandLineArguments(): string {
return ($this->workgroup) ? '-W ' . escapeshellarg($this->workgroup) : '';
}
- public function setExtraSmbClientOptions($smbClientState) {
+ public function setExtraSmbClientOptions($smbClientState): void {
// noop
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Change.php b/apps/files_external/3rdparty/icewind/smb/src/Change.php
index 9dfd57b3973..4d6ab49d2bb 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Change.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Change.php
@@ -9,32 +9,21 @@
namespace Icewind\SMB;
class Change {
+ /** @var int */
private $code;
-
+ /** @var string */
private $path;
- /**
- * Change constructor.
- *
- * @param $code
- * @param $path
- */
- public function __construct($code, $path) {
+ public function __construct(int $code, string $path) {
$this->code = $code;
$this->path = $path;
}
- /**
- * @return integer
- */
- public function getCode() {
+ public function getCode(): int {
return $this->code;
}
- /**
- * @return string
- */
- public function getPath() {
+ public function getPath(): string {
return $this->path;
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php
index 4954518f980..e3e860b30d5 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php
@@ -7,23 +7,37 @@
namespace Icewind\SMB\Exception;
+use Throwable;
+
+/**
+ * @psalm-consistent-constructor
+ */
class Exception extends \Exception {
- public static function unknown($path, $error) {
- $message = 'Unknown error (' . $error . ')';
+ public function __construct(string $message = "", int $code = 0, Throwable $previous = null) {
+ parent::__construct($message, $code, $previous);
+ }
+
+ /**
+ * @param string|null $path
+ * @param string|int|null $error
+ * @return Exception
+ */
+ public static function unknown(?string $path, $error): Exception {
+ $message = 'Unknown error (' . (string)$error . ')';
if ($path) {
$message .= ' for ' . $path;
}
- return new Exception($message, is_string($error) ? 0 : $error);
+ return new Exception($message, is_int($error) ? $error : 0);
}
/**
- * @param array $exceptionMap
- * @param mixed $error
- * @param string $path
+ * @param array<int|string, class-string<Exception>> $exceptionMap
+ * @param string|int|null $error
+ * @param string|null $path
* @return Exception
*/
- public static function fromMap(array $exceptionMap, $error, $path) {
+ public static function fromMap(array $exceptionMap, $error, ?string $path): Exception {
if (isset($exceptionMap[$error])) {
$exceptionClass = $exceptionMap[$error];
if (is_numeric($error)) {
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidRequestException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidRequestException.php
index 882bf1677bf..1494de9efcb 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidRequestException.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidRequestException.php
@@ -13,15 +13,11 @@ class InvalidRequestException extends Exception {
*/
protected $path;
- /**
- * @param string $path
- * @param int $code
- */
- public function __construct($path, $code = 0) {
+ public function __construct(string $path = "", int $code = 0, \Throwable $previous = null) {
$class = get_class($this);
$parts = explode('\\', $class);
$baseName = array_pop($parts);
- parent::__construct('Invalid request for ' . $path . ' (' . $baseName . ')', $code);
+ parent::__construct('Invalid request for ' . $path . ' (' . $baseName . ')', $code, $previous);
$this->path = $path;
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/RevisionMismatchException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/RevisionMismatchException.php
index e898b5a2347..3c7c180bf93 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Exception/RevisionMismatchException.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/RevisionMismatchException.php
@@ -10,7 +10,7 @@ namespace Icewind\SMB\Exception;
use Throwable;
class RevisionMismatchException extends Exception {
- public function __construct($message = 'Protocol version mismatch', $code = 0, Throwable $previous = null) {
+ public function __construct(string $message = 'Protocol version mismatch', int $code = 0, Throwable $previous = null) {
parent::__construct($message, $code, $previous);
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/IAuth.php b/apps/files_external/3rdparty/icewind/smb/src/IAuth.php
index 731b315ebaa..9d4302dd4e8 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/IAuth.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/IAuth.php
@@ -22,32 +22,23 @@
namespace Icewind\SMB;
interface IAuth {
- /**
- * @return string|null
- */
- public function getUsername();
+ public function getUsername(): ?string;
- /**
- * @return string|null
- */
- public function getWorkgroup();
+ public function getWorkgroup(): ?string;
- /**
- * @return string|null
- */
- public function getPassword();
+ public function getPassword(): ?string;
/**
* Any extra command line option for smbclient that are required
*
* @return string
*/
- public function getExtraCommandLineArguments();
+ public function getExtraCommandLineArguments(): string;
/**
* Set any extra options for libsmbclient that are required
*
* @param resource $smbClientState
*/
- public function setExtraSmbClientOptions($smbClientState);
+ public function setExtraSmbClientOptions($smbClientState): void;
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/IFileInfo.php b/apps/files_external/3rdparty/icewind/smb/src/IFileInfo.php
index 3411d498d78..7e440c1420b 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/IFileInfo.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/IFileInfo.php
@@ -21,50 +21,23 @@ interface IFileInfo {
const MODE_ARCHIVE = 0x20;
const MODE_NORMAL = 0x80;
- /**
- * @return string
- */
- public function getPath();
+ public function getPath(): string;
- /**
- * @return string
- */
- public function getName();
+ public function getName(): string;
- /**
- * @return int
- */
- public function getSize();
+ public function getSize(): int;
- /**
- * @return int
- */
- public function getMTime();
+ public function getMTime(): int;
- /**
- * @return bool
- */
- public function isDirectory();
+ public function isDirectory(): bool;
- /**
- * @return bool
- */
- public function isReadOnly();
+ public function isReadOnly(): bool;
- /**
- * @return bool
- */
- public function isHidden();
+ public function isHidden(): bool;
- /**
- * @return bool
- */
- public function isSystem();
+ public function isSystem(): bool;
- /**
- * @return bool
- */
- public function isArchived();
+ public function isArchived(): bool;
/**
* @return ACL[]
diff --git a/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php b/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php
index c3ee3ffe8cf..e964a15fa37 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php
@@ -25,21 +25,21 @@ interface INotifyHandler {
*
* @return Change[]
*/
- public function getChanges();
+ public function getChanges(): array;
/**
* Listen actively to all incoming changes
*
* Note that this is a blocking process and will cause the process to block forever if not explicitly terminated
*
- * @param callable $callback
+ * @param callable(Change):?bool $callback
*/
- public function listen($callback);
+ public function listen(callable $callback): void;
/**
* Stop listening for changes
*
* Note that any pending changes will be discarded
*/
- public function stop();
+ public function stop(): void;
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/IOptions.php b/apps/files_external/3rdparty/icewind/smb/src/IOptions.php
index c46d2c8b3dc..4ab7b26c660 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/IOptions.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/IOptions.php
@@ -22,8 +22,20 @@
namespace Icewind\SMB;
interface IOptions {
- /**
- * @return int
- */
- public function getTimeout();
+ const PROTOCOL_NT1 = 'NT1';
+ const PROTOCOL_SMB2 = 'SMB2';
+ const PROTOCOL_SMB2_02 = 'SMB2_02';
+ const PROTOCOL_SMB2_22 = 'SMB2_22';
+ const PROTOCOL_SMB2_24 = 'SMB2_24';
+ const PROTOCOL_SMB3 = 'SMB3';
+ const PROTOCOL_SMB3_00 = 'SMB3_00';
+ const PROTOCOL_SMB3_02 = 'SMB3_02';
+ const PROTOCOL_SMB3_10 = 'SMB3_10';
+ const PROTOCOL_SMB3_11 = 'SMB3_11';
+
+ public function getTimeout(): int;
+
+ public function getMinProtocol(): ?string;
+
+ public function getMaxProtocol(): ?string;
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/IServer.php b/apps/files_external/3rdparty/icewind/smb/src/IServer.php
index 0b832025aab..c2f5a504bcf 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/IServer.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/IServer.php
@@ -22,15 +22,9 @@
namespace Icewind\SMB;
interface IServer {
- /**
- * @return IAuth
- */
- public function getAuth();
+ public function getAuth(): IAuth;
- /**
- * @return string
- */
- public function getHost();
+ public function getHost(): string;
/**
* @return \Icewind\SMB\IShare[]
@@ -38,32 +32,15 @@ interface IServer {
* @throws \Icewind\SMB\Exception\AuthenticationException
* @throws \Icewind\SMB\Exception\InvalidHostException
*/
- public function listShares();
+ public function listShares(): array;
- /**
- * @param string $name
- * @return \Icewind\SMB\IShare
- */
- public function getShare($name);
+ public function getShare(string $name): IShare;
- /**
- * @return string
- */
- public function getTimeZone();
+ public function getTimeZone(): string;
- /**
- * @return ISystem
- */
- public function getSystem();
+ public function getSystem(): ISystem;
- /**
- * @return IOptions
- */
- public function getOptions();
+ public function getOptions(): IOptions;
- /**
- * @param ISystem $system
- * @return bool
- */
- public static function available(ISystem $system);
+ public static function available(ISystem $system): bool;
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/IShare.php b/apps/files_external/3rdparty/icewind/smb/src/IShare.php
index d33d10bb3fb..6ac6e0d2d15 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/IShare.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/IShare.php
@@ -7,13 +7,18 @@
namespace Icewind\SMB;
+use Icewind\SMB\Exception\AlreadyExistsException;
+use Icewind\SMB\Exception\InvalidRequestException;
+use Icewind\SMB\Exception\InvalidTypeException;
+use Icewind\SMB\Exception\NotFoundException;
+
interface IShare {
/**
* Get the name of the share
*
* @return string
*/
- public function getName();
+ public function getName(): string;
/**
* Download a remote file
@@ -22,10 +27,10 @@ interface IShare {
* @param string $target local file
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function get($source, $target);
+ public function get(string $source, string $target): bool;
/**
* Upload a local file
@@ -34,10 +39,10 @@ interface IShare {
* @param string $target remove file
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function put($source, $target);
+ public function put(string $source, string $target): bool;
/**
* Open a readable stream top a remote file
@@ -45,10 +50,10 @@ interface IShare {
* @param string $source
* @return resource a read only stream with the contents of the remote file
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function read($source);
+ public function read(string $source);
/**
* Open a writable stream to a remote file
@@ -57,10 +62,10 @@ interface IShare {
* @param string $target
* @return resource a write only stream to upload a remote file
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function write($target);
+ public function write(string $target);
/**
* Open a writable stream to a remote file and set the cursor to the end of the file
@@ -68,11 +73,11 @@ interface IShare {
* @param string $target
* @return resource a write only stream to upload a remote file
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
- * @throws \Icewind\SMB\Exception\InvalidRequestException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
+ * @throws InvalidRequestException
*/
- public function append($target);
+ public function append(string $target);
/**
* Rename a remote file
@@ -81,10 +86,10 @@ interface IShare {
* @param string $to
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\AlreadyExistsException
+ * @throws NotFoundException
+ * @throws AlreadyExistsException
*/
- public function rename($from, $to);
+ public function rename(string $from, string $to): bool;
/**
* Delete a file on the share
@@ -92,29 +97,29 @@ interface IShare {
* @param string $path
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function del($path);
+ public function del(string $path): bool;
/**
* List the content of a remote folder
*
- * @param $path
- * @return \Icewind\SMB\IFileInfo[]
+ * @param string $path
+ * @return IFileInfo[]
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function dir($path);
+ public function dir(string $path): array;
/**
* @param string $path
- * @return \Icewind\SMB\IFileInfo
+ * @return IFileInfo
*
- * @throws \Icewind\SMB\Exception\NotFoundException
+ * @throws NotFoundException
*/
- public function stat($path);
+ public function stat(string $path): IFileInfo;
/**
* Create a folder on the share
@@ -122,10 +127,10 @@ interface IShare {
* @param string $path
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\AlreadyExistsException
+ * @throws NotFoundException
+ * @throws AlreadyExistsException
*/
- public function mkdir($path);
+ public function mkdir(string $path): bool;
/**
* Remove a folder on the share
@@ -133,23 +138,23 @@ interface IShare {
* @param string $path
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function rmdir($path);
+ public function rmdir(string $path): bool;
/**
* @param string $path
* @param int $mode a combination of FileInfo::MODE_READONLY, FileInfo::MODE_ARCHIVE, FileInfo::MODE_SYSTEM and FileInfo::MODE_HIDDEN, FileInfo::NORMAL
* @return mixed
*/
- public function setMode($path, $mode);
+ public function setMode(string $path, int $mode);
/**
* @param string $path
* @return INotifyHandler
*/
- public function notify($path);
+ public function notify(string $path);
/**
* Get the IServer instance for this share
diff --git a/apps/files_external/3rdparty/icewind/smb/src/ISystem.php b/apps/files_external/3rdparty/icewind/smb/src/ISystem.php
index 09994610716..6f06b8421c2 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/ISystem.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/ISystem.php
@@ -32,47 +32,47 @@ interface ISystem {
* @param int $num the file descriptor id
* @return string
*/
- public function getFD($num);
+ public function getFD(int $num): string;
/**
- * Get the full path to the `smbclient` binary of false if the binary is not available
+ * Get the full path to the `smbclient` binary of null if the binary is not available
*
- * @return string|bool
+ * @return string|null
*/
- public function getSmbclientPath();
+ public function getSmbclientPath(): ?string;
/**
- * Get the full path to the `net` binary of false if the binary is not available
+ * Get the full path to the `net` binary of null if the binary is not available
*
- * @return string|bool
+ * @return string|null
*/
- public function getNetPath();
+ public function getNetPath(): ?string;
/**
- * Get the full path to the `smbcacls` binary of false if the binary is not available
+ * Get the full path to the `smbcacls` binary of null if the binary is not available
*
- * @return string|bool
+ * @return string|null
*/
- public function getSmbcAclsPath();
+ public function getSmbcAclsPath(): ?string;
/**
- * Get the full path to the `stdbuf` binary of false if the binary is not available
+ * Get the full path to the `stdbuf` binary of null if the binary is not available
*
- * @return string|bool
+ * @return string|null
*/
- public function getStdBufPath();
+ public function getStdBufPath(): ?string;
/**
- * Get the full path to the `date` binary of false if the binary is not available
+ * Get the full path to the `date` binary of null if the binary is not available
*
- * @return string|bool
+ * @return string|null
*/
- public function getDatePath();
+ public function getDatePath(): ?string;
/**
* Whether or not the smbclient php extension is enabled
*
* @return bool
*/
- public function libSmbclientAvailable();
+ public function libSmbclientAvailable(): bool;
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/ITimeZoneProvider.php b/apps/files_external/3rdparty/icewind/smb/src/ITimeZoneProvider.php
index 56e09ffb392..d624bcec854 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/ITimeZoneProvider.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/ITimeZoneProvider.php
@@ -28,5 +28,5 @@ interface ITimeZoneProvider {
* @param string $host
* @return string
*/
- public function get($host);
+ public function get(string $host): string;
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/KerberosAuth.php b/apps/files_external/3rdparty/icewind/smb/src/KerberosAuth.php
index 0e91202cb76..7cd9258465a 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/KerberosAuth.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/KerberosAuth.php
@@ -25,23 +25,23 @@ namespace Icewind\SMB;
* Use existing kerberos ticket to authenticate
*/
class KerberosAuth implements IAuth {
- public function getUsername() {
+ public function getUsername(): ?string {
return 'dummy';
}
- public function getWorkgroup() {
+ public function getWorkgroup(): ?string {
return 'dummy';
}
- public function getPassword() {
+ public function getPassword(): ?string {
return null;
}
- public function getExtraCommandLineArguments() {
+ public function getExtraCommandLineArguments(): string {
return '-k';
}
- public function setExtraSmbClientOptions($smbClientState) {
+ public function setExtraSmbClientOptions($smbClientState): void {
smbclient_option_set($smbClientState, SMBCLIENT_OPT_USE_KERBEROS, true);
smbclient_option_set($smbClientState, SMBCLIENT_OPT_FALLBACK_AFTER_KERBEROS, false);
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php
index d8be57c7311..539bb728426 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php
@@ -8,88 +8,71 @@
namespace Icewind\SMB\Native;
use Icewind\SMB\ACL;
+use Icewind\SMB\Exception\Exception;
use Icewind\SMB\IFileInfo;
class NativeFileInfo implements IFileInfo {
- /**
- * @var string
- */
+ /** @var string */
protected $path;
-
- /**
- * @var string
- */
+ /** @var string */
protected $name;
-
- /**
- * @var NativeShare
- */
+ /** @var NativeShare */
protected $share;
-
- /**
- * @var array|null
- */
+ /** @var array{"mode": int, "size": int, "write_time": int}|null */
protected $attributeCache = null;
- /**
- * @param NativeShare $share
- * @param string $path
- * @param string $name
- */
- public function __construct($share, $path, $name) {
+ public function __construct(NativeShare $share, string $path, string $name) {
$this->share = $share;
$this->path = $path;
$this->name = $name;
}
- /**
- * @return string
- */
- public function getPath() {
+ public function getPath(): string {
return $this->path;
}
- /**
- * @return string
- */
- public function getName() {
+ public function getName(): string {
return $this->name;
}
/**
- * @return array
+ * @return array{"mode": int, "size": int, "write_time": int}
*/
- protected function stat() {
+ protected function stat(): array {
if (is_null($this->attributeCache)) {
$rawAttributes = explode(',', $this->share->getAttribute($this->path, 'system.dos_attr.*'));
- $this->attributeCache = [];
+ $attributes = [];
foreach ($rawAttributes as $rawAttribute) {
list($name, $value) = explode(':', $rawAttribute);
$name = strtolower($name);
if ($name == 'mode') {
- $this->attributeCache[$name] = (int)hexdec(substr($value, 2));
+ $attributes[$name] = (int)hexdec(substr($value, 2));
} else {
- $this->attributeCache[$name] = (int)$value;
+ $attributes[$name] = (int)$value;
}
}
+ if (!isset($attributes['mode'])) {
+ throw new Exception("Invalid attribute response");
+ }
+ if (!isset($attributes['size'])) {
+ throw new Exception("Invalid attribute response");
+ }
+ if (!isset($attributes['write_time'])) {
+ throw new Exception("Invalid attribute response");
+ }
+ $this->attributeCache = $attributes;
}
return $this->attributeCache;
}
- /**
- * @return int
- */
- public function getSize() {
+ public function getSize(): int {
$stat = $this->stat();
return $stat['size'];
}
- /**
- * @return int
- */
- public function getMTime() {
+ public function getMTime(): int {
$stat = $this->stat();
- return $stat['change_time'];
+ return $stat['write_time'];
}
/**
@@ -104,22 +87,16 @@ class NativeFileInfo implements IFileInfo {
* as false (except for `hidden` where we use the unix dotfile convention)
*/
- /**
- * @return int
- */
- protected function getMode() {
+ protected function getMode(): int {
$mode = $this->stat()['mode'];
// Let us ignore the ATTR_NOT_CONTENT_INDEXED for now
$mode &= ~0x00002000;
-
+
return $mode;
}
- /**
- * @return bool
- */
- public function isDirectory() {
+ public function isDirectory(): bool {
$mode = $this->getMode();
if ($mode > 0x1000) {
return (bool)($mode & 0x4000); // 0x4000: unix directory flag
@@ -128,10 +105,7 @@ class NativeFileInfo implements IFileInfo {
}
}
- /**
- * @return bool
- */
- public function isReadOnly() {
+ public function isReadOnly(): bool {
$mode = $this->getMode();
if ($mode > 0x1000) {
return !(bool)($mode & 0x80); // 0x80: owner write permissions
@@ -140,10 +114,7 @@ class NativeFileInfo implements IFileInfo {
}
}
- /**
- * @return bool
- */
- public function isHidden() {
+ public function isHidden(): bool {
$mode = $this->getMode();
if ($mode > 0x1000) {
return strlen($this->name) > 0 && $this->name[0] === '.';
@@ -152,10 +123,7 @@ class NativeFileInfo implements IFileInfo {
}
}
- /**
- * @return bool
- */
- public function isSystem() {
+ public function isSystem(): bool {
$mode = $this->getMode();
if ($mode > 0x1000) {
return false;
@@ -164,10 +132,7 @@ class NativeFileInfo implements IFileInfo {
}
}
- /**
- * @return bool
- */
- public function isArchived() {
+ public function isArchived(): bool {
$mode = $this->getMode();
if ($mode > 0x1000) {
return false;
@@ -185,10 +150,11 @@ class NativeFileInfo implements IFileInfo {
foreach (explode(',', $attribute) as $acl) {
list($user, $permissions) = explode(':', $acl, 2);
+ $user = trim($user, '\\');
list($type, $flags, $mask) = explode('/', $permissions);
$mask = hexdec($mask);
- $acls[$user] = new ACL($type, $flags, $mask);
+ $acls[$user] = new ACL((int)$type, (int)$flags, (int)$mask);
}
return $acls;
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeReadStream.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeReadStream.php
index fe0af760d3f..f39ec4db392 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeReadStream.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeReadStream.php
@@ -7,64 +7,54 @@
namespace Icewind\SMB\Native;
+use Icewind\SMB\StringBuffer;
+
/**
* Stream optimized for read only usage
*/
class NativeReadStream extends NativeStream {
const CHUNK_SIZE = 1048576; // 1MB chunks
- /**
- * @var resource
- */
- private $readBuffer = null;
- private $bufferSize = 0;
+ /** @var StringBuffer */
+ private $readBuffer;
+ public function __construct() {
+ $this->readBuffer = new StringBuffer();
+ }
+
+ /** @var int */
private $pos = 0;
public function stream_open($path, $mode, $options, &$opened_path) {
- $this->readBuffer = fopen('php://memory', 'r+');
-
return parent::stream_open($path, $mode, $options, $opened_path);
}
/**
* Wrap a stream from libsmbclient-php into a regular php stream
*
- * @param \Icewind\SMB\NativeState $state
+ * @param NativeState $state
* @param resource $smbStream
* @param string $mode
* @param string $url
* @return resource
*/
- public static function wrap($state, $smbStream, $mode, $url) {
- stream_wrapper_register('nativesmb', NativeReadStream::class);
- $context = stream_context_create([
- 'nativesmb' => [
- 'state' => $state,
- 'handle' => $smbStream,
- 'url' => $url
- ]
- ]);
- $fh = fopen('nativesmb://', $mode, false, $context);
- stream_wrapper_unregister('nativesmb');
- return $fh;
+ public static function wrap(NativeState $state, $smbStream, string $mode, string $url) {
+ return parent::wrapClass($state, $smbStream, $mode, $url, NativeReadStream::class);
}
public function stream_read($count) {
// php reads 8192 bytes at once
// however due to network latency etc, it's faster to read in larger chunks
// and buffer the result
- if (!parent::stream_eof() && $this->bufferSize < $count) {
- $remaining = $this->readBuffer;
- $this->readBuffer = fopen('php://memory', 'r+');
- $this->bufferSize = 0;
- stream_copy_to_stream($remaining, $this->readBuffer);
- $this->bufferSize += fwrite($this->readBuffer, parent::stream_read(self::CHUNK_SIZE));
- fseek($this->readBuffer, 0);
+ if (!parent::stream_eof() && $this->readBuffer->remaining() < $count) {
+ $chunk = parent::stream_read(self::CHUNK_SIZE);
+ if ($chunk === false) {
+ return false;
+ }
+ $this->readBuffer->push($chunk);
}
- $result = fread($this->readBuffer, $count);
- $this->bufferSize -= $count;
+ $result = $this->readBuffer->read($count);
$read = strlen($result);
$this->pos += $read;
@@ -75,15 +65,18 @@ class NativeReadStream extends NativeStream {
public function stream_seek($offset, $whence = SEEK_SET) {
$result = parent::stream_seek($offset, $whence);
if ($result) {
- $this->readBuffer = fopen('php://memory', 'r+');
- $this->bufferSize = 0;
- $this->pos = parent::stream_tell();
+ $this->readBuffer->clear();
+ $pos = parent::stream_tell();
+ if ($pos === false) {
+ return false;
+ }
+ $this->pos = $pos;
}
return $result;
}
public function stream_eof() {
- return $this->bufferSize <= 0 && parent::stream_eof();
+ return $this->readBuffer->remaining() <= 0 && parent::stream_eof();
}
public function stream_tell() {
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeServer.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeServer.php
index aadb05d0fea..68b6c46ca2f 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeServer.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeServer.php
@@ -8,10 +8,13 @@
namespace Icewind\SMB\Native;
use Icewind\SMB\AbstractServer;
+use Icewind\SMB\Exception\AuthenticationException;
+use Icewind\SMB\Exception\InvalidHostException;
use Icewind\SMB\IAuth;
use Icewind\SMB\IOptions;
+use Icewind\SMB\IShare;
use Icewind\SMB\ISystem;
-use Icewind\SMB\TimeZoneProvider;
+use Icewind\SMB\ITimeZoneProvider;
class NativeServer extends AbstractServer {
/**
@@ -19,38 +22,34 @@ class NativeServer extends AbstractServer {
*/
protected $state;
- public function __construct($host, IAuth $auth, ISystem $system, TimeZoneProvider $timeZoneProvider, IOptions $options) {
+ public function __construct(string $host, IAuth $auth, ISystem $system, ITimeZoneProvider $timeZoneProvider, IOptions $options) {
parent::__construct($host, $auth, $system, $timeZoneProvider, $options);
$this->state = new NativeState();
}
- protected function connect() {
+ protected function connect(): void {
$this->state->init($this->getAuth(), $this->getOptions());
}
/**
- * @return \Icewind\SMB\IShare[]
- * @throws \Icewind\SMB\Exception\AuthenticationException
- * @throws \Icewind\SMB\Exception\InvalidHostException
+ * @return IShare[]
+ * @throws AuthenticationException
+ * @throws InvalidHostException
*/
- public function listShares() {
+ public function listShares(): array {
$this->connect();
$shares = [];
$dh = $this->state->opendir('smb://' . $this->getHost());
- while ($share = $this->state->readdir($dh)) {
+ while ($share = $this->state->readdir($dh, '')) {
if ($share['type'] === 'file share') {
$shares[] = $this->getShare($share['name']);
}
}
- $this->state->closedir($dh);
+ $this->state->closedir($dh, '');
return $shares;
}
- /**
- * @param string $name
- * @return \Icewind\SMB\IShare
- */
- public function getShare($name) {
+ public function getShare(string $name): IShare {
return new NativeShare($this, $name);
}
@@ -60,7 +59,7 @@ class NativeServer extends AbstractServer {
* @param ISystem $system
* @return bool
*/
- public static function available(ISystem $system) {
+ public static function available(ISystem $system): bool {
return $system->libSmbclientAvailable();
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php
index 5368538edca..03ec501b830 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php
@@ -8,9 +8,16 @@
namespace Icewind\SMB\Native;
use Icewind\SMB\AbstractShare;
+use Icewind\SMB\Exception\AlreadyExistsException;
+use Icewind\SMB\Exception\AuthenticationException;
+use Icewind\SMB\Exception\ConnectionException;
use Icewind\SMB\Exception\DependencyException;
+use Icewind\SMB\Exception\InvalidHostException;
use Icewind\SMB\Exception\InvalidPathException;
use Icewind\SMB\Exception\InvalidResourceException;
+use Icewind\SMB\Exception\InvalidTypeException;
+use Icewind\SMB\Exception\NotFoundException;
+use Icewind\SMB\IFileInfo;
use Icewind\SMB\INotifyHandler;
use Icewind\SMB\IServer;
use Icewind\SMB\Wrapped\Server;
@@ -27,28 +34,22 @@ class NativeShare extends AbstractShare {
*/
private $name;
- /**
- * @var NativeState $state
- */
- private $state;
+ /** @var NativeState|null $state */
+ private $state = null;
- /**
- * @param IServer $server
- * @param string $name
- */
- public function __construct($server, $name) {
+ public function __construct(IServer $server, string $name) {
parent::__construct();
$this->server = $server;
$this->name = $name;
}
/**
- * @throws \Icewind\SMB\Exception\ConnectionException
- * @throws \Icewind\SMB\Exception\AuthenticationException
- * @throws \Icewind\SMB\Exception\InvalidHostException
+ * @throws ConnectionException
+ * @throws AuthenticationException
+ * @throws InvalidHostException
*/
- protected function getState() {
- if ($this->state and $this->state instanceof NativeState) {
+ protected function getState(): NativeState {
+ if ($this->state) {
return $this->state;
}
@@ -62,11 +63,11 @@ class NativeShare extends AbstractShare {
*
* @return string
*/
- public function getName() {
+ public function getName(): string {
return $this->name;
}
- private function buildUrl($path) {
+ private function buildUrl(string $path): string {
$this->verifyPath($path);
$url = sprintf('smb://%s/%s', $this->server->getHost(), $this->name);
if ($path) {
@@ -81,16 +82,16 @@ class NativeShare extends AbstractShare {
* List the content of a remote folder
*
* @param string $path
- * @return \Icewind\SMB\IFileInfo[]
+ * @return IFileInfo[]
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function dir($path) {
+ public function dir(string $path): array {
$files = [];
$dh = $this->getState()->opendir($this->buildUrl($path));
- while ($file = $this->getState()->readdir($dh)) {
+ while ($file = $this->getState()->readdir($dh, $path)) {
$name = $file['name'];
if ($name !== '.' and $name !== '..') {
$fullPath = $path . '/' . $name;
@@ -98,15 +99,15 @@ class NativeShare extends AbstractShare {
}
}
- $this->getState()->closedir($dh);
+ $this->getState()->closedir($dh, $path);
return $files;
}
/**
* @param string $path
- * @return \Icewind\SMB\IFileInfo
+ * @return IFileInfo
*/
- public function stat($path) {
+ public function stat(string $path): IFileInfo {
$info = new NativeFileInfo($this, $path, self::mb_basename($path));
// trigger attribute loading
@@ -119,10 +120,10 @@ class NativeShare extends AbstractShare {
* Multibyte unicode safe version of basename()
*
* @param string $path
- * @link https://www.php.net/manual/en/function.basename.php#121405
+ * @link http://php.net/manual/en/function.basename.php#121405
* @return string
*/
- protected static function mb_basename($path) {
+ protected static function mb_basename(string $path): string {
if (preg_match('@^.*[\\\\/]([^\\\\/]+)$@s', $path, $matches)) {
return $matches[1];
} elseif (preg_match('@^([^\\\\/]+)$@s', $path, $matches)) {
@@ -138,10 +139,10 @@ class NativeShare extends AbstractShare {
* @param string $path
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\AlreadyExistsException
+ * @throws NotFoundException
+ * @throws AlreadyExistsException
*/
- public function mkdir($path) {
+ public function mkdir(string $path): bool {
return $this->getState()->mkdir($this->buildUrl($path));
}
@@ -151,10 +152,10 @@ class NativeShare extends AbstractShare {
* @param string $path
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function rmdir($path) {
+ public function rmdir(string $path): bool {
return $this->getState()->rmdir($this->buildUrl($path));
}
@@ -164,10 +165,10 @@ class NativeShare extends AbstractShare {
* @param string $path
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function del($path) {
+ public function del(string $path): bool {
return $this->getState()->unlink($this->buildUrl($path));
}
@@ -178,10 +179,10 @@ class NativeShare extends AbstractShare {
* @param string $to
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\AlreadyExistsException
+ * @throws NotFoundException
+ * @throws AlreadyExistsException
*/
- public function rename($from, $to) {
+ public function rename(string $from, string $to): bool {
return $this->getState()->rename($this->buildUrl($from), $this->buildUrl($to));
}
@@ -192,10 +193,10 @@ class NativeShare extends AbstractShare {
* @param string $target remove file
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function put($source, $target) {
+ public function put(string $source, string $target): bool {
$sourceHandle = fopen($source, 'rb');
$targetUrl = $this->buildUrl($target);
@@ -215,20 +216,18 @@ class NativeShare extends AbstractShare {
* @param string $target local file
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
- * @throws \Icewind\SMB\Exception\InvalidPathException
- * @throws \Icewind\SMB\Exception\InvalidResourceException
+ * @throws AuthenticationException
+ * @throws ConnectionException
+ * @throws InvalidHostException
+ * @throws InvalidPathException
+ * @throws InvalidResourceException
*/
- public function get($source, $target) {
+ public function get(string $source, string $target): bool {
if (!$target) {
throw new InvalidPathException('Invalid target path: Filename cannot be empty');
}
$sourceHandle = $this->getState()->open($this->buildUrl($source), 'r');
- if (!$sourceHandle) {
- throw new InvalidResourceException('Failed opening remote file "' . $source . '" for reading');
- }
$targetHandle = @fopen($target, 'wb');
if (!$targetHandle) {
@@ -242,7 +241,7 @@ class NativeShare extends AbstractShare {
throw new InvalidResourceException('Failed opening local file "' . $target . '" for writing: ' . $reason);
}
- while ($data = $this->getState()->read($sourceHandle, NativeReadStream::CHUNK_SIZE)) {
+ while ($data = $this->getState()->read($sourceHandle, NativeReadStream::CHUNK_SIZE, $source)) {
fwrite($targetHandle, $data);
}
$this->getState()->close($sourceHandle, $this->buildUrl($source));
@@ -255,10 +254,10 @@ class NativeShare extends AbstractShare {
* @param string $source
* @return resource a read only stream with the contents of the remote file
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function read($source) {
+ public function read(string $source) {
$url = $this->buildUrl($source);
$handle = $this->getState()->open($url, 'r');
return NativeReadStream::wrap($this->getState(), $handle, 'r', $url);
@@ -271,10 +270,10 @@ class NativeShare extends AbstractShare {
* @param string $source
* @return resource a writeable stream
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function write($source) {
+ public function write(string $source) {
$url = $this->buildUrl($source);
$handle = $this->getState()->create($url);
return NativeWriteStream::wrap($this->getState(), $handle, 'w', $url);
@@ -286,10 +285,10 @@ class NativeShare extends AbstractShare {
* @param string $source
* @return resource a writeable stream
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function append($source) {
+ public function append(string $source) {
$url = $this->buildUrl($source);
$handle = $this->getState()->open($url, "a+");
return NativeWriteStream::wrap($this->getState(), $handle, "a", $url);
@@ -302,7 +301,7 @@ class NativeShare extends AbstractShare {
* @param string $attribute attribute to get the info
* @return string the attribute value
*/
- public function getAttribute($path, $attribute) {
+ public function getAttribute(string $path, string $attribute): string {
return $this->getState()->getxattr($this->buildUrl($path), $attribute);
}
@@ -314,9 +313,13 @@ class NativeShare extends AbstractShare {
* @param string|int $value
* @return mixed the attribute value
*/
- public function setAttribute($path, $attribute, $value) {
- if ($attribute === 'system.dos_attr.mode' and is_int($value)) {
- $value = '0x' . dechex($value);
+ public function setAttribute(string $path, string $attribute, $value) {
+ if (is_int($value)) {
+ if ($attribute === 'system.dos_attr.mode') {
+ $value = '0x' . dechex($value);
+ } else {
+ throw new \InvalidArgumentException("Invalid value for attribute");
+ }
}
return $this->getState()->setxattr($this->buildUrl($path), $attribute, $value);
@@ -329,7 +332,7 @@ class NativeShare extends AbstractShare {
* @param int $mode a combination of FileInfo::MODE_READONLY, FileInfo::MODE_ARCHIVE, FileInfo::MODE_SYSTEM and FileInfo::MODE_HIDDEN, FileInfo::NORMAL
* @return mixed
*/
- public function setMode($path, $mode) {
+ public function setMode(string $path, int $mode) {
return $this->setAttribute($path, 'system.dos_attr.mode', $mode);
}
@@ -340,7 +343,7 @@ class NativeShare extends AbstractShare {
* @param string $path
* @return INotifyHandler
*/
- public function notify($path) {
+ public function notify(string $path): INotifyHandler {
// php-smbclient does not support notify (https://github.com/eduardok/libsmbclient-php/issues/29)
// so we use the smbclient based backend for this
if (!Server::available($this->server->getSystem())) {
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php
index 3bfb1c3da24..10ba6ce0458 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php
@@ -29,13 +29,13 @@ use Icewind\SMB\IOptions;
* Low level wrapper for libsmbclient-php with error handling
*/
class NativeState {
- /**
- * @var resource
- */
- protected $state;
+ /** @var resource|null */
+ protected $state = null;
+ /** @var bool */
protected $handlerSet = false;
+ /** @var bool */
protected $connected = false;
// see error.h
@@ -58,7 +58,8 @@ class NativeState {
113 => NoRouteToHostException::class
];
- protected function handleError($path) {
+ protected function handleError(?string $path): void {
+ /** @var int $error */
$error = smbclient_state_errno($this->state);
if ($error === 0) {
return;
@@ -66,14 +67,19 @@ class NativeState {
throw Exception::fromMap(self::EXCEPTION_MAP, $error, $path);
}
- protected function testResult($result, $uri) {
+ /**
+ * @param mixed $result
+ * @param string|null $uri
+ * @throws Exception
+ */
+ protected function testResult($result, ?string $uri): void {
if ($result === false or $result === null) {
// smb://host/share/path
if (is_string($uri) && count(explode('/', $uri, 5)) > 4) {
list(, , , , $path) = explode('/', $uri, 5);
$path = '/' . $path;
} else {
- $path = null;
+ $path = $uri;
}
$this->handleError($path);
}
@@ -88,10 +94,21 @@ class NativeState {
if ($this->connected) {
return true;
}
- $this->state = smbclient_state_new();
+ /** @var resource $state */
+ $state = smbclient_state_new();
+ $this->state = $state;
smbclient_option_set($this->state, SMBCLIENT_OPT_AUTO_ANONYMOUS_LOGIN, false);
smbclient_option_set($this->state, SMBCLIENT_OPT_TIMEOUT, $options->getTimeout() * 1000);
+
+ if (function_exists('smbclient_client_protocols')) {
+ $maxProtocol = $options->getMaxProtocol();
+ $minProtocol = $options->getMinProtocol();
+
+ smbclient_client_protocols($this->state, $minProtocol, $maxProtocol);
+ }
+
$auth->setExtraSmbClientOptions($this->state);
+ /** @var bool $result */
$result = @smbclient_state_init($this->state, $auth->getWorkgroup(), $auth->getUsername(), $auth->getPassword());
$this->testResult($result, '');
@@ -103,7 +120,8 @@ class NativeState {
* @param string $uri
* @return resource
*/
- public function opendir($uri) {
+ public function opendir(string $uri) {
+ /** @var resource $result */
$result = @smbclient_opendir($this->state, $uri);
$this->testResult($result, $uri);
@@ -112,23 +130,27 @@ class NativeState {
/**
* @param resource $dir
- * @return array
+ * @param string $path
+ * @return array{"type": string, "comment": string, "name": string}|false
*/
- public function readdir($dir) {
+ public function readdir($dir, string $path) {
+ /** @var array{"type": string, "comment": string, "name": string}|false $result */
$result = @smbclient_readdir($this->state, $dir);
- $this->testResult($result, $dir);
+ $this->testResult($result, $path);
return $result;
}
/**
- * @param $dir
+ * @param resource $dir
+ * @param string $path
* @return bool
*/
- public function closedir($dir) {
+ public function closedir($dir, string $path): bool {
+ /** @var bool $result */
$result = smbclient_closedir($this->state, $dir);
- $this->testResult($result, $dir);
+ $this->testResult($result, $path);
return $result;
}
@@ -137,7 +159,8 @@ class NativeState {
* @param string $new
* @return bool
*/
- public function rename($old, $new) {
+ public function rename(string $old, string $new): bool {
+ /** @var bool $result */
$result = @smbclient_rename($this->state, $old, $this->state, $new);
$this->testResult($result, $new);
@@ -148,7 +171,8 @@ class NativeState {
* @param string $uri
* @return bool
*/
- public function unlink($uri) {
+ public function unlink(string $uri): bool {
+ /** @var bool $result */
$result = @smbclient_unlink($this->state, $uri);
$this->testResult($result, $uri);
@@ -160,7 +184,8 @@ class NativeState {
* @param int $mask
* @return bool
*/
- public function mkdir($uri, $mask = 0777) {
+ public function mkdir(string $uri, int $mask = 0777): bool {
+ /** @var bool $result */
$result = @smbclient_mkdir($this->state, $uri, $mask);
$this->testResult($result, $uri);
@@ -171,7 +196,8 @@ class NativeState {
* @param string $uri
* @return bool
*/
- public function rmdir($uri) {
+ public function rmdir(string $uri): bool {
+ /** @var bool $result */
$result = @smbclient_rmdir($this->state, $uri);
$this->testResult($result, $uri);
@@ -180,9 +206,10 @@ class NativeState {
/**
* @param string $uri
- * @return array
+ * @return array{"mtime": int, "size": int, "mode": int}
*/
- public function stat($uri) {
+ public function stat(string $uri): array {
+ /** @var array{"mtime": int, "size": int, "mode": int} $result */
$result = @smbclient_stat($this->state, $uri);
$this->testResult($result, $uri);
@@ -191,12 +218,14 @@ class NativeState {
/**
* @param resource $file
- * @return array
+ * @param string $path
+ * @return array{"mtime": int, "size": int, "mode": int}
*/
- public function fstat($file) {
+ public function fstat($file, string $path): array {
+ /** @var array{"mtime": int, "size": int, "mode": int} $result */
$result = @smbclient_fstat($this->state, $file);
- $this->testResult($result, $file);
+ $this->testResult($result, $path);
return $result;
}
@@ -206,7 +235,8 @@ class NativeState {
* @param int $mask
* @return resource
*/
- public function open($uri, $mode, $mask = 0666) {
+ public function open(string $uri, string $mode, int $mask = 0666) {
+ /** @var resource $result */
$result = @smbclient_open($this->state, $uri, $mode, $mask);
$this->testResult($result, $uri);
@@ -218,7 +248,8 @@ class NativeState {
* @param int $mask
* @return resource
*/
- public function create($uri, $mask = 0666) {
+ public function create(string $uri, int $mask = 0666) {
+ /** @var resource $result */
$result = @smbclient_creat($this->state, $uri, $mask);
$this->testResult($result, $uri);
@@ -228,12 +259,14 @@ class NativeState {
/**
* @param resource $file
* @param int $bytes
+ * @param string $path
* @return string
*/
- public function read($file, $bytes) {
+ public function read($file, int $bytes, string $path): string {
+ /** @var string $result */
$result = @smbclient_read($this->state, $file, $bytes);
- $this->testResult($result, $file);
+ $this->testResult($result, $path);
return $result;
}
@@ -241,10 +274,11 @@ class NativeState {
* @param resource $file
* @param string $data
* @param string $path
- * @param int $length
+ * @param int|null $length
* @return int
*/
- public function write($file, $data, $path, $length = null) {
+ public function write($file, string $data, string $path, ?int $length = null): int {
+ /** @var int $result */
$result = @smbclient_write($this->state, $file, $data, $length);
$this->testResult($result, $path);
@@ -255,28 +289,38 @@ class NativeState {
* @param resource $file
* @param int $offset
* @param int $whence SEEK_SET | SEEK_CUR | SEEK_END
- * @return int|bool new file offset as measured from the start of the file on success, false on failure.
+ * @param string|null $path
+ * @return int|false new file offset as measured from the start of the file on success.
*/
- public function lseek($file, $offset, $whence = SEEK_SET) {
+ public function lseek($file, int $offset, int $whence = SEEK_SET, string $path = null) {
+ /** @var int|false $result */
$result = @smbclient_lseek($this->state, $file, $offset, $whence);
- $this->testResult($result, $file);
+ $this->testResult($result, $path);
return $result;
}
/**
* @param resource $file
* @param int $size
+ * @param string $path
* @return bool
*/
- public function ftruncate($file, $size) {
+ public function ftruncate($file, int $size, string $path): bool {
+ /** @var bool $result */
$result = @smbclient_ftruncate($this->state, $file, $size);
- $this->testResult($result, $file);
+ $this->testResult($result, $path);
return $result;
}
- public function close($file, $path) {
+ /**
+ * @param resource $file
+ * @param string $path
+ * @return bool
+ */
+ public function close($file, string $path): bool {
+ /** @var bool $result */
$result = @smbclient_close($this->state, $file);
$this->testResult($result, $path);
@@ -288,7 +332,8 @@ class NativeState {
* @param string $key
* @return string
*/
- public function getxattr($uri, $key) {
+ public function getxattr(string $uri, string $key) {
+ /** @var string $result */
$result = @smbclient_getxattr($this->state, $uri, $key);
$this->testResult($result, $uri);
@@ -300,9 +345,10 @@ class NativeState {
* @param string $key
* @param string $value
* @param int $flags
- * @return mixed
+ * @return bool
*/
- public function setxattr($uri, $key, $value, $flags = 0) {
+ public function setxattr(string $uri, string $key, string $value, int $flags = 0) {
+ /** @var bool $result */
$result = @smbclient_setxattr($this->state, $uri, $key, $value, $flags);
$this->testResult($result, $uri);
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeStream.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeStream.php
index c75afaa5f1d..216c27f78e3 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeStream.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeStream.php
@@ -10,20 +10,24 @@ namespace Icewind\SMB\Native;
use Icewind\SMB\Exception\Exception;
use Icewind\SMB\Exception\InvalidRequestException;
use Icewind\Streams\File;
+use InvalidArgumentException;
-class NativeStream implements File {
+abstract class NativeStream implements File {
/**
* @var resource
+ * @psalm-suppress PropertyNotSetInConstructor
*/
public $context;
/**
* @var NativeState
+ * @psalm-suppress PropertyNotSetInConstructor
*/
protected $state;
/**
* @var resource
+ * @psalm-suppress PropertyNotSetInConstructor
*/
protected $handle;
@@ -35,19 +39,20 @@ class NativeStream implements File {
/**
* @var string
*/
- protected $url;
+ protected $url = '';
/**
* Wrap a stream from libsmbclient-php into a regular php stream
*
- * @param \Icewind\SMB\NativeState $state
+ * @param NativeState $state
* @param resource $smbStream
* @param string $mode
* @param string $url
+ * @param class-string<NativeStream> $class
* @return resource
*/
- public static function wrap($state, $smbStream, $mode, $url) {
- stream_wrapper_register('nativesmb', NativeStream::class);
+ protected static function wrapClass(NativeState $state, $smbStream, string $mode, string $url, string $class) {
+ stream_wrapper_register('nativesmb', $class);
$context = stream_context_create([
'nativesmb' => [
'state' => $state,
@@ -73,19 +78,35 @@ class NativeStream implements File {
}
public function stream_flush() {
+ return false;
}
public function stream_open($path, $mode, $options, &$opened_path) {
$context = stream_context_get_options($this->context);
- $this->state = $context['nativesmb']['state'];
- $this->handle = $context['nativesmb']['handle'];
- $this->url = $context['nativesmb']['url'];
+ if (!isset($context['nativesmb']) || !is_array($context['nativesmb'])) {
+ throw new InvalidArgumentException("context not set");
+ }
+ $state = $context['nativesmb']['state'];
+ if (!$state instanceof NativeState) {
+ throw new InvalidArgumentException("invalid context set");
+ }
+ $this->state = $state;
+ $handle = $context['nativesmb']['handle'];
+ if (!is_resource($handle)) {
+ throw new InvalidArgumentException("invalid context set");
+ }
+ $this->handle = $handle;
+ $url = $context['nativesmb']['url'];
+ if (!is_string($url)) {
+ throw new InvalidArgumentException("invalid context set");
+ }
+ $this->url = $url;
return true;
}
public function stream_read($count) {
- $result = $this->state->read($this->handle, $count);
+ $result = $this->state->read($this->handle, $count, $this->url);
if (strlen($result) < $count) {
$this->eof = true;
}
@@ -95,12 +116,15 @@ class NativeStream implements File {
public function stream_seek($offset, $whence = SEEK_SET) {
$this->eof = false;
try {
- return $this->state->lseek($this->handle, $offset, $whence) !== false;
+ return $this->state->lseek($this->handle, $offset, $whence, $this->url) !== false;
} catch (InvalidRequestException $e) {
return false;
}
}
+ /**
+ * @return array{"mtime": int, "size": int, "mode": int}|false
+ */
public function stream_stat() {
try {
return $this->state->stat($this->url);
@@ -110,7 +134,7 @@ class NativeStream implements File {
}
public function stream_tell() {
- return $this->state->lseek($this->handle, 0, SEEK_CUR);
+ return $this->state->lseek($this->handle, 0, SEEK_CUR, $this->url);
}
public function stream_write($data) {
@@ -118,7 +142,7 @@ class NativeStream implements File {
}
public function stream_truncate($size) {
- return $this->state->ftruncate($this->handle, $size);
+ return $this->state->ftruncate($this->handle, $size, $this->url);
}
public function stream_set_option($option, $arg1, $arg2) {
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeWriteStream.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeWriteStream.php
index 4e90e5a655d..7c27499764c 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeWriteStream.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeWriteStream.php
@@ -7,71 +7,63 @@
namespace Icewind\SMB\Native;
+use Icewind\SMB\StringBuffer;
+
/**
* Stream optimized for write only usage
*/
class NativeWriteStream extends NativeStream {
const CHUNK_SIZE = 1048576; // 1MB chunks
- /**
- * @var resource
- */
- private $writeBuffer = null;
- private $bufferSize = 0;
+ /** @var StringBuffer */
+ private $writeBuffer;
+ /** @var int */
private $pos = 0;
- public function stream_open($path, $mode, $options, &$opened_path) {
- $this->writeBuffer = fopen('php://memory', 'r+');
+ public function __construct() {
+ $this->writeBuffer = new StringBuffer();
+ }
+ public function stream_open($path, $mode, $options, &$opened_path): bool {
return parent::stream_open($path, $mode, $options, $opened_path);
}
/**
* Wrap a stream from libsmbclient-php into a regular php stream
*
- * @param \Icewind\SMB\NativeState $state
+ * @param NativeState $state
* @param resource $smbStream
* @param string $mode
* @param string $url
* @return resource
*/
- public static function wrap($state, $smbStream, $mode, $url) {
- stream_wrapper_register('nativesmb', NativeWriteStream::class);
- $context = stream_context_create([
- 'nativesmb' => [
- 'state' => $state,
- 'handle' => $smbStream,
- 'url' => $url
- ]
- ]);
- $fh = fopen('nativesmb://', $mode, false, $context);
- stream_wrapper_unregister('nativesmb');
- return $fh;
+ public static function wrap(NativeState $state, $smbStream, string $mode, string $url) {
+ return parent::wrapClass($state, $smbStream, $mode, $url, NativeWriteStream::class);
}
public function stream_seek($offset, $whence = SEEK_SET) {
$this->flushWrite();
$result = parent::stream_seek($offset, $whence);
if ($result) {
- $this->pos = parent::stream_tell();
+ $pos = parent::stream_tell();
+ if ($pos === false) {
+ return false;
+ }
+ $this->pos = $pos;
}
return $result;
}
- private function flushWrite() {
- rewind($this->writeBuffer);
- $this->state->write($this->handle, stream_get_contents($this->writeBuffer), $this->url);
- $this->writeBuffer = fopen('php://memory', 'r+');
- $this->bufferSize = 0;
+ private function flushWrite(): void {
+ parent::stream_write($this->writeBuffer->flush());
}
public function stream_write($data) {
- $written = fwrite($this->writeBuffer, $data);
- $this->bufferSize += $written;
+ $written = $this->writeBuffer->push($data);
$this->pos += $written;
- if ($this->bufferSize >= self::CHUNK_SIZE) {
+ if ($this->writeBuffer->remaining() >= self::CHUNK_SIZE) {
$this->flushWrite();
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Options.php b/apps/files_external/3rdparty/icewind/smb/src/Options.php
index 7a0d0149b73..f590594b993 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Options.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Options.php
@@ -25,11 +25,32 @@ class Options implements IOptions {
/** @var int */
private $timeout = 20;
- public function getTimeout() {
+ /** @var string|null */
+ private $minProtocol;
+ /** @var string|null */
+ private $maxProtocol;
+
+ public function getTimeout(): int {
return $this->timeout;
}
- public function setTimeout($timeout) {
+ public function setTimeout(int $timeout): void {
$this->timeout = $timeout;
}
+
+ public function getMinProtocol(): ?string {
+ return $this->minProtocol;
+ }
+
+ public function setMinProtocol(?string $minProtocol): void {
+ $this->minProtocol = $minProtocol;
+ }
+
+ public function getMaxProtocol(): ?string {
+ return $this->maxProtocol;
+ }
+
+ public function setMaxProtocol(?string $maxProtocol): void {
+ $this->maxProtocol = $maxProtocol;
+ }
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/ServerFactory.php b/apps/files_external/3rdparty/icewind/smb/src/ServerFactory.php
index 807b0b872cf..4c579d06843 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/ServerFactory.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/ServerFactory.php
@@ -31,7 +31,7 @@ class ServerFactory {
Server::class
];
- /** @var System */
+ /** @var ISystem */
private $system;
/** @var IOptions */
@@ -68,12 +68,12 @@ class ServerFactory {
/**
- * @param $host
+ * @param string $host
* @param IAuth $credentials
* @return IServer
* @throws DependencyException
*/
- public function createServer($host, IAuth $credentials) {
+ public function createServer(string $host, IAuth $credentials): IServer {
foreach (self::BACKENDS as $backend) {
if (call_user_func("$backend::available", $this->system)) {
return new $backend($host, $credentials, $this->system, $this->timeZoneProvider, $this->options);
diff --git a/apps/files_external/3rdparty/icewind/smb/src/StringBuffer.php b/apps/files_external/3rdparty/icewind/smb/src/StringBuffer.php
new file mode 100644
index 00000000000..85661218760
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/smb/src/StringBuffer.php
@@ -0,0 +1,63 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2021 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Icewind\SMB;
+
+class StringBuffer {
+ /** @var string */
+ private $buffer = "";
+ /** @var int */
+ private $pos = 0;
+
+ public function clear(): void {
+ $this->buffer = "";
+ $this->pos = 0;
+ }
+
+ public function push(string $data): int {
+ $this->buffer = $this->flush() . $data;
+ return strlen($data);
+ }
+
+ public function remaining(): int {
+ return strlen($this->buffer) - $this->pos;
+ }
+
+ public function read(int $count): string {
+ $chunk = substr($this->buffer, $this->pos, $this->pos + $count);
+ $this->pos += strlen($chunk);
+ return $chunk;
+ }
+
+ public function flush(): string {
+ if ($this->pos === 0) {
+ $remaining = $this->buffer;
+ } else {
+ $remaining = substr($this->buffer, $this->pos);
+ }
+
+ $this->clear();
+
+ return $remaining;
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/System.php b/apps/files_external/3rdparty/icewind/smb/src/System.php
index 0e41ee032d6..919907477ab 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/System.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/System.php
@@ -10,7 +10,7 @@ namespace Icewind\SMB;
use Icewind\SMB\Exception\Exception;
class System implements ISystem {
- /** @var (string|bool)[] */
+ /** @var (string|null)[] */
private $paths = [];
/**
@@ -20,7 +20,7 @@ class System implements ISystem {
* @return string
* @throws Exception
*/
- public function getFD($num) {
+ public function getFD(int $num): string {
$folders = [
'/proc/self/fd',
'/dev/fd'
@@ -33,36 +33,36 @@ class System implements ISystem {
throw new Exception('Cant find file descriptor path');
}
- public function getSmbclientPath() {
+ public function getSmbclientPath(): ?string {
return $this->getBinaryPath('smbclient');
}
- public function getNetPath() {
+ public function getNetPath(): ?string {
return $this->getBinaryPath('net');
}
- public function getSmbcAclsPath() {
+ public function getSmbcAclsPath(): ?string {
return $this->getBinaryPath('smbcacls');
}
- public function getStdBufPath() {
+ public function getStdBufPath(): ?string {
return $this->getBinaryPath('stdbuf');
}
- public function getDatePath() {
+ public function getDatePath(): ?string {
return $this->getBinaryPath('date');
}
- public function libSmbclientAvailable() {
+ public function libSmbclientAvailable(): bool {
return function_exists('smbclient_state_new');
}
- protected function getBinaryPath($binary) {
+ protected function getBinaryPath(string $binary): ?string {
if (!isset($this->paths[$binary])) {
$result = null;
$output = [];
exec("which $binary 2>&1", $output, $result);
- $this->paths[$binary] = $result === 0 ? trim(implode('', $output)) : false;
+ $this->paths[$binary] = $result === 0 ? trim(implode('', $output)) : null;
}
return $this->paths[$binary];
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
index 7ae049c406f..4cd3b65681c 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
@@ -25,7 +25,7 @@ class TimeZoneProvider implements ITimeZoneProvider {
$this->system = $system;
}
- public function get($host) {
+ public function get(string $host): string {
if (!isset($this->timeZones[$host])) {
$timeZone = null;
$net = $this->system->getNetPath();
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php
index 347b63db110..31b72b05d97 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php
@@ -7,9 +7,11 @@
namespace Icewind\SMB\Wrapped;
+use Icewind\SMB\Exception\AccessDeniedException;
use Icewind\SMB\Exception\AuthenticationException;
use Icewind\SMB\Exception\ConnectException;
use Icewind\SMB\Exception\ConnectionException;
+use Icewind\SMB\Exception\ConnectionRefusedException;
use Icewind\SMB\Exception\InvalidHostException;
use Icewind\SMB\Exception\NoLoginServerException;
@@ -20,7 +22,12 @@ class Connection extends RawConnection {
/** @var Parser */
private $parser;
- public function __construct($command, Parser $parser, $env = []) {
+ /**
+ * @param string $command
+ * @param Parser $parser
+ * @param array<string, string> $env
+ */
+ public function __construct(string $command, Parser $parser, array $env = []) {
parent::__construct($command, $env);
$this->parser = $parser;
}
@@ -30,39 +37,48 @@ class Connection extends RawConnection {
*
* @param string $input
*/
- public function write($input) {
- parent::write($input . PHP_EOL);
+ public function write(string $input) {
+ return parent::write($input . PHP_EOL);
}
/**
* @throws ConnectException
*/
- public function clearTillPrompt() {
+ public function clearTillPrompt(): void {
$this->write('');
do {
$promptLine = $this->readLine();
+ if ($promptLine === false) {
+ break;
+ }
$this->parser->checkConnectionError($promptLine);
} while (!$this->isPrompt($promptLine));
- $this->write('');
+ if ($this->write('') === false) {
+ throw new ConnectionRefusedException();
+ }
$this->readLine();
}
/**
* get all unprocessed output from smbclient until the next prompt
*
- * @param callable $callback (optional) callback to call for every line read
+ * @param (callable(string):bool)|null $callback (optional) callback to call for every line read
* @return string[]
* @throws AuthenticationException
* @throws ConnectException
* @throws ConnectionException
* @throws InvalidHostException
* @throws NoLoginServerException
+ * @throws AccessDeniedException
*/
- public function read(callable $callback = null) {
+ public function read(callable $callback = null): array {
if (!$this->isValid()) {
throw new ConnectionException('Connection not valid');
}
$promptLine = $this->readLine(); //first line is prompt
+ if ($promptLine === false) {
+ $this->unknownError($promptLine);
+ }
$this->parser->checkConnectionError($promptLine);
$output = [];
@@ -74,7 +90,7 @@ class Connection extends RawConnection {
if ($line === false) {
$this->unknownError($promptLine);
}
- while (!$this->isPrompt($line)) { //next prompt functions as delimiter
+ while ($line !== false && !$this->isPrompt($line)) { //next prompt functions as delimiter
if (is_callable($callback)) {
$result = $callback($line);
if ($result === false) { // allow the callback to close the connection for infinite running commands
@@ -82,26 +98,21 @@ class Connection extends RawConnection {
break;
}
} else {
- $output[] .= $line;
+ $output[] = $line;
}
$line = $this->readLine();
}
return $output;
}
- /**
- * Check
- *
- * @param $line
- * @return bool
- */
- private function isPrompt($line) {
- return mb_substr($line, 0, self::DELIMITER_LENGTH) === self::DELIMITER || $line === false;
+ private function isPrompt(string $line): bool {
+ return mb_substr($line, 0, self::DELIMITER_LENGTH) === self::DELIMITER;
}
/**
- * @param string $promptLine (optional) prompt line that might contain some info about the error
+ * @param string|bool $promptLine (optional) prompt line that might contain some info about the error
* @throws ConnectException
+ * @return no-return
*/
private function unknownError($promptLine = '') {
if ($promptLine) { //maybe we have some error we missed on the previous line
@@ -116,7 +127,7 @@ class Connection extends RawConnection {
}
}
- public function close($terminate = true) {
+ public function close(bool $terminate = true): void {
if (get_resource_type($this->getInputStream()) === 'stream') {
// ignore any errors while trying to send the close command, the process might already be dead
@$this->write('close' . PHP_EOL);
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/FileInfo.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/FileInfo.php
index a310a6bc913..de5a696df7b 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/FileInfo.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/FileInfo.php
@@ -11,34 +11,17 @@ use Icewind\SMB\ACL;
use Icewind\SMB\IFileInfo;
class FileInfo implements IFileInfo {
- /**
- * @var string
- */
+ /** @var string */
protected $path;
-
- /**
- * @var string
- */
+ /** @var string */
protected $name;
-
- /**
- * @var int
- */
+ /** @var int */
protected $size;
-
- /**
- * @var int
- */
+ /** @var int */
protected $time;
-
- /**
- * @var int
- */
+ /** @var int */
protected $mode;
-
- /**
- * @var callable
- */
+ /** @var callable(): ACL[] */
protected $aclCallback;
/**
@@ -47,9 +30,9 @@ class FileInfo implements IFileInfo {
* @param int $size
* @param int $time
* @param int $mode
- * @param callable $aclCallback
+ * @param callable(): ACL[] $aclCallback
*/
- public function __construct($path, $name, $size, $time, $mode, callable $aclCallback) {
+ public function __construct(string $path, string $name, int $size, int $time, int $mode, callable $aclCallback) {
$this->path = $path;
$this->name = $name;
$this->size = $size;
@@ -61,63 +44,39 @@ class FileInfo implements IFileInfo {
/**
* @return string
*/
- public function getPath() {
+ public function getPath(): string {
return $this->path;
}
- /**
- * @return string
- */
- public function getName() {
+ public function getName(): string {
return $this->name;
}
- /**
- * @return int
- */
- public function getSize() {
+ public function getSize(): int {
return $this->size;
}
- /**
- * @return int
- */
- public function getMTime() {
+ public function getMTime(): int {
return $this->time;
}
- /**
- * @return bool
- */
- public function isDirectory() {
+ public function isDirectory(): bool {
return (bool)($this->mode & IFileInfo::MODE_DIRECTORY);
}
- /**
- * @return bool
- */
- public function isReadOnly() {
+ public function isReadOnly(): bool {
return (bool)($this->mode & IFileInfo::MODE_READONLY);
}
- /**
- * @return bool
- */
- public function isHidden() {
+ public function isHidden(): bool {
return (bool)($this->mode & IFileInfo::MODE_HIDDEN);
}
- /**
- * @return bool
- */
- public function isSystem() {
+ public function isSystem(): bool {
return (bool)($this->mode & IFileInfo::MODE_SYSTEM);
}
- /**
- * @return bool
- */
- public function isArchived() {
+ public function isArchived(): bool {
return (bool)($this->mode & IFileInfo::MODE_ARCHIVE);
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php
index 090734381bb..18451f4daa6 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php
@@ -14,16 +14,13 @@ use Icewind\SMB\Exception\RevisionMismatchException;
use Icewind\SMB\INotifyHandler;
class NotifyHandler implements INotifyHandler {
- /**
- * @var Connection
- */
+ /** @var Connection */
private $connection;
- /**
- * @var string
- */
+ /** @var string */
private $path;
+ /** @var bool */
private $listening = true;
// see error.h
@@ -35,7 +32,7 @@ class NotifyHandler implements INotifyHandler {
* @param Connection $connection
* @param string $path
*/
- public function __construct(Connection $connection, $path) {
+ public function __construct(Connection $connection, string $path) {
$this->connection = $connection;
$this->path = $path;
}
@@ -45,17 +42,17 @@ class NotifyHandler implements INotifyHandler {
*
* @return Change[]
*/
- public function getChanges() {
+ public function getChanges(): array {
if (!$this->listening) {
return [];
}
- stream_set_blocking($this->connection->getOutputStream(), 0);
+ stream_set_blocking($this->connection->getOutputStream(), false);
$lines = [];
while (($line = $this->connection->readLine())) {
$this->checkForError($line);
$lines[] = $line;
}
- stream_set_blocking($this->connection->getOutputStream(), 1);
+ stream_set_blocking($this->connection->getOutputStream(), true);
return array_values(array_filter(array_map([$this, 'parseChangeLine'], $lines)));
}
@@ -64,21 +61,24 @@ class NotifyHandler implements INotifyHandler {
*
* Note that this is a blocking process and will cause the process to block forever if not explicitly terminated
*
- * @param callable $callback
+ * @param callable(Change):?bool $callback
*/
- public function listen($callback) {
+ public function listen(callable $callback): void {
if ($this->listening) {
- $this->connection->read(function ($line) use ($callback) {
+ $this->connection->read(function (string $line) use ($callback): bool {
$this->checkForError($line);
$change = $this->parseChangeLine($line);
if ($change) {
- return $callback($change);
+ $result = $callback($change);
+ return $result === false ? false : true;
+ } else {
+ return true;
}
});
}
}
- private function parseChangeLine($line) {
+ private function parseChangeLine(string $line): ?Change {
$code = (int)substr($line, 0, 4);
if ($code === 0) {
return null;
@@ -91,14 +91,14 @@ class NotifyHandler implements INotifyHandler {
}
}
- private function checkForError($line) {
+ private function checkForError(string $line): void {
if (substr($line, 0, 16) === 'notify returned ') {
$error = substr($line, 16);
throw Exception::fromMap(array_merge(self::EXCEPTION_MAP, Parser::EXCEPTION_MAP), $error, 'Notify is not supported with the used smb version');
}
}
- public function stop() {
+ public function stop(): void {
$this->listening = false;
$this->connection->close();
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Parser.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Parser.php
index a28432e4319..ec14ac4b1fb 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Parser.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Parser.php
@@ -7,6 +7,7 @@
namespace Icewind\SMB\Wrapped;
+use Icewind\SMB\ACL;
use Icewind\SMB\Exception\AccessDeniedException;
use Icewind\SMB\Exception\AlreadyExistsException;
use Icewind\SMB\Exception\AuthenticationException;
@@ -28,11 +29,6 @@ class Parser {
*/
protected $timeZone;
- /**
- * @var string
- */
- private $host;
-
// see error.h
const EXCEPTION_MAP = [
ErrorCodes::LogonFailure => AuthenticationException::class,
@@ -60,21 +56,29 @@ class Parser {
/**
* @param string $timeZone
*/
- public function __construct($timeZone) {
+ public function __construct(string $timeZone) {
$this->timeZone = $timeZone;
}
- private function getErrorCode($line) {
+ private function getErrorCode(string $line): ?string {
$parts = explode(' ', $line);
foreach ($parts as $part) {
if (substr($part, 0, 9) === 'NT_STATUS') {
return $part;
}
}
- return false;
+ return null;
}
- public function checkForError($output, $path) {
+ /**
+ * @param string[] $output
+ * @param string $path
+ * @return no-return
+ * @throws Exception
+ * @throws InvalidResourceException
+ * @throws NotFoundException
+ */
+ public function checkForError(array $output, string $path): void {
if (strpos($output[0], 'does not exist')) {
throw new NotFoundException($path);
}
@@ -91,13 +95,13 @@ class Parser {
/**
* check if the first line holds a connection failure
*
- * @param $line
+ * @param string $line
* @throws AuthenticationException
* @throws InvalidHostException
* @throws NoLoginServerException
* @throws AccessDeniedException
*/
- public function checkConnectionError($line) {
+ public function checkConnectionError(string $line): void {
$line = rtrim($line, ')');
if (substr($line, -23) === ErrorCodes::LogonFailure) {
throw new AuthenticationException('Invalid login');
@@ -119,7 +123,7 @@ class Parser {
}
}
- public function parseMode($mode) {
+ public function parseMode(string $mode): int {
$result = 0;
foreach (self::MODE_STRINGS as $char => $val) {
if (strpos($mode, $char) !== false) {
@@ -129,7 +133,12 @@ class Parser {
return $result;
}
- public function parseStat($output) {
+ /**
+ * @param string[] $output
+ * @return array{"mtime": int, "mode": int, "size": int}
+ * @throws Exception
+ */
+ public function parseStat(array $output): array {
$data = [];
foreach ($output as $line) {
// A line = explode statement may not fill all array elements
@@ -143,14 +152,24 @@ class Parser {
$data[$name] = $value;
}
}
+ $attributeStart = strpos($data['attributes'], '(');
+ if ($attributeStart === false) {
+ throw new Exception("Malformed state response from server");
+ }
return [
'mtime' => strtotime($data['write_time']),
- 'mode' => hexdec(substr($data['attributes'], strpos($data['attributes'], '(') + 1, -1)),
+ 'mode' => hexdec(substr($data['attributes'], $attributeStart + 1, -1)),
'size' => isset($data['stream']) ? (int)(explode(' ', $data['stream'])[1]) : 0
];
}
- public function parseDir($output, $basePath, callable $aclCallback) {
+ /**
+ * @param string[] $output
+ * @param string $basePath
+ * @param callable(string):ACL[] $aclCallback
+ * @return FileInfo[]
+ */
+ public function parseDir(array $output, string $basePath, callable $aclCallback): array {
//last line is used space
array_pop($output);
$regex = '/^\s*(.*?)\s\s\s\s+(?:([NDHARS]*)\s+)?([0-9]+)\s+(.*)$/';
@@ -163,7 +182,7 @@ class Parser {
$mode = $this->parseMode($mode);
$time = strtotime($time . ' ' . $this->timeZone);
$path = $basePath . '/' . $name;
- $content[] = new FileInfo($path, $name, $size, $time, $mode, function () use ($aclCallback, $path) {
+ $content[] = new FileInfo($path, $name, (int)$size, $time, $mode, function () use ($aclCallback, $path): array {
return $aclCallback($path);
});
}
@@ -172,7 +191,11 @@ class Parser {
return $content;
}
- public function parseListShares($output) {
+ /**
+ * @param string[] $output
+ * @return array<string, string>
+ */
+ public function parseListShares(array $output): array {
$shareNames = [];
foreach ($output as $line) {
if (strpos($line, '|')) {
@@ -188,4 +211,67 @@ class Parser {
}
return $shareNames;
}
+
+ /**
+ * @param string[] $rawAcls
+ * @return ACL[]
+ */
+ public function parseACLs(array $rawAcls): array {
+ $acls = [];
+ foreach ($rawAcls as $acl) {
+ if (strpos($acl, ':') === false) {
+ continue;
+ }
+ [$type, $acl] = explode(':', $acl, 2);
+ if ($type !== 'ACL') {
+ continue;
+ }
+ [$user, $permissions] = explode(':', $acl, 2);
+ [$type, $flags, $mask] = explode('/', $permissions);
+
+ $type = $type === 'ALLOWED' ? ACL::TYPE_ALLOW : ACL::TYPE_DENY;
+
+ $flagsInt = 0;
+ foreach (explode('|', $flags) as $flagString) {
+ if ($flagString === 'OI') {
+ $flagsInt += ACL::FLAG_OBJECT_INHERIT;
+ } elseif ($flagString === 'CI') {
+ $flagsInt += ACL::FLAG_CONTAINER_INHERIT;
+ }
+ }
+
+ if (substr($mask, 0, 2) === '0x') {
+ $maskInt = hexdec($mask);
+ } else {
+ $maskInt = 0;
+ foreach (explode('|', $mask) as $maskString) {
+ if ($maskString === 'R') {
+ $maskInt += ACL::MASK_READ;
+ } elseif ($maskString === 'W') {
+ $maskInt += ACL::MASK_WRITE;
+ } elseif ($maskString === 'X') {
+ $maskInt += ACL::MASK_EXECUTE;
+ } elseif ($maskString === 'D') {
+ $maskInt += ACL::MASK_DELETE;
+ } elseif ($maskString === 'READ') {
+ $maskInt += ACL::MASK_READ + ACL::MASK_EXECUTE;
+ } elseif ($maskString === 'CHANGE') {
+ $maskInt += ACL::MASK_READ + ACL::MASK_EXECUTE + ACL::MASK_WRITE + ACL::MASK_DELETE;
+ } elseif ($maskString === 'FULL') {
+ $maskInt += ACL::MASK_READ + ACL::MASK_EXECUTE + ACL::MASK_WRITE + ACL::MASK_DELETE;
+ }
+ }
+ }
+
+ if (isset($acls[$user])) {
+ $existing = $acls[$user];
+ $maskInt += $existing->getMask();
+ }
+ $acls[$user] = new ACL($type, $flagsInt, $maskInt);
+ }
+
+ ksort($acls);
+
+ return $acls;
+ }
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php
index 3a114af5e4f..26a17cc584b 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php
@@ -30,10 +30,10 @@ class RawConnection {
* $pipes[4] holds the stream for writing files
* $pipes[5] holds the stream for reading files
*/
- private $pipes;
+ private $pipes = [];
/**
- * @var resource $process
+ * @var resource|null $process
*/
private $process;
@@ -42,17 +42,20 @@ class RawConnection {
*/
private $authStream = null;
- private $connected = false;
-
- public function __construct($command, array $env = []) {
+ /**
+ * @param string $command
+ * @param array<string, string> $env
+ */
+ public function __construct(string $command, array $env = []) {
$this->command = $command;
$this->env = $env;
}
/**
* @throws ConnectException
+ * @psalm-assert resource $this->process
*/
- public function connect() {
+ public function connect(): void {
if (is_null($this->getAuthStream())) {
throw new ConnectException('Authentication not set before connecting');
}
@@ -77,18 +80,18 @@ class RawConnection {
if (!$this->isValid()) {
throw new ConnectionException();
}
- $this->connected = true;
}
/**
* check if the connection is still active
*
* @return bool
+ * @psalm-assert-if-true resource $this->process
*/
- public function isValid() {
+ public function isValid(): bool {
if (is_resource($this->process)) {
$status = proc_get_status($this->process);
- return $status['running'];
+ return (bool)$status['running'];
} else {
return false;
}
@@ -98,10 +101,12 @@ class RawConnection {
* send input to the process
*
* @param string $input
+ * @return int|bool
*/
- public function write($input) {
- fwrite($this->getInputStream(), $input);
+ public function write(string $input) {
+ $result = @fwrite($this->getInputStream(), $input);
fflush($this->getInputStream());
+ return $result;
}
/**
@@ -116,18 +121,19 @@ class RawConnection {
/**
* read a line of output
*
- * @return string
+ * @return string|false
*/
public function readError() {
- return trim(stream_get_line($this->getErrorStream(), 4086));
+ $line = stream_get_line($this->getErrorStream(), 4086);
+ return $line !== false ? trim($line) : false;
}
/**
* get all output until the process closes
*
- * @return array
+ * @return string[]
*/
- public function readAll() {
+ public function readAll(): array {
$output = [];
while ($line = $this->readLine()) {
$output[] = $line;
@@ -135,40 +141,67 @@ class RawConnection {
return $output;
}
+ /**
+ * @return resource
+ */
public function getInputStream() {
return $this->pipes[0];
}
+ /**
+ * @return resource
+ */
public function getOutputStream() {
return $this->pipes[1];
}
+ /**
+ * @return resource
+ */
public function getErrorStream() {
return $this->pipes[2];
}
+ /**
+ * @return resource|null
+ */
public function getAuthStream() {
return $this->authStream;
}
+ /**
+ * @return resource
+ */
public function getFileInputStream() {
return $this->pipes[4];
}
+ /**
+ * @return resource
+ */
public function getFileOutputStream() {
return $this->pipes[5];
}
- public function writeAuthentication($user, $password) {
- $auth = ($password === false)
+ /**
+ * @param string|null $user
+ * @param string|null $password
+ * @psalm-assert resource $this->authStream
+ */
+ public function writeAuthentication(?string $user, ?string $password): void {
+ $auth = ($password === null)
? "username=$user"
: "username=$user\npassword=$password\n";
$this->authStream = fopen('php://temp', 'w+');
- fwrite($this->getAuthStream(), $auth);
+ fwrite($this->authStream, $auth);
}
- public function close($terminate = true) {
+ /**
+ * @param bool $terminate
+ * @psalm-assert null $this->process
+ */
+ public function close(bool $terminate = true): void {
if (!is_resource($this->process)) {
return;
}
@@ -176,9 +209,10 @@ class RawConnection {
proc_terminate($this->process);
}
proc_close($this->process);
+ $this->process = null;
}
- public function reconnect() {
+ public function reconnect(): void {
$this->close();
$this->connect();
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Server.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Server.php
index b3763a73245..60cc9278dd9 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Server.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Server.php
@@ -11,6 +11,8 @@ use Icewind\SMB\AbstractServer;
use Icewind\SMB\Exception\AuthenticationException;
use Icewind\SMB\Exception\ConnectException;
use Icewind\SMB\Exception\ConnectionException;
+use Icewind\SMB\Exception\ConnectionRefusedException;
+use Icewind\SMB\Exception\Exception;
use Icewind\SMB\Exception\InvalidHostException;
use Icewind\SMB\IShare;
use Icewind\SMB\ISystem;
@@ -22,11 +24,11 @@ class Server extends AbstractServer {
* @param ISystem $system
* @return bool
*/
- public static function available(ISystem $system) {
- return $system->getSmbclientPath();
+ public static function available(ISystem $system): bool {
+ return $system->getSmbclientPath() !== null;
}
- private function getAuthFileArgument() {
+ private function getAuthFileArgument(): string {
if ($this->getAuth()->getUsername()) {
return '--authentication-file=' . $this->system->getFD(3);
} else {
@@ -41,22 +43,30 @@ class Server extends AbstractServer {
* @throws InvalidHostException
* @throws ConnectException
*/
- public function listShares() {
+ public function listShares(): array {
+ $maxProtocol = $this->options->getMaxProtocol();
+ $minProtocol = $this->options->getMinProtocol();
+ $smbClient = $this->system->getSmbclientPath();
+ if ($smbClient === null) {
+ throw new Exception("Backend not available");
+ }
$command = sprintf(
- '%s %s %s -L %s',
- $this->system->getSmbclientPath(),
+ '%s %s %s %s %s -L %s',
+ $smbClient,
$this->getAuthFileArgument(),
$this->getAuth()->getExtraCommandLineArguments(),
+ $maxProtocol ? "--option='client max protocol=" . $maxProtocol . "'" : "",
+ $minProtocol ? "--option='client min protocol=" . $minProtocol . "'" : "",
escapeshellarg('//' . $this->getHost())
);
$connection = new RawConnection($command);
$connection->writeAuthentication($this->getAuth()->getUsername(), $this->getAuth()->getPassword());
$connection->connect();
if (!$connection->isValid()) {
- throw new ConnectionException($connection->readLine());
+ throw new ConnectionException((string)$connection->readLine());
}
- $parser = new Parser($this->timezoneProvider);
+ $parser = new Parser($this->timezoneProvider->get($this->host));
$output = $connection->readAll();
if (isset($output[0])) {
@@ -71,6 +81,9 @@ class Server extends AbstractServer {
if (isset($output[0])) {
$parser->checkConnectionError($output[0]);
}
+ if (count($output) === 0) {
+ throw new ConnectionRefusedException();
+ }
$shareNames = $parser->parseListShares($output);
@@ -85,7 +98,7 @@ class Server extends AbstractServer {
* @param string $name
* @return IShare
*/
- public function getShare($name) {
+ public function getShare(string $name): IShare {
return new Share($this, $name, $this->system);
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php
index ea386a87bfc..68446d380e0 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php
@@ -9,9 +9,14 @@ namespace Icewind\SMB\Wrapped;
use Icewind\SMB\AbstractShare;
use Icewind\SMB\ACL;
+use Icewind\SMB\Exception\AlreadyExistsException;
+use Icewind\SMB\Exception\AuthenticationException;
+use Icewind\SMB\Exception\ConnectException;
use Icewind\SMB\Exception\ConnectionException;
use Icewind\SMB\Exception\DependencyException;
+use Icewind\SMB\Exception\Exception;
use Icewind\SMB\Exception\FileInUseException;
+use Icewind\SMB\Exception\InvalidHostException;
use Icewind\SMB\Exception\InvalidTypeException;
use Icewind\SMB\Exception\NotFoundException;
use Icewind\SMB\Exception\InvalidRequestException;
@@ -35,9 +40,9 @@ class Share extends AbstractShare {
private $name;
/**
- * @var Connection $connection
+ * @var Connection|null $connection
*/
- public $connection;
+ public $connection = null;
/**
* @var Parser
@@ -63,7 +68,7 @@ class Share extends AbstractShare {
* @param string $name
* @param ISystem $system
*/
- public function __construct(IServer $server, $name, ISystem $system) {
+ public function __construct(IServer $server, string $name, ISystem $system) {
parent::__construct();
$this->server = $server;
$this->name = $name;
@@ -71,7 +76,7 @@ class Share extends AbstractShare {
$this->parser = new Parser($server->getTimeZone());
}
- private function getAuthFileArgument() {
+ private function getAuthFileArgument(): string {
if ($this->server->getAuth()->getUsername()) {
return '--authentication-file=' . $this->system->getFD(3);
} else {
@@ -79,22 +84,31 @@ class Share extends AbstractShare {
}
}
- protected function getConnection() {
+ protected function getConnection(): Connection {
+ $maxProtocol = $this->server->getOptions()->getMaxProtocol();
+ $minProtocol = $this->server->getOptions()->getMinProtocol();
+ $smbClient = $this->system->getSmbclientPath();
+ $stdBuf = $this->system->getStdBufPath();
+ if ($smbClient === null) {
+ throw new Exception("Backend not available");
+ }
$command = sprintf(
- '%s %s%s -t %s %s %s %s',
+ '%s %s%s -t %s %s %s %s %s %s',
self::EXEC_CMD,
- $this->system->getStdBufPath() ? $this->system->getStdBufPath() . ' -o0 ' : '',
- $this->system->getSmbclientPath(),
+ $stdBuf ? $stdBuf . ' -o0 ' : '',
+ $smbClient,
$this->server->getOptions()->getTimeout(),
$this->getAuthFileArgument(),
$this->server->getAuth()->getExtraCommandLineArguments(),
+ $maxProtocol ? "--option='client max protocol=" . $maxProtocol . "'" : "",
+ $minProtocol ? "--option='client min protocol=" . $minProtocol . "'" : "",
escapeshellarg('//' . $this->server->getHost() . '/' . $this->name)
);
$connection = new Connection($command, $this->parser);
$connection->writeAuthentication($this->server->getAuth()->getUsername(), $this->server->getAuth()->getPassword());
$connection->connect();
if (!$connection->isValid()) {
- throw new ConnectionException($connection->readLine());
+ throw new ConnectionException((string)$connection->readLine());
}
// some versions of smbclient add a help message in first of the first prompt
$connection->clearTillPrompt();
@@ -102,21 +116,33 @@ class Share extends AbstractShare {
}
/**
- * @throws \Icewind\SMB\Exception\ConnectionException
- * @throws \Icewind\SMB\Exception\AuthenticationException
- * @throws \Icewind\SMB\Exception\InvalidHostException
+ * @throws ConnectionException
+ * @throws AuthenticationException
+ * @throws InvalidHostException
+ * @psalm-assert Connection $this->connection
*/
- protected function connect() {
+ protected function connect(): Connection {
if ($this->connection and $this->connection->isValid()) {
- return;
+ return $this->connection;
}
$this->connection = $this->getConnection();
+ return $this->connection;
}
- protected function reconnect() {
- $this->connection->reconnect();
- if (!$this->connection->isValid()) {
- throw new ConnectionException();
+ /**
+ * @throws ConnectionException
+ * @throws AuthenticationException
+ * @throws InvalidHostException
+ * @psalm-assert Connection $this->connection
+ */
+ protected function reconnect(): void {
+ if ($this->connection === null) {
+ $this->connect();
+ } else {
+ $this->connection->reconnect();
+ if (!$this->connection->isValid()) {
+ throw new ConnectionException();
+ }
}
}
@@ -125,11 +151,11 @@ class Share extends AbstractShare {
*
* @return string
*/
- public function getName() {
+ public function getName(): string {
return $this->name;
}
- protected function simpleCommand($command, $path) {
+ protected function simpleCommand(string $command, string $path): bool {
$escapedPath = $this->escapePath($path);
$cmd = $command . ' ' . $escapedPath;
$output = $this->execute($cmd);
@@ -139,13 +165,13 @@ class Share extends AbstractShare {
/**
* List the content of a remote folder
*
- * @param $path
- * @return \Icewind\SMB\IFileInfo[]
+ * @param string $path
+ * @return IFileInfo[]
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function dir($path) {
+ public function dir(string $path): array {
$escapedPath = $this->escapePath($path);
$output = $this->execute('cd ' . $escapedPath);
//check output for errors
@@ -154,16 +180,16 @@ class Share extends AbstractShare {
$this->execute('cd /');
- return $this->parser->parseDir($output, $path, function ($path) {
+ return $this->parser->parseDir($output, $path, function (string $path) {
return $this->getAcls($path);
});
}
/**
* @param string $path
- * @return \Icewind\SMB\IFileInfo
+ * @return IFileInfo
*/
- public function stat($path) {
+ public function stat(string $path): IFileInfo {
// some windows server setups don't seem to like the allinfo command
// use the dir command instead to get the file info where possible
if ($path !== "" && $path !== "/") {
@@ -200,10 +226,10 @@ class Share extends AbstractShare {
* @param string $path
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\AlreadyExistsException
+ * @throws NotFoundException
+ * @throws AlreadyExistsException
*/
- public function mkdir($path) {
+ public function mkdir(string $path): bool {
return $this->simpleCommand('mkdir', $path);
}
@@ -213,10 +239,10 @@ class Share extends AbstractShare {
* @param string $path
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function rmdir($path) {
+ public function rmdir(string $path): bool {
return $this->simpleCommand('rmdir', $path);
}
@@ -230,7 +256,7 @@ class Share extends AbstractShare {
* @throws NotFoundException
* @throws \Exception
*/
- public function del($path, $secondTry = false) {
+ public function del(string $path, bool $secondTry = false): bool {
//del return a file not found error when trying to delete a folder
//we catch it so we can check if $path doesn't exist or is of invalid type
try {
@@ -261,10 +287,10 @@ class Share extends AbstractShare {
* @param string $to
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\AlreadyExistsException
+ * @throws NotFoundException
+ * @throws AlreadyExistsException
*/
- public function rename($from, $to) {
+ public function rename(string $from, string $to): bool {
$path1 = $this->escapePath($from);
$path2 = $this->escapePath($to);
$output = $this->execute('rename ' . $path1 . ' ' . $path2);
@@ -278,10 +304,10 @@ class Share extends AbstractShare {
* @param string $target remove file
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function put($source, $target) {
+ public function put(string $source, string $target): bool {
$path1 = $this->escapeLocalPath($source); //first path is local, needs different escaping
$path2 = $this->escapePath($target);
$output = $this->execute('put ' . $path1 . ' ' . $path2);
@@ -295,10 +321,10 @@ class Share extends AbstractShare {
* @param string $target local file
* @return bool
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function get($source, $target) {
+ public function get(string $source, string $target): bool {
$path1 = $this->escapePath($source);
$path2 = $this->escapeLocalPath($target); //second path is local, needs different escaping
$output = $this->execute('get ' . $path1 . ' ' . $path2);
@@ -311,10 +337,10 @@ class Share extends AbstractShare {
* @param string $source
* @return resource a read only stream with the contents of the remote file
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function read($source) {
+ public function read(string $source) {
$source = $this->escapePath($source);
// since returned stream is closed by the caller we need to create a new instance
// since we can't re-use the same file descriptor over multiple calls
@@ -333,10 +359,10 @@ class Share extends AbstractShare {
* @param string $target
* @return resource a write only stream to upload a remote file
*
- * @throws \Icewind\SMB\Exception\NotFoundException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws NotFoundException
+ * @throws InvalidTypeException
*/
- public function write($target) {
+ public function write(string $target) {
$target = $this->escapePath($target);
// since returned stream is closed by the caller we need to create a new instance
// since we can't re-use the same file descriptor over multiple calls
@@ -348,9 +374,14 @@ class Share extends AbstractShare {
// use a close callback to ensure the upload is finished before continuing
// this also serves as a way to keep the connection in scope
- return CallbackWrapper::wrap($fh, null, null, function () use ($connection, $target) {
+ $stream = CallbackWrapper::wrap($fh, null, null, function () use ($connection) {
$connection->close(false); // dont terminate, give the upload some time
});
+ if (is_resource($stream)) {
+ return $stream;
+ } else {
+ throw new InvalidRequestException($target);
+ }
}
/**
@@ -359,9 +390,9 @@ class Share extends AbstractShare {
*
* @param string $target
*
- * @throws \Icewind\SMB\Exception\DependencyException
+ * @throws DependencyException
*/
- public function append($target) {
+ public function append(string $target) {
throw new DependencyException('php-libsmbclient is required for append');
}
@@ -370,7 +401,7 @@ class Share extends AbstractShare {
* @param int $mode a combination of FileInfo::MODE_READONLY, FileInfo::MODE_ARCHIVE, FileInfo::MODE_SYSTEM and FileInfo::MODE_HIDDEN, FileInfo::NORMAL
* @return mixed
*/
- public function setMode($path, $mode) {
+ public function setMode(string $path, int $mode) {
$modeString = '';
foreach (self::MODE_MAP as $modeByte => $string) {
if ($mode & $modeByte) {
@@ -400,7 +431,7 @@ class Share extends AbstractShare {
* @throws ConnectionException
* @throws DependencyException
*/
- public function notify($path) {
+ public function notify(string $path): INotifyHandler {
if (!$this->system->getStdBufPath()) { //stdbuf is required to disable smbclient's output buffering
throw new DependencyException('stdbuf is required for usage of the notify command');
}
@@ -412,12 +443,11 @@ class Share extends AbstractShare {
/**
* @param string $command
- * @return array
+ * @return string[]
*/
- protected function execute($command) {
- $this->connect();
- $this->connection->write($command . PHP_EOL);
- return $this->connection->read();
+ protected function execute(string $command): array {
+ $this->connect()->write($command . PHP_EOL);
+ return $this->connect()->read();
}
/**
@@ -427,19 +457,18 @@ class Share extends AbstractShare {
* @param string $path
*
* @return bool
- * @throws \Icewind\SMB\Exception\AlreadyExistsException
+ * @throws AlreadyExistsException
* @throws \Icewind\SMB\Exception\AccessDeniedException
* @throws \Icewind\SMB\Exception\NotEmptyException
- * @throws \Icewind\SMB\Exception\InvalidTypeException
+ * @throws InvalidTypeException
* @throws \Icewind\SMB\Exception\Exception
* @throws NotFoundException
*/
- protected function parseOutput($lines, $path = '') {
+ protected function parseOutput(array $lines, string $path = ''): bool {
if (count($lines) === 0) {
return true;
} else {
$this->parser->checkForError($lines, $path);
- return false;
}
}
@@ -447,7 +476,7 @@ class Share extends AbstractShare {
* @param string $string
* @return string
*/
- protected function escape($string) {
+ protected function escape(string $string): string {
return escapeshellarg($string);
}
@@ -455,7 +484,7 @@ class Share extends AbstractShare {
* @param string $path
* @return string
*/
- protected function escapePath($path) {
+ protected function escapePath(string $path): string {
$this->verifyPath($path);
if ($path === '/') {
$path = '';
@@ -470,12 +499,18 @@ class Share extends AbstractShare {
* @param string $path
* @return string
*/
- protected function escapeLocalPath($path) {
+ protected function escapeLocalPath(string $path): string {
$path = str_replace('"', '\"', $path);
return '"' . $path . '"';
}
- protected function getAcls($path) {
+ /**
+ * @param string $path
+ * @return ACL[]
+ * @throws ConnectionException
+ * @throws ConnectException
+ */
+ protected function getAcls(string $path): array {
$commandPath = $this->system->getSmbcAclsPath();
if (!$commandPath) {
return [];
@@ -494,62 +529,11 @@ class Share extends AbstractShare {
$connection->writeAuthentication($this->server->getAuth()->getUsername(), $this->server->getAuth()->getPassword());
$connection->connect();
if (!$connection->isValid()) {
- throw new ConnectionException($connection->readLine());
+ throw new ConnectionException((string)$connection->readLine());
}
$rawAcls = $connection->readAll();
-
- $acls = [];
- foreach ($rawAcls as $acl) {
- [$type, $acl] = explode(':', $acl, 2);
- if ($type !== 'ACL') {
- continue;
- }
- [$user, $permissions] = explode(':', $acl, 2);
- [$type, $flags, $mask] = explode('/', $permissions);
-
- $type = $type === 'ALLOWED' ? ACL::TYPE_ALLOW : ACL::TYPE_DENY;
-
- $flagsInt = 0;
- foreach (explode('|', $flags) as $flagString) {
- if ($flagString === 'OI') {
- $flagsInt += ACL::FLAG_OBJECT_INHERIT;
- } elseif ($flagString === 'CI') {
- $flagsInt += ACL::FLAG_CONTAINER_INHERIT;
- }
- }
-
- if (substr($mask, 0, 2) === '0x') {
- $maskInt = hexdec($mask);
- } else {
- $maskInt = 0;
- foreach (explode('|', $mask) as $maskString) {
- if ($maskString === 'R') {
- $maskInt += ACL::MASK_READ;
- } elseif ($maskString === 'W') {
- $maskInt += ACL::MASK_WRITE;
- } elseif ($maskString === 'X') {
- $maskInt += ACL::MASK_EXECUTE;
- } elseif ($maskString === 'D') {
- $maskInt += ACL::MASK_DELETE;
- } elseif ($maskString === 'READ') {
- $maskInt += ACL::MASK_READ + ACL::MASK_EXECUTE;
- } elseif ($maskString === 'CHANGE') {
- $maskInt += ACL::MASK_READ + ACL::MASK_EXECUTE + ACL::MASK_WRITE + ACL::MASK_DELETE;
- } elseif ($maskString === 'FULL') {
- $maskInt += ACL::MASK_READ + ACL::MASK_EXECUTE + ACL::MASK_WRITE + ACL::MASK_DELETE;
- }
- }
- }
-
- if (isset($acls[$user])) {
- $existing = $acls[$user];
- $maskInt += $existing->getMask();
- }
- $acls[$user] = new ACL($type, $flagsInt, $maskInt);
- }
-
- return $acls;
+ return $this->parser->parseACLs($rawAcls);
}
public function getServer(): IServer {
diff --git a/apps/files_external/3rdparty/icewind/streams/.gitignore b/apps/files_external/3rdparty/icewind/streams/.gitignore
index 4f389129e2d..a8fa5d4a955 100644
--- a/apps/files_external/3rdparty/icewind/streams/.gitignore
+++ b/apps/files_external/3rdparty/icewind/streams/.gitignore
@@ -1,3 +1,6 @@
.idea
vendor
composer.lock
+build
+example.php
+*.cache
diff --git a/apps/files_external/3rdparty/icewind/streams/.travis.yml b/apps/files_external/3rdparty/icewind/streams/.travis.yml
deleted file mode 100644
index 68efcd2c744..00000000000
--- a/apps/files_external/3rdparty/icewind/streams/.travis.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-language: php
-php:
- - 5.4
- - 5.5
- - 5.6
- - 7.0
- - 7.1
- - 7.2
-
-env:
- global:
- - CURRENT_DIR=`pwd`
-
-install:
- - composer install --dev --no-interaction
-
-script:
- - mkdir -p build/logs
- - cd tests
- - phpunit --coverage-clover ../build/logs/clover.xml --configuration phpunit.xml
-
-after_script:
- - cd $CURRENT_DIR
- - php vendor/bin/coveralls -v
diff --git a/apps/files_external/3rdparty/icewind/streams/README.md b/apps/files_external/3rdparty/icewind/streams/README.md
index 88ab2dd92a3..0dbafc9df0b 100644
--- a/apps/files_external/3rdparty/icewind/streams/README.md
+++ b/apps/files_external/3rdparty/icewind/streams/README.md
@@ -1,8 +1,7 @@
# Streams #
-[![Build Status](https://travis-ci.org/icewind1991/Streams.svg?branch=master)](https://travis-ci.org/icewind1991/Streams)
-[![Coverage Status](https://img.shields.io/coveralls/icewind1991/Streams.svg)](https://coveralls.io/r/icewind1991/Streams?branch=master)
-[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/icewind1991/Streams/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/icewind1991/Streams/?branch=master)
+[![CI](https://github.com/icewind1991/Streams/actions/workflows/ci.yaml/badge.svg)](https://github.com/icewind1991/Streams/actions/workflows/ci.yaml)
+[![codecov](https://codecov.io/gh/icewind1991/Streams/branch/master/graph/badge.svg?token=bfPcAdGAaq)](https://codecov.io/gh/icewind1991/Streams)
Generic stream wrappers for php.
@@ -14,7 +13,7 @@ it wraps an existing stream and can thus be used for any stream in php
The callbacks are passed in the stream context along with the source stream
and can be any valid [php callable](http://php.net/manual/en/language.types.callable.php)
-###Example###
+### Example ###
```php
<?php
diff --git a/apps/files_external/3rdparty/icewind/streams/composer.json b/apps/files_external/3rdparty/icewind/streams/composer.json
index f2f3e0fc255..2a148158fbc 100644
--- a/apps/files_external/3rdparty/icewind/streams/composer.json
+++ b/apps/files_external/3rdparty/icewind/streams/composer.json
@@ -1,24 +1,29 @@
{
- "name" : "icewind/streams",
- "description" : "A set of generic stream wrappers",
- "license" : "MIT",
- "authors" : [
+ "name": "icewind/streams",
+ "description": "A set of generic stream wrappers",
+ "license": "MIT",
+ "authors": [
{
- "name" : "Robin Appelman",
+ "name": "Robin Appelman",
"email": "icewind@owncloud.com"
}
],
- "require" : {
- "php": ">=5.3"
+ "require": {
+ "php": ">=7.1"
},
- "require-dev" : {
- "satooshi/php-coveralls": "v1.0.0",
- "phpunit/phpunit": "^4.8"
+ "require-dev": {
+ "phpunit/phpunit": "^9",
+ "friendsofphp/php-cs-fixer": "^2",
+ "phpstan/phpstan": "^0.12"
},
- "autoload" : {
+ "autoload": {
"psr-4": {
- "Icewind\\Streams\\Tests\\": "tests/",
"Icewind\\Streams\\": "src/"
}
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Icewind\\Streams\\Tests\\": "tests/"
+ }
}
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php
index 67f9110d100..5d78b5a3db0 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php
@@ -25,27 +25,27 @@ namespace Icewind\Streams;
*/
class CallbackWrapper extends Wrapper {
/**
- * @var callable
+ * @var callable|null
*/
protected $readCallback;
/**
- * @var callable
+ * @var callable|null
*/
protected $writeCallback;
/**
- * @var callable
+ * @var callable|null
*/
protected $closeCallback;
/**
- * @var callable
+ * @var callable|null
*/
protected $readDirCallBack;
/**
- * @var callable
+ * @var callable|null
*/
protected $preCloseCallback;
@@ -53,30 +53,28 @@ class CallbackWrapper extends Wrapper {
* Wraps a stream with the provided callbacks
*
* @param resource $source
- * @param callable $read (optional)
- * @param callable $write (optional)
- * @param callable $close (optional)
- * @param callable $readDir (optional)
- * @return resource
+ * @param callable|null $read (optional)
+ * @param callable|null $write (optional)
+ * @param callable|null $close (optional)
+ * @param callable|null $readDir (optional)
+ * @param callable|null $preClose (optional)
+ * @return resource|bool
*
- * @throws \BadMethodCallException
*/
public static function wrap($source, $read = null, $write = null, $close = null, $readDir = null, $preClose = null) {
- $context = stream_context_create(array(
- 'callback' => array(
- 'source' => $source,
- 'read' => $read,
- 'write' => $write,
- 'close' => $close,
- 'readDir' => $readDir,
- 'preClose' => $preClose,
- )
- ));
- return Wrapper::wrapSource($source, $context, 'callback', '\Icewind\Streams\CallbackWrapper');
+ $context = [
+ 'source' => $source,
+ 'read' => $read,
+ 'write' => $write,
+ 'close' => $close,
+ 'readDir' => $readDir,
+ 'preClose' => $preClose,
+ ];
+ return self::wrapSource($source, $context);
}
protected function open() {
- $context = $this->loadContext('callback');
+ $context = $this->loadContext();
$this->readCallback = $context['read'];
$this->writeCallback = $context['write'];
@@ -112,7 +110,7 @@ class CallbackWrapper extends Wrapper {
public function stream_close() {
if (is_callable($this->preCloseCallback)) {
- call_user_func($this->preCloseCallback, $this->loadContext('callback')['source']);
+ call_user_func($this->preCloseCallback, $this->source);
// prevent further calls by potential PHP 7 GC ghosts
$this->preCloseCallback = null;
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/CountWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/CountWrapper.php
index 8b86ab9187c..b3346209aed 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/CountWrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/CountWrapper.php
@@ -55,7 +55,7 @@ class CountWrapper extends Wrapper {
*
* @param resource $source
* @param callable $callback
- * @return resource
+ * @return resource|bool
*
* @throws \BadMethodCallException
*/
@@ -63,17 +63,14 @@ class CountWrapper extends Wrapper {
if (!is_callable($callback)) {
throw new \InvalidArgumentException('Invalid or missing callback');
}
- $context = stream_context_create(array(
- 'count' => array(
- 'source' => $source,
- 'callback' => $callback
- )
- ));
- return Wrapper::wrapSource($source, $context, 'callback', '\Icewind\Streams\CountWrapper');
+ return self::wrapSource($source, [
+ 'source' => $source,
+ 'callback' => $callback
+ ]);
}
protected function open() {
- $context = $this->loadContext('count');
+ $context = $this->loadContext();
$this->callback = $context['callback'];
return true;
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/Directory.php b/apps/files_external/3rdparty/icewind/streams/src/Directory.php
index c80a878386b..912be76acfa 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/Directory.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/Directory.php
@@ -19,7 +19,7 @@ interface Directory {
public function dir_opendir($path, $options);
/**
- * @return string
+ * @return string|bool
*/
public function dir_readdir();
diff --git a/apps/files_external/3rdparty/icewind/streams/src/DirectoryFilter.php b/apps/files_external/3rdparty/icewind/streams/src/DirectoryFilter.php
index 4b869699000..80b27e8bab8 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/DirectoryFilter.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/DirectoryFilter.php
@@ -25,7 +25,7 @@ class DirectoryFilter extends DirectoryWrapper {
* @return bool
*/
public function dir_opendir($path, $options) {
- $context = $this->loadContext('filter');
+ $context = $this->loadContext();
$this->filter = $context['filter'];
return true;
}
@@ -36,7 +36,7 @@ class DirectoryFilter extends DirectoryWrapper {
public function dir_readdir() {
$file = readdir($this->source);
$filter = $this->filter;
- // keep reading untill we have an accepted entry or we're at the end of the folder
+ // keep reading until we have an accepted entry or we're at the end of the folder
while ($file !== false && $filter($file) === false) {
$file = readdir($this->source);
}
@@ -46,15 +46,12 @@ class DirectoryFilter extends DirectoryWrapper {
/**
* @param resource $source
* @param callable $filter
- * @return resource
+ * @return resource|bool
*/
public static function wrap($source, callable $filter) {
- $options = array(
- 'filter' => array(
- 'source' => $source,
- 'filter' => $filter
- )
- );
- return self::wrapWithOptions($options, '\Icewind\Streams\DirectoryFilter');
+ return self::wrapSource($source, [
+ 'source' => $source,
+ 'filter' => $filter
+ ]);
}
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/DirectoryWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/DirectoryWrapper.php
index 63e4805a807..7f2f5c291c6 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/DirectoryWrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/DirectoryWrapper.php
@@ -7,37 +7,9 @@
namespace Icewind\Streams;
-class DirectoryWrapper implements Directory {
- /**
- * @var resource
- */
- public $context;
-
- /**
- * @var resource
- */
- protected $source;
-
- /**
- * Load the source from the stream context and return the context options
- *
- * @param string $name
- * @return array
- * @throws \Exception
- */
- protected function loadContext($name) {
- $context = stream_context_get_options($this->context);
- if (isset($context[$name])) {
- $context = $context[$name];
- } else {
- throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
- }
- if (isset($context['source']) and is_resource($context['source'])) {
- $this->source = $context['source'];
- } else {
- throw new \BadMethodCallException('Invalid context, source not set');
- }
- return $context;
+class DirectoryWrapper extends Wrapper implements Directory {
+ public function stream_open($path, $mode, $options, &$opened_path) {
+ return false;
}
/**
@@ -46,7 +18,7 @@ class DirectoryWrapper implements Directory {
* @return bool
*/
public function dir_opendir($path, $options) {
- $this->loadContext('dir');
+ $this->loadContext();
return true;
}
@@ -72,17 +44,4 @@ class DirectoryWrapper implements Directory {
rewinddir($this->source);
return true;
}
-
- /**
- * @param array $options the options for the context to wrap the stream with
- * @param string $class
- * @return resource
- */
- protected static function wrapWithOptions($options, $class) {
- $context = stream_context_create($options);
- stream_wrapper_register('dirwrapper', $class);
- $wrapped = opendir('dirwrapper://', $context);
- stream_wrapper_unregister('dirwrapper');
- return $wrapped;
- }
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/File.php b/apps/files_external/3rdparty/icewind/streams/src/File.php
index 252b7b8971f..9662414a79e 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/File.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/File.php
@@ -15,7 +15,7 @@ interface File {
* @param string $path
* @param string $mode
* @param int $options
- * @param string &$opened_path
+ * @param string $opened_path
* @return bool
*/
public function stream_open($path, $mode, $options, &$opened_path);
@@ -28,19 +28,19 @@ interface File {
public function stream_seek($offset, $whence = SEEK_SET);
/**
- * @return int
+ * @return int|false
*/
public function stream_tell();
/**
* @param int $count
- * @return string
+ * @return string|false
*/
public function stream_read($count);
/**
* @param string $data
- * @return int
+ * @return int|false
*/
public function stream_write($data);
@@ -59,7 +59,7 @@ interface File {
public function stream_truncate($size);
/**
- * @return array
+ * @return array|false
*/
public function stream_stat();
diff --git a/apps/files_external/3rdparty/icewind/streams/src/HashWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/HashWrapper.php
new file mode 100644
index 00000000000..616c2fe506f
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/streams/src/HashWrapper.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Icewind\Streams;
+
+abstract class HashWrapper extends Wrapper {
+
+ /**
+ * @var callable|null
+ */
+ private $callback;
+
+ /**
+ * @var resource|\HashContext
+ */
+ private $hashContext;
+
+ /**
+ * Wraps a stream to make it seekable
+ *
+ * @param resource $source
+ * @param string $hash
+ * @param callable $callback
+ * @return resource|bool
+ *
+ * @throws \BadMethodCallException
+ */
+ public static function wrap($source, $hash, $callback) {
+ $context = [
+ 'hash' => $hash,
+ 'callback' => $callback,
+ ];
+ return self::wrapSource($source, $context);
+ }
+
+ public function dir_opendir($path, $options) {
+ return false;
+ }
+
+ public function stream_open($path, $mode, $options, &$opened_path) {
+ $context = $this->loadContext();
+ $this->callback = $context['callback'];
+ $this->hashContext = hash_init($context['hash']);
+ return true;
+ }
+
+ protected function updateHash($data) {
+ hash_update($this->hashContext, $data);
+ }
+
+ public function stream_close() {
+ $hash = hash_final($this->hashContext);
+ if ($this->hashContext !== false && is_callable($this->callback)) {
+ call_user_func($this->callback, $hash);
+ }
+ return parent::stream_close();
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/IteratorDirectory.php b/apps/files_external/3rdparty/icewind/streams/src/IteratorDirectory.php
index 6dfa42a8b68..a3872ddf474 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/IteratorDirectory.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/IteratorDirectory.php
@@ -20,7 +20,7 @@ namespace Icewind\Streams;
*
* Either 'array' or 'iterator' need to be set, if both are set, 'iterator' takes preference
*/
-class IteratorDirectory implements Directory {
+class IteratorDirectory extends WrapperHandler implements Directory {
/**
* @var resource
*/
@@ -36,18 +36,13 @@ class IteratorDirectory implements Directory {
*
* @param string $name
* @return array
- * @throws \Exception
+ * @throws \BadMethodCallException
*/
- protected function loadContext($name) {
- $context = stream_context_get_options($this->context);
- if (isset($context[$name])) {
- $context = $context[$name];
- } else {
- throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
- }
+ protected function loadContext($name = null) {
+ $context = parent::loadContext($name);
if (isset($context['iterator'])) {
$this->iterator = $context['iterator'];
- } else if (isset($context['array'])) {
+ } elseif (isset($context['array'])) {
$this->iterator = new \ArrayIterator($context['array']);
} else {
throw new \BadMethodCallException('Invalid context, iterator or array not set');
@@ -61,12 +56,12 @@ class IteratorDirectory implements Directory {
* @return bool
*/
public function dir_opendir($path, $options) {
- $this->loadContext('dir');
+ $this->loadContext();
return true;
}
/**
- * @return string
+ * @return string|bool
*/
public function dir_readdir() {
if ($this->iterator->valid()) {
@@ -97,27 +92,22 @@ class IteratorDirectory implements Directory {
* Creates a directory handle from the provided array or iterator
*
* @param \Iterator | array $source
- * @return resource
+ * @return resource|bool
*
* @throws \BadMethodCallException
*/
public static function wrap($source) {
if ($source instanceof \Iterator) {
- $context = stream_context_create(array(
- 'dir' => array(
- 'iterator' => $source)
- ));
- } else if (is_array($source)) {
- $context = stream_context_create(array(
- 'dir' => array(
- 'array' => $source)
- ));
+ $options = [
+ 'iterator' => $source
+ ];
+ } elseif (is_array($source)) {
+ $options = [
+ 'array' => $source
+ ];
} else {
throw new \BadMethodCallException('$source should be an Iterator or array');
}
- stream_wrapper_register('iterator', '\Icewind\Streams\IteratorDirectory');
- $wrapped = opendir('iterator://', $context);
- stream_wrapper_unregister('iterator');
- return $wrapped;
+ return self::wrapSource(self::NO_SOURCE_DIR, $options);
}
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/NullWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/NullWrapper.php
index b6c71d98fc4..92aef2c7a2d 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/NullWrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/NullWrapper.php
@@ -11,29 +11,17 @@ namespace Icewind\Streams;
* Stream wrapper that does nothing, used for tests
*/
class NullWrapper extends Wrapper {
- /**
- * Wraps a stream with the provided callbacks
- *
- * @param resource $source
- * @return resource
- *
- * @throws \BadMethodCallException
- */
public static function wrap($source) {
- $context = stream_context_create(array(
- 'null' => array(
- 'source' => $source)
- ));
- return Wrapper::wrapSource($source, $context, 'null', '\Icewind\Streams\NullWrapper');
+ return self::wrapSource($source);
}
public function stream_open($path, $mode, $options, &$opened_path) {
- $this->loadContext('null');
+ $this->loadContext();
return true;
}
public function dir_opendir($path, $options) {
- $this->loadContext('null');
+ $this->loadContext();
return true;
}
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/Path.php b/apps/files_external/3rdparty/icewind/streams/src/Path.php
index bef9fd5f616..42d74a2ac1a 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/Path.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/Path.php
@@ -38,7 +38,7 @@ class Path {
* @param string $class
* @param array $contextOptions
*/
- public function __construct($class, $contextOptions = array()) {
+ public function __construct($class, $contextOptions = []) {
$this->class = $class;
$this->contextOptions = $contextOptions;
}
@@ -75,7 +75,7 @@ class Path {
*/
protected function appendDefaultContent($values) {
if (!is_array(current($values))) {
- $values = array($this->getProtocol() => $values);
+ $values = [$this->getProtocol() => $values];
}
$context = stream_context_get_default();
$defaults = stream_context_get_options($context);
diff --git a/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php
index 88af7e17b33..d9f3014c381 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php
@@ -16,10 +16,8 @@ class PathWrapper extends NullWrapper {
* @return Path|string
*/
public static function getPath($source) {
- return new Path(__CLASS__, [
- 'null' => [
- 'source' => $source
- ]
+ return new Path(NullWrapper::class, [
+ NullWrapper::getProtocol() => ['source' => $source]
]);
}
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/ReadHashWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/ReadHashWrapper.php
new file mode 100644
index 00000000000..16cf006ccf5
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/streams/src/ReadHashWrapper.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Icewind\Streams;
+
+/**
+ * Wrapper that calculates the hash on the stream on read
+ *
+ * The stream and hash should be passed in when wrapping the stream.
+ * On close the callback will be called with the calculated checksum.
+ *
+ * For supported hashes see: http://php.net/manual/en/function.hash-algos.php
+ */
+class ReadHashWrapper extends HashWrapper {
+ public function stream_read($count) {
+ $data = parent::stream_read($count);
+ $this->updateHash($data);
+ return $data;
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/RetryWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/RetryWrapper.php
index 8238f19f7c9..d4727aa96cd 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/RetryWrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/RetryWrapper.php
@@ -11,25 +11,8 @@ namespace Icewind\Streams;
* Wrapper that retries reads/writes to remote streams that dont deliver/recieve all requested data at once
*/
class RetryWrapper extends Wrapper {
-
- /**
- * Wraps a stream with the provided callbacks
- *
- * @param resource $source
- * @return resource
- */
public static function wrap($source) {
- $context = stream_context_create(array(
- 'retry' => array(
- 'source' => $source
- )
- ));
- return Wrapper::wrapSource($source, $context, 'retry', '\Icewind\Streams\RetryWrapper');
- }
-
- protected function open() {
- $this->loadContext('retry');
- return true;
+ return self::wrapSource($source);
}
public function dir_opendir($path, $options) {
@@ -37,7 +20,8 @@ class RetryWrapper extends Wrapper {
}
public function stream_open($path, $mode, $options, &$opened_path) {
- return $this->open();
+ $this->loadContext();
+ return true;
}
public function stream_read($count) {
diff --git a/apps/files_external/3rdparty/icewind/streams/src/SeekableWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/SeekableWrapper.php
index d41fd73ec9c..f131e75308e 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/SeekableWrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/SeekableWrapper.php
@@ -25,21 +25,8 @@ class SeekableWrapper extends Wrapper {
*/
protected $cache;
- /**
- * Wraps a stream to make it seekable
- *
- * @param resource $source
- * @return resource
- *
- * @throws \BadMethodCallException
- */
public static function wrap($source) {
- $context = stream_context_create(array(
- 'callback' => array(
- 'source' => $source
- )
- ));
- return Wrapper::wrapSource($source, $context, 'callback', '\Icewind\Streams\SeekableWrapper');
+ return self::wrapSource($source);
}
public function dir_opendir($path, $options) {
@@ -47,8 +34,12 @@ class SeekableWrapper extends Wrapper {
}
public function stream_open($path, $mode, $options, &$opened_path) {
- $this->loadContext('callback');
- $this->cache = fopen('php://temp', 'w+');
+ $this->loadContext();
+ $cache = fopen('php://temp', 'w+');
+ if ($cache === false) {
+ return false;
+ }
+ $this->cache = $cache;
return true;
}
@@ -72,7 +63,7 @@ class SeekableWrapper extends Wrapper {
public function stream_seek($offset, $whence = SEEK_SET) {
if ($whence === SEEK_SET) {
$target = $offset;
- } else if ($whence === SEEK_CUR) {
+ } elseif ($whence === SEEK_CUR) {
$current = ftell($this->cache);
$target = $current + $offset;
} else {
diff --git a/apps/files_external/3rdparty/icewind/streams/src/Url.php b/apps/files_external/3rdparty/icewind/streams/src/Url.php
index d6822608a33..38cbbdd89b2 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/Url.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/Url.php
@@ -22,7 +22,7 @@ interface Url {
* @param string $path
* @param string $mode
* @param int $options
- * @param string &$opened_path
+ * @param string $opened_path
* @return bool
*/
public function stream_open($path, $mode, $options, &$opened_path);
@@ -50,7 +50,7 @@ interface Url {
public function rmdir($path, $options);
/**
- * @param string
+ * @param string $path
* @return bool
*/
public function unlink($path);
@@ -58,7 +58,7 @@ interface Url {
/**
* @param string $path
* @param int $flags
- * @return array
+ * @return array|false
*/
public function url_stat($path, $flags);
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/UrlCallBack.php b/apps/files_external/3rdparty/icewind/streams/src/UrlCallback.php
index 580bfc6ba22..09ba2aefee6 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/UrlCallBack.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/UrlCallback.php
@@ -47,24 +47,30 @@ class UrlCallback extends Wrapper implements Url {
* @return \Icewind\Streams\Path
*
* @throws \BadMethodCallException
- * @throws \Exception
*/
- public static function wrap($source, $fopen = null, $opendir = null, $mkdir = null, $rename = null, $rmdir = null,
- $unlink = null, $stat = null) {
- $options = array(
- 'source' => $source,
- 'fopen' => $fopen,
+ public static function wrap(
+ $source,
+ $fopen = null,
+ $opendir = null,
+ $mkdir = null,
+ $rename = null,
+ $rmdir = null,
+ $unlink = null,
+ $stat = null
+ ) {
+ return new Path(static::class, [
+ 'source' => $source,
+ 'fopen' => $fopen,
'opendir' => $opendir,
- 'mkdir' => $mkdir,
- 'rename' => $rename,
- 'rmdir' => $rmdir,
- 'unlink' => $unlink,
- 'stat' => $stat
- );
- return new Path('\Icewind\Streams\UrlCallBack', $options);
+ 'mkdir' => $mkdir,
+ 'rename' => $rename,
+ 'rmdir' => $rmdir,
+ 'unlink' => $unlink,
+ 'stat' => $stat
+ ]);
}
- protected function loadContext($url) {
+ protected function loadUrlContext($url) {
list($protocol) = explode('://', $url);
$options = stream_context_get_options($this->context);
return $options[$protocol];
@@ -77,40 +83,48 @@ class UrlCallback extends Wrapper implements Url {
}
public function stream_open($path, $mode, $options, &$opened_path) {
- $context = $this->loadContext($path);
+ $context = $this->loadUrlContext($path);
$this->callCallBack($context, 'fopen');
- $this->setSourceStream(fopen($context['source'], $mode));
+ $source = fopen($context['source'], $mode);
+ if ($source === false) {
+ return false;
+ }
+ $this->setSourceStream($source);
return true;
}
public function dir_opendir($path, $options) {
- $context = $this->loadContext($path);
+ $context = $this->loadUrlContext($path);
$this->callCallBack($context, 'opendir');
- $this->setSourceStream(opendir($context['source']));
+ $source = opendir($context['source']);
+ if ($source === false) {
+ return false;
+ }
+ $this->setSourceStream($source);
return true;
}
public function mkdir($path, $mode, $options) {
- $context = $this->loadContext($path);
+ $context = $this->loadUrlContext($path);
$this->callCallBack($context, 'mkdir');
- return mkdir($context['source'], $mode, $options & STREAM_MKDIR_RECURSIVE);
+ return mkdir($context['source'], $mode, ($options & STREAM_MKDIR_RECURSIVE) > 0);
}
public function rmdir($path, $options) {
- $context = $this->loadContext($path);
+ $context = $this->loadUrlContext($path);
$this->callCallBack($context, 'rmdir');
return rmdir($context['source']);
}
public function rename($source, $target) {
- $context = $this->loadContext($source);
+ $context = $this->loadUrlContext($source);
$this->callCallBack($context, 'rename');
list(, $target) = explode('://', $target);
return rename($context['source'], $target);
}
public function unlink($path) {
- $context = $this->loadContext($path);
+ $context = $this->loadUrlContext($path);
$this->callCallBack($context, 'unlink');
return unlink($context['source']);
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php
index babd2c1a0b3..5dc8b29e774 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php
@@ -12,7 +12,7 @@ namespace Icewind\Streams;
*
* This wrapper itself doesn't implement any functionality but is just a base class for other wrappers to extend
*/
-abstract class Wrapper implements File, Directory {
+abstract class Wrapper extends WrapperHandler implements File, Directory {
/**
* @var resource
*/
@@ -25,44 +25,15 @@ abstract class Wrapper implements File, Directory {
*/
protected $source;
- protected static function wrapSource($source, $context, $protocol, $class) {
- if (!is_resource($source)) {
- throw new \BadMethodCallException();
- }
- try {
- stream_wrapper_register($protocol, $class);
- if (self::isDirectoryHandle($source)) {
- $wrapped = opendir($protocol . '://', $context);
- } else {
- $wrapped = fopen($protocol . '://', 'r+', false, $context);
- }
- } catch (\BadMethodCallException $e) {
- stream_wrapper_unregister($protocol);
- throw $e;
- }
- stream_wrapper_unregister($protocol);
- return $wrapped;
- }
-
- protected static function isDirectoryHandle($resource) {
- $meta = stream_get_meta_data($resource);
- return $meta['stream_type'] == 'dir';
- }
-
/**
- * Load the source from the stream context and return the context options
- *
- * @param string $name
- * @return array
- * @throws \Exception
+ * @param resource $source
*/
- protected function loadContext($name) {
- $context = stream_context_get_options($this->context);
- if (isset($context[$name])) {
- $context = $context[$name];
- } else {
- throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
- }
+ protected function setSourceStream($source) {
+ $this->source = $source;
+ }
+
+ protected function loadContext($name = null) {
+ $context = parent::loadContext($name);
if (isset($context['source']) and is_resource($context['source'])) {
$this->setSourceStream($context['source']);
} else {
@@ -71,13 +42,6 @@ abstract class Wrapper implements File, Directory {
return $context;
}
- /**
- * @param resource $source
- */
- protected function setSourceStream($source) {
- $this->source = $source;
- }
-
public function stream_seek($offset, $whence = SEEK_SET) {
$result = fseek($this->source, $offset, $whence);
return $result == 0 ? true : false;
@@ -98,14 +62,13 @@ abstract class Wrapper implements File, Directory {
public function stream_set_option($option, $arg1, $arg2) {
switch ($option) {
case STREAM_OPTION_BLOCKING:
- stream_set_blocking($this->source, $arg1);
- break;
+ return stream_set_blocking($this->source, (bool)$arg1);
case STREAM_OPTION_READ_TIMEOUT:
- stream_set_timeout($this->source, $arg1, $arg2);
- break;
+ return stream_set_timeout($this->source, $arg1, $arg2);
case STREAM_OPTION_WRITE_BUFFER:
- stream_set_write_buffer($this->source, $arg1);
+ return stream_set_write_buffer($this->source, $arg1) === 0;
}
+ return false;
}
public function stream_truncate($size) {
diff --git a/apps/files_external/3rdparty/icewind/streams/src/WrapperHandler.php b/apps/files_external/3rdparty/icewind/streams/src/WrapperHandler.php
new file mode 100644
index 00000000000..52a02feb19f
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/streams/src/WrapperHandler.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * @copyright Copyright (c) 2019 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Icewind\Streams;
+
+class WrapperHandler {
+ /** @var resource $context */
+ protected $context;
+
+ const NO_SOURCE_DIR = 1;
+
+ /**
+ * get the protocol name that is generated for the class
+ * @param string|null $class
+ * @return string
+ */
+ public static function getProtocol($class = null) {
+ if ($class === null) {
+ $class = static::class;
+ }
+
+ $parts = explode('\\', $class);
+ return strtolower(array_pop($parts));
+ }
+
+ private static function buildContext($protocol, $context, $source) {
+ if (is_array($context)) {
+ $context['source'] = $source;
+ return stream_context_create([$protocol => $context]);
+ } else {
+ return $context;
+ }
+ }
+
+ /**
+ * @param resource|int $source
+ * @param resource|array $context
+ * @param string|null $protocol deprecated, protocol is now automatically generated
+ * @param string|null $class deprecated, class is now automatically generated
+ * @return bool|resource
+ */
+ protected static function wrapSource($source, $context = [], $protocol = null, $class = null) {
+ if ($class === null) {
+ $class = static::class;
+ }
+
+ if ($protocol === null) {
+ $protocol = self::getProtocol($class);
+ }
+
+ $context = self::buildContext($protocol, $context, $source);
+ try {
+ stream_wrapper_register($protocol, $class);
+ if (self::isDirectoryHandle($source)) {
+ return opendir($protocol . '://', $context);
+ } else {
+ return fopen($protocol . '://', 'r+', false, $context);
+ }
+ } finally {
+ stream_wrapper_unregister($protocol);
+ }
+ }
+
+ protected static function isDirectoryHandle($resource) {
+ if ($resource === self::NO_SOURCE_DIR) {
+ return true;
+ }
+ if (!is_resource($resource)) {
+ throw new \BadMethodCallException('Invalid stream source');
+ }
+ $meta = stream_get_meta_data($resource);
+ return $meta['stream_type'] === 'dir' || $meta['stream_type'] === 'user-space-dir';
+ }
+
+ /**
+ * Load the source from the stream context and return the context options
+ *
+ * @param string|null $name if not set, the generated protocol name is used
+ * @return array
+ * @throws \BadMethodCallException
+ */
+ protected function loadContext($name = null) {
+ if ($name === null) {
+ $parts = explode('\\', static::class);
+ $name = strtolower(array_pop($parts));
+ }
+
+ $context = stream_context_get_options($this->context);
+ if (isset($context[$name])) {
+ $context = $context[$name];
+ } else {
+ throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
+ }
+ return $context;
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/WriteHashWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/WriteHashWrapper.php
new file mode 100644
index 00000000000..279d9fd10e3
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/streams/src/WriteHashWrapper.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * @copyright Copyright (c) 2019 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Icewind\Streams;
+
+/**
+ * Wrapper that calculates the hash on the stream on write
+ *
+ * The stream and hash should be passed in when wrapping the stream.
+ * On close the callback will be called with the calculated checksum.
+ *
+ * For supported hashes see: http://php.net/manual/en/function.hash-algos.php
+ */
+class WriteHashWrapper extends HashWrapper {
+ public function stream_write($data) {
+ $this->updateHash($data);
+ return parent::stream_write($data);
+ }
+}
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index 8e352ddbc42..8933be8a41d 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -183,6 +183,7 @@ OC.L10N.register(
"Create a new share link" : "Neuen Freigabe-Link erstellen",
"{shareWith} by {initiator}" : "{shareWith} von {initiator}",
"Shared via link by {initiator}" : "Geteilt mittels Link von {initiator}",
+ "Mail share ({label})" : "Mail teilen ({label})",
"Share link ({label})" : "Link teilen ({label})",
"Share link" : "Link teilen",
"Error, please enter proper password and/or expiration date" : "Fehler. Bitte gebe das richtige Passwort und/oder Ablaufdatum ein",
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index 13763081c56..7f498ad56a7 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -181,6 +181,7 @@
"Create a new share link" : "Neuen Freigabe-Link erstellen",
"{shareWith} by {initiator}" : "{shareWith} von {initiator}",
"Shared via link by {initiator}" : "Geteilt mittels Link von {initiator}",
+ "Mail share ({label})" : "Mail teilen ({label})",
"Share link ({label})" : "Link teilen ({label})",
"Share link" : "Link teilen",
"Error, please enter proper password and/or expiration date" : "Fehler. Bitte gebe das richtige Passwort und/oder Ablaufdatum ein",
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index a97dafd827b..3842cb08817 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -183,6 +183,7 @@ OC.L10N.register(
"Create a new share link" : "Crear un nuevo enlace compartido",
"{shareWith} by {initiator}" : "{shareWith} por {initiator}",
"Shared via link by {initiator}" : "Compartido vía enlace por {initiator}",
+ "Mail share ({label})" : "Compartir correo ({label})",
"Share link ({label})" : "Compartir enlace ({label})",
"Share link" : "Compartir enlace",
"Error, please enter proper password and/or expiration date" : "Error, por favor, introduce la contraseña y/o fecha de caducidad adecuada",
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index dd8c4f4c30d..8bf368c2c2a 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -181,6 +181,7 @@
"Create a new share link" : "Crear un nuevo enlace compartido",
"{shareWith} by {initiator}" : "{shareWith} por {initiator}",
"Shared via link by {initiator}" : "Compartido vía enlace por {initiator}",
+ "Mail share ({label})" : "Compartir correo ({label})",
"Share link ({label})" : "Compartir enlace ({label})",
"Share link" : "Compartir enlace",
"Error, please enter proper password and/or expiration date" : "Error, por favor, introduce la contraseña y/o fecha de caducidad adecuada",
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 627dec0557e..453fd176ca5 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -183,6 +183,7 @@ OC.L10N.register(
"Create a new share link" : "Crea un nuovo collegamento di condivisione",
"{shareWith} by {initiator}" : "{shareWith} da {initiator}",
"Shared via link by {initiator}" : "Condiviso tramite collegamento da {initiator}",
+ "Mail share ({label})" : "Condivisione email ({label})",
"Share link ({label})" : "Condividi collegamento ({label})",
"Share link" : "Condividi collegamento",
"Error, please enter proper password and/or expiration date" : "Errore, digita la password corretta e/o la data di scadenza",
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index de255c3cb60..add756e119b 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -181,6 +181,7 @@
"Create a new share link" : "Crea un nuovo collegamento di condivisione",
"{shareWith} by {initiator}" : "{shareWith} da {initiator}",
"Shared via link by {initiator}" : "Condiviso tramite collegamento da {initiator}",
+ "Mail share ({label})" : "Condivisione email ({label})",
"Share link ({label})" : "Condividi collegamento ({label})",
"Share link" : "Condividi collegamento",
"Error, please enter proper password and/or expiration date" : "Errore, digita la password corretta e/o la data di scadenza",
diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php
index 31f13ee2756..7e83ffaa7dc 100644
--- a/apps/files_sharing/lib/Controller/ShareController.php
+++ b/apps/files_sharing/lib/Controller/ShareController.php
@@ -343,7 +343,7 @@ class ShareController extends AuthPublicShareController {
$ownerAccount = $this->accountManager->getAccount($owner);
$ownerName = $ownerAccount->getProperty(IAccountManager::PROPERTY_DISPLAYNAME);
- if ($ownerName->getScope() === IAccountManager::VISIBILITY_PUBLIC) {
+ if ($ownerName->getScope() === IAccountManager::SCOPE_PUBLISHED) {
$shareTmpl['owner'] = $owner->getUID();
$shareTmpl['shareOwner'] = $owner->getDisplayName();
}
diff --git a/apps/files_sharing/tests/Controller/ShareControllerTest.php b/apps/files_sharing/tests/Controller/ShareControllerTest.php
index 270f38a1148..e00d6bc8c66 100644
--- a/apps/files_sharing/tests/Controller/ShareControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareControllerTest.php
@@ -234,7 +234,7 @@ class ShareControllerTest extends \Test\TestCase {
$accountName = $this->createMock(IAccountProperty::class);
$accountName->method('getScope')
- ->willReturn(IAccountManager::VISIBILITY_PUBLIC);
+ ->willReturn(IAccountManager::SCOPE_PUBLISHED);
$account = $this->createMock(IAccount::class);
$account->method('getProperty')
->with(IAccountManager::PROPERTY_DISPLAYNAME)
@@ -381,7 +381,7 @@ class ShareControllerTest extends \Test\TestCase {
$accountName = $this->createMock(IAccountProperty::class);
$accountName->method('getScope')
- ->willReturn(IAccountManager::VISIBILITY_PRIVATE);
+ ->willReturn(IAccountManager::SCOPE_LOCAL);
$account = $this->createMock(IAccount::class);
$account->method('getProperty')
->with(IAccountManager::PROPERTY_DISPLAYNAME)
@@ -528,7 +528,7 @@ class ShareControllerTest extends \Test\TestCase {
$accountName = $this->createMock(IAccountProperty::class);
$accountName->method('getScope')
- ->willReturn(IAccountManager::VISIBILITY_PUBLIC);
+ ->willReturn(IAccountManager::SCOPE_PUBLISHED);
$account = $this->createMock(IAccount::class);
$account->method('getProperty')
->with(IAccountManager::PROPERTY_DISPLAYNAME)
@@ -688,7 +688,7 @@ class ShareControllerTest extends \Test\TestCase {
$accountName = $this->createMock(IAccountProperty::class);
$accountName->method('getScope')
- ->willReturn(IAccountManager::VISIBILITY_PUBLIC);
+ ->willReturn(IAccountManager::SCOPE_PUBLISHED);
$account = $this->createMock(IAccount::class);
$account->method('getProperty')
->with(IAccountManager::PROPERTY_DISPLAYNAME)
diff --git a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
index 889fcfd6277..c462eeedb43 100644
--- a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
+++ b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
@@ -193,7 +193,7 @@ class RetryJob extends Job {
$publicData = [];
foreach ($account->getProperties() as $property) {
- if ($property->getScope() === IAccountManager::VISIBILITY_PUBLIC) {
+ if ($property->getScope() === IAccountManager::SCOPE_PUBLISHED) {
$publicData[$property->getName()] = $property->getValue();
}
}
diff --git a/apps/provisioning_api/composer/composer/autoload_classmap.php b/apps/provisioning_api/composer/composer/autoload_classmap.php
index e94a97c1949..22927806e65 100644
--- a/apps/provisioning_api/composer/composer/autoload_classmap.php
+++ b/apps/provisioning_api/composer/composer/autoload_classmap.php
@@ -8,6 +8,7 @@ $baseDir = $vendorDir;
return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'OCA\\Provisioning_API\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Provisioning_API\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
'OCA\\Provisioning_API\\Controller\\AUserData' => $baseDir . '/../lib/Controller/AUserData.php',
'OCA\\Provisioning_API\\Controller\\AppConfigController' => $baseDir . '/../lib/Controller/AppConfigController.php',
'OCA\\Provisioning_API\\Controller\\AppsController' => $baseDir . '/../lib/Controller/AppsController.php',
diff --git a/apps/provisioning_api/composer/composer/autoload_static.php b/apps/provisioning_api/composer/composer/autoload_static.php
index b982f203211..f5a4b73f4f8 100644
--- a/apps/provisioning_api/composer/composer/autoload_static.php
+++ b/apps/provisioning_api/composer/composer/autoload_static.php
@@ -23,6 +23,7 @@ class ComposerStaticInitProvisioning_API
public static $classMap = array (
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'OCA\\Provisioning_API\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Provisioning_API\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
'OCA\\Provisioning_API\\Controller\\AUserData' => __DIR__ . '/..' . '/../lib/Controller/AUserData.php',
'OCA\\Provisioning_API\\Controller\\AppConfigController' => __DIR__ . '/..' . '/../lib/Controller/AppConfigController.php',
'OCA\\Provisioning_API\\Controller\\AppsController' => __DIR__ . '/..' . '/../lib/Controller/AppsController.php',
diff --git a/apps/provisioning_api/lib/AppInfo/Application.php b/apps/provisioning_api/lib/AppInfo/Application.php
index 7ec21c3329e..af6b2b33711 100644
--- a/apps/provisioning_api/lib/AppInfo/Application.php
+++ b/apps/provisioning_api/lib/AppInfo/Application.php
@@ -29,6 +29,7 @@
namespace OCA\Provisioning_API\AppInfo;
use OC\Group\Manager as GroupManager;
+use OCA\Provisioning_API\Capabilities;
use OCA\Provisioning_API\Listener\UserDeletedListener;
use OCA\Provisioning_API\Middleware\ProvisioningApiMiddleware;
use OCA\Settings\Mailer\NewUserMailHelper;
@@ -92,6 +93,7 @@ class Application extends App implements IBootstrap {
);
});
$context->registerMiddleware(ProvisioningApiMiddleware::class);
+ $context->registerCapability(Capabilities::class);
}
public function boot(IBootContext $context): void {
diff --git a/apps/provisioning_api/lib/Capabilities.php b/apps/provisioning_api/lib/Capabilities.php
new file mode 100644
index 00000000000..d355e4db4c2
--- /dev/null
+++ b/apps/provisioning_api/lib/Capabilities.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * @copyright Copyright (c) 2021 Vincent Petry <vincent@nextcloud.com>
+ *
+ * @author Vincent Petry <vincent@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\Provisioning_API;
+
+use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCP\App\IAppManager;
+use OCP\Capabilities\ICapability;
+
+class Capabilities implements ICapability {
+
+ /** @var IAppManager */
+ private $appManager;
+
+ public function __construct(IAppManager $appManager) {
+ $this->appManager = $appManager;
+ }
+
+ /**
+ * Function an app uses to return the capabilities
+ *
+ * @return array Array containing the apps capabilities
+ */
+ public function getCapabilities() {
+ $federationScopesEnabled = false;
+
+ $federatedFileSharingEnabled = $this->appManager->isEnabledForUser('federatedfilesharing');
+ if ($federatedFileSharingEnabled) {
+ /** @var FederatedShareProvider $shareProvider */
+ $shareProvider = \OC::$server->query(FederatedShareProvider::class);
+ $federationScopesEnabled = $shareProvider->isLookupServerUploadEnabled();
+ }
+
+ return [
+ 'provisioning_api' => [
+ 'version' => $this->appManager->getAppVersion('provisioning_api'),
+ 'AccountPropertyScopesVersion' => 2,
+ 'AccountPropertyScopesFederationEnabled' => $federationScopesEnabled,
+ ]
+ ];
+ }
+}
diff --git a/apps/provisioning_api/lib/Controller/AUserData.php b/apps/provisioning_api/lib/Controller/AUserData.php
index b7b31b18b53..1280ef2136c 100644
--- a/apps/provisioning_api/lib/Controller/AUserData.php
+++ b/apps/provisioning_api/lib/Controller/AUserData.php
@@ -50,6 +50,7 @@ use OCP\User\Backend\ISetDisplayNameBackend;
use OCP\User\Backend\ISetPasswordBackend;
abstract class AUserData extends OCSController {
+ public const SCOPE_SUFFIX = 'Scope';
/** @var IUserManager */
protected $userManager;
@@ -86,12 +87,13 @@ abstract class AUserData extends OCSController {
* creates a array with all user data
*
* @param string $userId
+ * @param bool $includeScopes
* @return array
* @throws NotFoundException
* @throws OCSException
* @throws OCSNotFoundException
*/
- protected function getUserData(string $userId): array {
+ protected function getUserData(string $userId, bool $includeScopes = false): array {
$currentLoggedInUser = $this->userSession->getUser();
$data = [];
@@ -114,7 +116,7 @@ abstract class AUserData extends OCSController {
}
// Get groups data
- $userAccount = $this->accountManager->getUser($targetUserObject);
+ $userAccount = $this->accountManager->getAccount($targetUserObject);
$groups = $this->groupManager->getUserGroups($targetUserObject);
$gids = [];
foreach ($groups as $group) {
@@ -136,12 +138,33 @@ abstract class AUserData extends OCSController {
$data['backend'] = $targetUserObject->getBackendClassName();
$data['subadmin'] = $this->getUserSubAdminGroupsData($targetUserObject->getUID());
$data['quota'] = $this->fillStorageInfo($targetUserObject->getUID());
+
+ if ($includeScopes) {
+ $data[IAccountManager::PROPERTY_AVATAR . self::SCOPE_SUFFIX] = $userAccount->getProperty(IAccountManager::PROPERTY_AVATAR)->getScope();
+ }
+
$data[IAccountManager::PROPERTY_EMAIL] = $targetUserObject->getEMailAddress();
+ if ($includeScopes) {
+ $data[IAccountManager::PROPERTY_EMAIL . self::SCOPE_SUFFIX] = $userAccount->getProperty(IAccountManager::PROPERTY_EMAIL)->getScope();
+ }
$data[IAccountManager::PROPERTY_DISPLAYNAME] = $targetUserObject->getDisplayName();
- $data[IAccountManager::PROPERTY_PHONE] = $userAccount[IAccountManager::PROPERTY_PHONE]['value'];
- $data[IAccountManager::PROPERTY_ADDRESS] = $userAccount[IAccountManager::PROPERTY_ADDRESS]['value'];
- $data[IAccountManager::PROPERTY_WEBSITE] = $userAccount[IAccountManager::PROPERTY_WEBSITE]['value'];
- $data[IAccountManager::PROPERTY_TWITTER] = $userAccount[IAccountManager::PROPERTY_TWITTER]['value'];
+ if ($includeScopes) {
+ $data[IAccountManager::PROPERTY_DISPLAYNAME . self::SCOPE_SUFFIX] = $userAccount->getProperty(IAccountManager::PROPERTY_DISPLAYNAME)->getScope();
+ }
+
+ foreach ([
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ ] as $propertyName) {
+ $property = $userAccount->getProperty($propertyName);
+ $data[$propertyName] = $property->getValue();
+ if ($includeScopes) {
+ $data[$propertyName . self::SCOPE_SUFFIX] = $property->getScope();
+ }
+ }
+
$data['groups'] = $gids;
$data['language'] = $this->l10nFactory->getUserLanguage($targetUserObject);
$data['locale'] = $this->config->getUserValue($targetUserObject->getUID(), 'core', 'locale');
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index db4138054e7..f65744d9430 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -50,7 +50,6 @@ use OC\Accounts\AccountManager;
use OC\Authentication\Token\RemoteWipe;
use OC\HintException;
use OC\KnownUser\KnownUserService;
-use OCA\Provisioning_API\FederatedShareProviderFactory;
use OCA\Settings\Mailer\NewUserMailHelper;
use OCP\Accounts\IAccountManager;
use OCP\App\IAppManager;
@@ -84,8 +83,6 @@ class UsersController extends AUserData {
protected $l10nFactory;
/** @var NewUserMailHelper */
private $newUserMailHelper;
- /** @var FederatedShareProviderFactory */
- private $federatedShareProviderFactory;
/** @var ISecureRandom */
private $secureRandom;
/** @var RemoteWipe */
@@ -107,7 +104,6 @@ class UsersController extends AUserData {
ILogger $logger,
IFactory $l10nFactory,
NewUserMailHelper $newUserMailHelper,
- FederatedShareProviderFactory $federatedShareProviderFactory,
ISecureRandom $secureRandom,
RemoteWipe $remoteWipe,
KnownUserService $knownUserService,
@@ -126,7 +122,6 @@ class UsersController extends AUserData {
$this->logger = $logger;
$this->l10nFactory = $l10nFactory;
$this->newUserMailHelper = $newUserMailHelper;
- $this->federatedShareProviderFactory = $federatedShareProviderFactory;
$this->secureRandom = $secureRandom;
$this->remoteWipe = $remoteWipe;
$this->knownUserService = $knownUserService;
@@ -238,6 +233,7 @@ class UsersController extends AUserData {
/** @var IUser $user */
$user = $this->userSession->getUser();
$knownTo = $user->getUID();
+ $defaultPhoneRegion = $this->config->getSystemValueString('default_phone_region');
$normalizedNumberToKey = [];
foreach ($search as $key => $phoneNumbers) {
@@ -250,6 +246,20 @@ class UsersController extends AUserData {
}
} catch (NumberParseException $e) {
}
+
+ if ($defaultPhoneRegion !== '' && $defaultPhoneRegion !== $location && strpos($phone, '0') === 0) {
+ // If the number has a leading zero (no country code),
+ // we also check the default phone region of the instance,
+ // when it's different to the user's given region.
+ try {
+ $phoneNumber = $phoneUtil->parse($phone, $defaultPhoneRegion);
+ if ($phoneNumber instanceof PhoneNumber && $phoneUtil->isValidNumber($phoneNumber)) {
+ $normalizedNumber = $phoneUtil->format($phoneNumber, PhoneNumberFormat::E164);
+ $normalizedNumberToKey[$normalizedNumber] = (string) $key;
+ }
+ } catch (NumberParseException $e) {
+ }
+ }
}
}
@@ -475,7 +485,13 @@ class UsersController extends AUserData {
* @throws OCSException
*/
public function getUser(string $userId): DataResponse {
- $data = $this->getUserData($userId);
+ $includeScopes = false;
+ $currentUser = $this->userSession->getUser();
+ if ($currentUser && $currentUser->getUID() === $userId) {
+ $includeScopes = true;
+ }
+
+ $data = $this->getUserData($userId, $includeScopes);
// getUserData returns empty array if not enough permissions
if (empty($data)) {
throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED);
@@ -495,7 +511,7 @@ class UsersController extends AUserData {
public function getCurrentUser(): DataResponse {
$user = $this->userSession->getUser();
if ($user) {
- $data = $this->getUserData($user->getUID());
+ $data = $this->getUserData($user->getUID(), true);
// rename "displayname" to "display-name" only for this call to keep
// the API stable.
$data['display-name'] = $data['displayname'];
@@ -519,15 +535,10 @@ class UsersController extends AUserData {
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
}
- if ($this->appManager->isEnabledForUser('federatedfilesharing')) {
- $shareProvider = $this->federatedShareProviderFactory->get();
- if ($shareProvider->isLookupServerUploadEnabled()) {
- $permittedFields[] = IAccountManager::PROPERTY_PHONE;
- $permittedFields[] = IAccountManager::PROPERTY_ADDRESS;
- $permittedFields[] = IAccountManager::PROPERTY_WEBSITE;
- $permittedFields[] = IAccountManager::PROPERTY_TWITTER;
- }
- }
+ $permittedFields[] = IAccountManager::PROPERTY_PHONE;
+ $permittedFields[] = IAccountManager::PROPERTY_ADDRESS;
+ $permittedFields[] = IAccountManager::PROPERTY_WEBSITE;
+ $permittedFields[] = IAccountManager::PROPERTY_TWITTER;
return new DataResponse($permittedFields);
}
@@ -562,6 +573,9 @@ class UsersController extends AUserData {
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
}
+ $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME . self::SCOPE_SUFFIX;
+ $permittedFields[] = IAccountManager::PROPERTY_EMAIL . self::SCOPE_SUFFIX;
+
$permittedFields[] = 'password';
if ($this->config->getSystemValue('force_language', false) === false ||
$this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
@@ -573,15 +587,16 @@ class UsersController extends AUserData {
$permittedFields[] = 'locale';
}
- if ($this->appManager->isEnabledForUser('federatedfilesharing')) {
- $shareProvider = $this->federatedShareProviderFactory->get();
- if ($shareProvider->isLookupServerUploadEnabled()) {
- $permittedFields[] = IAccountManager::PROPERTY_PHONE;
- $permittedFields[] = IAccountManager::PROPERTY_ADDRESS;
- $permittedFields[] = IAccountManager::PROPERTY_WEBSITE;
- $permittedFields[] = IAccountManager::PROPERTY_TWITTER;
- }
- }
+ $permittedFields[] = IAccountManager::PROPERTY_PHONE;
+ $permittedFields[] = IAccountManager::PROPERTY_ADDRESS;
+ $permittedFields[] = IAccountManager::PROPERTY_WEBSITE;
+ $permittedFields[] = IAccountManager::PROPERTY_TWITTER;
+ $permittedFields[] = IAccountManager::PROPERTY_PHONE . self::SCOPE_SUFFIX;
+ $permittedFields[] = IAccountManager::PROPERTY_ADDRESS . self::SCOPE_SUFFIX;
+ $permittedFields[] = IAccountManager::PROPERTY_WEBSITE . self::SCOPE_SUFFIX;
+ $permittedFields[] = IAccountManager::PROPERTY_TWITTER . self::SCOPE_SUFFIX;
+
+ $permittedFields[] = IAccountManager::PROPERTY_AVATAR . self::SCOPE_SUFFIX;
// If admin they can edit their own quota
if ($this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
@@ -686,6 +701,24 @@ class UsersController extends AUserData {
}
}
break;
+ case IAccountManager::PROPERTY_DISPLAYNAME . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_EMAIL . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_PHONE . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_ADDRESS . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_WEBSITE . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_TWITTER . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_AVATAR . self::SCOPE_SUFFIX:
+ $propertyName = substr($key, 0, strlen($key) - strlen(self::SCOPE_SUFFIX));
+ $userAccount = $this->accountManager->getUser($targetUser);
+ if ($userAccount[$propertyName]['scope'] !== $value) {
+ $userAccount[$propertyName]['scope'] = $value;
+ try {
+ $this->accountManager->updateUser($targetUser, $userAccount, true);
+ } catch (\InvalidArgumentException $e) {
+ throw new OCSException('Invalid ' . $e->getMessage(), 102);
+ }
+ }
+ break;
default:
throw new OCSException('', 103);
}
diff --git a/apps/provisioning_api/tests/CapabilitiesTest.php b/apps/provisioning_api/tests/CapabilitiesTest.php
new file mode 100644
index 00000000000..89a4215d273
--- /dev/null
+++ b/apps/provisioning_api/tests/CapabilitiesTest.php
@@ -0,0 +1,92 @@
+<?php
+/**
+ * @copyright Copyright (c) 2021 Vincent Petry <vincent@nextcloud.com>
+ *
+ * @author Vincent Petry <vincent@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\Provisioning_API\Tests\unit;
+
+use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCA\Provisioning_API\Capabilities;
+use OCP\App\IAppManager;
+use PHPUnit\Framework\MockObject\MockObject;
+use Test\TestCase;
+
+/**
+ * Capabilities test for provisioning API.
+ *
+ * Note: group DB needed because of usage of overwriteService()
+ *
+ * @package OCA\Provisioning_API\Tests
+ * @group DB
+ */
+class CapabilitiesTest extends TestCase {
+
+ /** @var Capabilities */
+ protected $capabilities;
+
+ /** @var IAppManager|MockObject */
+ protected $appManager;
+
+ public function setUp(): void {
+ parent::setUp();
+ $this->appManager = $this->createMock(IAppManager::class);
+ $this->capabilities = new Capabilities($this->appManager);
+
+ $this->appManager->expects($this->once())
+ ->method('getAppVersion')
+ ->with('provisioning_api')
+ ->willReturn('1.12');
+ }
+
+ public function getCapabilitiesProvider() {
+ return [
+ [false, false, false],
+ [true, false, false],
+ [true, true, true],
+ ];
+ }
+
+ /**
+ * @dataProvider getCapabilitiesProvider
+ */
+ public function testGetCapabilities($federationAppEnabled, $lookupServerEnabled, $expectedFederationScopesEnabled) {
+ $this->appManager->expects($this->once())
+ ->method('isEnabledForUser')
+ ->with('federatedfilesharing')
+ ->willReturn($federationAppEnabled);
+
+ $federatedShareProvider = $this->createMock(FederatedShareProvider::class);
+ $this->overwriteService(FederatedShareProvider::class, $federatedShareProvider);
+
+ $federatedShareProvider->expects($this->any())
+ ->method('isLookupServerUploadEnabled')
+ ->willReturn($lookupServerEnabled);
+
+ $expected = [
+ 'provisioning_api' => [
+ 'version' => '1.12',
+ 'AccountPropertyScopesVersion' => 2,
+ 'AccountPropertyScopesFederationEnabled' => $expectedFederationScopesEnabled,
+ ],
+ ];
+ $this->assertSame($expected, $this->capabilities->getCapabilities());
+ }
+}
diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
index 39743579b7a..2b4ca780625 100644
--- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
@@ -46,11 +46,11 @@ use OC\Authentication\Token\RemoteWipe;
use OC\Group\Manager;
use OC\KnownUser\KnownUserService;
use OC\SubAdmin;
-use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\Provisioning_API\Controller\UsersController;
-use OCA\Provisioning_API\FederatedShareProviderFactory;
use OCA\Settings\Mailer\NewUserMailHelper;
+use OCP\Accounts\IAccount;
use OCP\Accounts\IAccountManager;
+use OCP\Accounts\IAccountProperty;
use OCP\App\IAppManager;
use OCP\AppFramework\Http\DataResponse;
use OCP\EventDispatcher\IEventDispatcher;
@@ -97,8 +97,6 @@ class UsersControllerTest extends TestCase {
private $l10nFactory;
/** @var NewUserMailHelper|MockObject */
private $newUserMailHelper;
- /** @var FederatedShareProviderFactory|MockObject */
- private $federatedShareProviderFactory;
/** @var ISecureRandom|MockObject */
private $secureRandom;
/** @var RemoteWipe|MockObject */
@@ -122,7 +120,6 @@ class UsersControllerTest extends TestCase {
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->l10nFactory = $this->createMock(IFactory::class);
$this->newUserMailHelper = $this->createMock(NewUserMailHelper::class);
- $this->federatedShareProviderFactory = $this->createMock(FederatedShareProviderFactory::class);
$this->secureRandom = $this->createMock(ISecureRandom::class);
$this->remoteWipe = $this->createMock(RemoteWipe::class);
$this->knownUserService = $this->createMock(KnownUserService::class);
@@ -142,7 +139,6 @@ class UsersControllerTest extends TestCase {
$this->logger,
$this->l10nFactory,
$this->newUserMailHelper,
- $this->federatedShareProviderFactory,
$this->secureRandom,
$this->remoteWipe,
$this->knownUserService,
@@ -407,7 +403,6 @@ class UsersControllerTest extends TestCase {
$this->logger,
$this->l10nFactory,
$this->newUserMailHelper,
- $this->federatedShareProviderFactory,
$this->secureRandom,
$this->remoteWipe,
$this->knownUserService,
@@ -933,7 +928,6 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$this->userSession
- ->expects($this->once())
->method('getUser')
->willReturn($loggedInUser);
$this->userManager
@@ -1003,16 +997,13 @@ class UsersControllerTest extends TestCase {
$group->expects($this->at(3))
->method('getGID')
->willReturn('group3');
- $this->accountManager->expects($this->any())->method('getUser')
- ->with($targetUser)
- ->willReturn(
- [
- IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
- IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
- IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
- IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
- ]
- );
+
+ $this->mockAccount($targetUser, [
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]);
$this->config
->expects($this->at(0))
->method('getUserValue')
@@ -1172,16 +1163,13 @@ class UsersControllerTest extends TestCase {
$targetUser
->method('getUID')
->willReturn('UID');
- $this->accountManager->expects($this->any())->method('getUser')
- ->with($targetUser)
- ->willReturn(
- [
- IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
- IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
- IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
- IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
- ]
- );
+
+ $this->mockAccount($targetUser, [
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]);
$this->l10nFactory
->expects($this->once())
@@ -1224,14 +1212,13 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$this->userSession
- ->expects($this->once())
->method('getUser')
->willReturn($loggedInUser);
$this->userManager
@@ -1343,16 +1330,12 @@ class UsersControllerTest extends TestCase {
->expects($this->once())
->method('getBackend')
->willReturn($backend);
- $this->accountManager->expects($this->any())->method('getUser')
- ->with($targetUser)
- ->willReturn(
- [
- IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
- IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
- IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
- IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
- ]
- );
+ $this->mockAccount($targetUser, [
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]);
$this->l10nFactory
->expects($this->once())
@@ -1537,6 +1520,91 @@ class UsersControllerTest extends TestCase {
$this->api->editUser('UserToEdit', 'email', 'demo.org');
}
+ public function selfEditChangePropertyProvider() {
+ return [
+ [IAccountManager::PROPERTY_TWITTER, '@oldtwitter', '@newtwitter'],
+ [IAccountManager::PROPERTY_PHONE, '1234', '12345'],
+ [IAccountManager::PROPERTY_ADDRESS, 'Something street 2', 'Another street 3'],
+ [IAccountManager::PROPERTY_WEBSITE, 'https://examplesite1', 'https://examplesite2'],
+ ];
+ }
+
+ /**
+ * @dataProvider selfEditChangePropertyProvider
+ */
+ public function testEditUserRegularUserSelfEditChangeProperty($propertyName, $oldValue, $newValue) {
+ $loggedInUser = $this->getMockBuilder(IUser::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $loggedInUser
+ ->expects($this->any())
+ ->method('getUID')
+ ->willReturn('UID');
+ $this->userSession
+ ->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('UserToEdit')
+ ->willReturn($loggedInUser);
+
+ $this->accountManager->expects($this->once())
+ ->method('getUser')
+ ->with($loggedInUser)
+ ->willReturn([$propertyName => ['value' => $oldValue, 'scope' => IAccountManager::SCOPE_LOCAL]]);
+ $this->accountManager->expects($this->once())
+ ->method('updateUser')
+ ->with($loggedInUser, [$propertyName => ['value' => $newValue, 'scope' => IAccountManager::SCOPE_LOCAL]], true);
+
+ $this->assertEquals([], $this->api->editUser('UserToEdit', $propertyName, $newValue)->getData());
+ }
+
+ public function selfEditChangePropertyScopeProvider() {
+ return [
+ [IAccountManager::PROPERTY_AVATAR, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_DISPLAYNAME, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_EMAIL, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_TWITTER, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_PHONE, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_ADDRESS, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_WEBSITE, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ ];
+ }
+
+ /**
+ * @dataProvider selfEditChangePropertyProvider
+ */
+ public function testEditUserRegularUserSelfEditChangePropertyScope($propertyName, $oldScope, $newScope) {
+ $loggedInUser = $this->getMockBuilder(IUser::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $loggedInUser
+ ->expects($this->any())
+ ->method('getUID')
+ ->willReturn('UID');
+ $this->userSession
+ ->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('UserToEdit')
+ ->willReturn($loggedInUser);
+
+ $this->accountManager->expects($this->once())
+ ->method('getUser')
+ ->with($loggedInUser)
+ ->willReturn([$propertyName => ['value' => 'somevalue', 'scope' => $oldScope]]);
+ $this->accountManager->expects($this->once())
+ ->method('updateUser')
+ ->with($loggedInUser, [$propertyName => ['value' => 'somevalue', 'scope' => $newScope]], true);
+
+ $this->assertEquals([], $this->api->editUser('UserToEdit', $propertyName . 'Scope', $newScope)->getData());
+ }
+
public function testEditUserRegularUserSelfEditChangePassword() {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
@@ -3246,7 +3314,6 @@ class UsersControllerTest extends TestCase {
$this->logger,
$this->l10nFactory,
$this->newUserMailHelper,
- $this->federatedShareProviderFactory,
$this->secureRandom,
$this->remoteWipe,
$this->knownUserService,
@@ -3255,7 +3322,7 @@ class UsersControllerTest extends TestCase {
->setMethods(['getUserData'])
->getMock();
- $api->expects($this->once())->method('getUserData')->with('UID')
+ $api->expects($this->once())->method('getUserData')->with('UID', true)
->willReturn(
[
'id' => 'UID',
@@ -3296,8 +3363,15 @@ class UsersControllerTest extends TestCase {
$this->api->getCurrentUser();
}
-
public function testGetUser() {
+ $loggedInUser = $this->createMock(IUser::class);
+ $loggedInUser
+ ->method('getUID')
+ ->willReturn('currentuser');
+ $this->userSession
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+
/** @var UsersController | MockObject $api */
$api = $this->getMockBuilder(UsersController::class)
->setConstructorArgs([
@@ -3313,7 +3387,6 @@ class UsersControllerTest extends TestCase {
$this->logger,
$this->l10nFactory,
$this->newUserMailHelper,
- $this->federatedShareProviderFactory,
$this->secureRandom,
$this->remoteWipe,
$this->knownUserService,
@@ -3334,11 +3407,16 @@ class UsersControllerTest extends TestCase {
'displayname' => 'Demo User'
];
- $api->expects($this->once())->method('getUserData')
- ->with('uid')
+ $api->expects($this->at(0))->method('getUserData')
+ ->with('uid', false)
+ ->willReturn($expected);
+ $api->expects($this->at(1))->method('getUserData')
+ ->with('currentuser', true)
->willReturn($expected);
$this->assertSame($expected, $api->getUser('uid')->getData());
+
+ $this->assertSame($expected, $api->getUser('currentuser')->getData());
}
@@ -3638,18 +3716,13 @@ class UsersControllerTest extends TestCase {
public function dataGetEditableFields() {
return [
- [false, false, []],
- [false, true, [
+ [false, [
IAccountManager::PROPERTY_PHONE,
IAccountManager::PROPERTY_ADDRESS,
IAccountManager::PROPERTY_WEBSITE,
IAccountManager::PROPERTY_TWITTER,
]],
- [ true, false, [
- IAccountManager::PROPERTY_DISPLAYNAME,
- IAccountManager::PROPERTY_EMAIL,
- ]],
- [ true, true ,[
+ [ true, [
IAccountManager::PROPERTY_DISPLAYNAME,
IAccountManager::PROPERTY_EMAIL,
IAccountManager::PROPERTY_PHONE,
@@ -3664,29 +3737,36 @@ class UsersControllerTest extends TestCase {
* @dataProvider dataGetEditableFields
*
* @param bool $allowedToChangeDisplayName
- * @param bool $federatedSharingEnabled
* @param array $expected
*/
- public function testGetEditableFields(bool $allowedToChangeDisplayName, bool $federatedSharingEnabled, array $expected) {
+ public function testGetEditableFields(bool $allowedToChangeDisplayName, array $expected) {
$this->config
->method('getSystemValue')
->with(
$this->equalTo('allow_user_to_change_display_name'),
$this->anything()
)->willReturn($allowedToChangeDisplayName);
- $this->appManager
- ->method('isEnabledForUser')
- ->with($this->equalTo('federatedfilesharing'))
- ->willReturn($federatedSharingEnabled);
-
- $shareprovider = $this->createMock(FederatedShareProvider::class);
- $shareprovider->method('isLookupServerUploadEnabled')->willReturn(true);
-
- $this->federatedShareProviderFactory
- ->method('get')
- ->willReturn($shareprovider);
$expectedResp = new DataResponse($expected);
$this->assertEquals($expectedResp, $this->api->getEditableFields());
}
+
+ private function mockAccount($targetUser, $accountProperties) {
+ $mockedProperties = [];
+
+ foreach ($accountProperties as $propertyName => $data) {
+ $mockedProperty = $this->createMock(IAccountProperty::class);
+ $mockedProperty->method('getValue')->willReturn($data['value'] ?? '');
+ $mockedProperty->method('getScope')->willReturn($data['scope'] ?? '');
+ $mockedProperties[] = [$propertyName, $mockedProperty];
+ }
+
+ $account = $this->createMock(IAccount::class);
+ $account->method('getProperty')
+ ->will($this->returnValueMap($mockedProperties));
+
+ $this->accountManager->expects($this->any())->method('getAccount')
+ ->with($targetUser)
+ ->willReturn($account);
+ }
}
diff --git a/apps/settings/js/federationscopemenu.js b/apps/settings/js/federationscopemenu.js
index 170aec15a85..d19c9d7d0bf 100644
--- a/apps/settings/js/federationscopemenu.js
+++ b/apps/settings/js/federationscopemenu.js
@@ -15,6 +15,8 @@
* Construct a new FederationScopeMenu instance
* @constructs FederationScopeMenu
* @memberof OC.Settings
+ * @param {object} options
+ * @param {array.<string>} [options.excludedScopes] array of excluded scopes
*/
var FederationScopeMenu = OC.Backbone.View.extend({
tagName: 'div',
@@ -26,27 +28,40 @@
this.field = options.field;
this._scopes = [
{
- name: 'private',
+ name: 'v2-private',
displayName: t('settings', 'Private'),
- tooltip: t('settings', "Don't synchronize to servers"),
+ tooltip: t('settings', 'Only visible to people matched via phone number integration through Talk on mobile'),
+ iconClass: 'icon-phone',
+ active: false
+ },
+ {
+ name: 'v2-local',
+ displayName: t('settings', 'Local'),
+ tooltip: t('settings', 'Only visible to people on this instance and guests'),
iconClass: 'icon-password',
active: false
},
{
- name: 'contacts',
- displayName: t('settings', 'Trusted'),
+ name: 'v2-federated',
+ displayName: t('settings', 'Federated'),
tooltip: t('settings', 'Only synchronize to trusted servers'),
iconClass: 'icon-contacts-dark',
active: false
},
{
- name: 'public',
- displayName: t('settings', 'Public'),
+ name: 'v2-published',
+ displayName: t('settings', 'Published'),
tooltip: t('settings', 'Synchronize to trusted servers and the global and public address book'),
iconClass: 'icon-link',
active: false
}
];
+
+ if (options.excludedScopes && options.excludedScopes.length) {
+ this._scopes = this._scopes.filter(function(scopeEntry) {
+ return options.excludedScopes.indexOf(scopeEntry.name) === -1;
+ })
+ }
},
/**
@@ -102,19 +117,11 @@
var currentlyActiveValue = $('#'+context.target.closest('form').id).find('input[type="hidden"]')[0].value;
for(var i in this._scopes) {
- this._scopes[i].active = false;
- }
-
- switch (currentlyActiveValue) {
- case 'private':
- this._scopes[0].active = true;
- break;
- case 'contacts':
- this._scopes[1].active = true;
- break;
- case 'public':
- this._scopes[2].active = true;
- break;
+ if (this._scopes[i].name === currentlyActiveValue) {
+ this._scopes[i].active = true;
+ } else {
+ this._scopes[i].active = false;
+ }
}
this.render();
diff --git a/apps/settings/js/federationsettingsview.js b/apps/settings/js/federationsettingsview.js
index 9cefaf132f2..cf7f4648905 100644
--- a/apps/settings/js/federationsettingsview.js
+++ b/apps/settings/js/federationsettingsview.js
@@ -10,6 +10,13 @@
(function(_, $, OC) {
'use strict';
+ /**
+ * Construct a new FederationScopeMenu instance
+ * @constructs FederationScopeMenu
+ * @memberof OC.Settings
+ * @param {object} options
+ * @param {bool} [options.lookupServerUploadEnabled=false] whether uploading to the lookup server is enabled
+ */
var FederationSettingsView = OC.Backbone.View.extend({
_inputFields: undefined,
@@ -24,6 +31,7 @@
} else {
this._config = new OC.Settings.UserSettings();
}
+ this.showFederationScopes = !!options.showFederationScopes;
this._inputFields = [
'displayname',
@@ -61,9 +69,31 @@
render: function() {
var self = this;
+ var fieldsWithV2Private = [
+ 'avatar',
+ 'phone',
+ 'twitter',
+ 'website',
+ 'address',
+ ];
+
_.each(this._inputFields, function(field) {
var $icon = self.$('#' + field + 'form h3 > .federation-menu');
- var scopeMenu = new OC.Settings.FederationScopeMenu({field: field});
+ var excludedScopes = []
+
+ if (fieldsWithV2Private.indexOf(field) === -1) {
+ excludedScopes.push('v2-private');
+ }
+
+ if (!self.showFederationScopes) {
+ excludedScopes.push('v2-federated');
+ excludedScopes.push('v2-published');
+ }
+
+ var scopeMenu = new OC.Settings.FederationScopeMenu({
+ field: field,
+ excludedScopes: excludedScopes,
+ });
self.listenTo(scopeMenu, 'select:scope', function(scope) {
self._onScopeChanged(field, scope);
@@ -207,15 +237,16 @@
$icon.addClass('hidden');
switch (scope) {
- case 'private':
+ case 'v2-private':
+ case 'v2-local':
$icon.addClass('icon-password');
$icon.removeClass('hidden');
break;
- case 'contacts':
+ case 'v2-federated':
$icon.addClass('icon-contacts-dark');
$icon.removeClass('hidden');
break;
- case 'public':
+ case 'v2-published':
$icon.addClass('icon-link');
$icon.removeClass('hidden');
break;
diff --git a/apps/settings/js/settings/personalInfo.js b/apps/settings/js/settings/personalInfo.js
index a6055fd7a94..e71f4840123 100644
--- a/apps/settings/js/settings/personalInfo.js
+++ b/apps/settings/js/settings/personalInfo.js
@@ -199,10 +199,12 @@ window.addEventListener('DOMContentLoaded', function () {
});
+ var settingsEl = $('#personal-settings')
var userSettings = new OC.Settings.UserSettings();
var federationSettingsView = new OC.Settings.FederationSettingsView({
- el: '#personal-settings',
- config: userSettings
+ el: settingsEl,
+ config: userSettings,
+ showFederationScopes: !!settingsEl.data('lookup-server-upload-enabled'),
});
userSettings.on("sync", function() {
diff --git a/apps/settings/js/usersettings.js b/apps/settings/js/usersettings.js
index a02aae6fb6a..21a122094f5 100644
--- a/apps/settings/js/usersettings.js
+++ b/apps/settings/js/usersettings.js
@@ -10,6 +10,8 @@
(function() {
'use strict';
+ var errorNotification;
+
/**
* Model for storing and saving user settings
*
@@ -25,8 +27,12 @@
return null;
}
+ if (errorNotification) {
+ errorNotification.hide();
+ }
+
if (data.status && data.status === 'error') {
- OC.Notification.show(data.data.message, { type: 'error' });
+ errorNotification = OC.Notification.show(data.data.message, { type: 'error' });
}
if (_.isUndefined(data.data)) {
diff --git a/apps/settings/l10n/ar.js b/apps/settings/l10n/ar.js
index 322c4f95727..e3064e40bc4 100644
--- a/apps/settings/l10n/ar.js
+++ b/apps/settings/l10n/ar.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "جارٍ الإرسال …",
"Email sent" : "تم ارسال البريد الالكتروني",
"Private" : "خاص بك",
- "Public" : "عمومي",
+ "Local" : "المحلي",
"Verify" : "تحقق",
"Verifying …" : "عملية التحقق جارية …",
"Unable to change password" : "لا يمكن تغيير كلمة المرور",
@@ -244,11 +244,11 @@ OC.L10N.register(
"Change password" : "عدل كلمة السر",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "خطأ غير متوقع. يرجى رفع شهادة ASCII-encoded PEM.",
"Valid until {date}" : "صالح إلى غاية {date}",
- "Local" : "المحلي",
"Only visible to local users" : "ظاهر فقط للمستخدِمين المحليين",
"Only visible to you" : "ظاهر فقط بالنسبة لك",
"Contacts" : "جهات الإتصال",
"Visible to local users and to trusted servers" : "ظاهر فقط للمستخدمين المحليين و للخوادم الموثوق فيها",
+ "Public" : "عمومي",
"by" : "من قبل",
"SSL Root Certificates" : "شهادات أمان الـ SSL الجذرية",
"Common Name" : "الإسم الشائع",
diff --git a/apps/settings/l10n/ar.json b/apps/settings/l10n/ar.json
index 6d740844c5d..7303933ffd8 100644
--- a/apps/settings/l10n/ar.json
+++ b/apps/settings/l10n/ar.json
@@ -6,7 +6,7 @@
"Sending…" : "جارٍ الإرسال …",
"Email sent" : "تم ارسال البريد الالكتروني",
"Private" : "خاص بك",
- "Public" : "عمومي",
+ "Local" : "المحلي",
"Verify" : "تحقق",
"Verifying …" : "عملية التحقق جارية …",
"Unable to change password" : "لا يمكن تغيير كلمة المرور",
@@ -242,11 +242,11 @@
"Change password" : "عدل كلمة السر",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "خطأ غير متوقع. يرجى رفع شهادة ASCII-encoded PEM.",
"Valid until {date}" : "صالح إلى غاية {date}",
- "Local" : "المحلي",
"Only visible to local users" : "ظاهر فقط للمستخدِمين المحليين",
"Only visible to you" : "ظاهر فقط بالنسبة لك",
"Contacts" : "جهات الإتصال",
"Visible to local users and to trusted servers" : "ظاهر فقط للمستخدمين المحليين و للخوادم الموثوق فيها",
+ "Public" : "عمومي",
"by" : "من قبل",
"SSL Root Certificates" : "شهادات أمان الـ SSL الجذرية",
"Common Name" : "الإسم الشائع",
diff --git a/apps/settings/l10n/ast.js b/apps/settings/l10n/ast.js
index 589312d9508..0c31fbf610a 100644
--- a/apps/settings/l10n/ast.js
+++ b/apps/settings/l10n/ast.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Not saved" : "Nun se guardó",
"Sending…" : "Unviando...",
"Email sent" : "Corréu-e unviáu",
+ "Local" : "Llocal",
"Verify" : "Verificar",
"Verifying …" : "Verificando...",
"Unable to change password" : "Nun pue camudase la contraseña",
@@ -227,7 +228,6 @@ OC.L10N.register(
"Change password" : "Camudar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Asocedió un fallu. Xubi un certificáu PEM con codificación ASCII, por favor.",
"Valid until {date}" : "Válidu fasta {date}",
- "Local" : "Llocal",
"Only visible to local users" : "Namái visible pa usuarios llocales",
"Only visible to you" : "Namái visible pa ti",
"Contacts" : "Contautos",
diff --git a/apps/settings/l10n/ast.json b/apps/settings/l10n/ast.json
index 0eb62ab29a3..811086fd98d 100644
--- a/apps/settings/l10n/ast.json
+++ b/apps/settings/l10n/ast.json
@@ -5,6 +5,7 @@
"Not saved" : "Nun se guardó",
"Sending…" : "Unviando...",
"Email sent" : "Corréu-e unviáu",
+ "Local" : "Llocal",
"Verify" : "Verificar",
"Verifying …" : "Verificando...",
"Unable to change password" : "Nun pue camudase la contraseña",
@@ -225,7 +226,6 @@
"Change password" : "Camudar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Asocedió un fallu. Xubi un certificáu PEM con codificación ASCII, por favor.",
"Valid until {date}" : "Válidu fasta {date}",
- "Local" : "Llocal",
"Only visible to local users" : "Namái visible pa usuarios llocales",
"Only visible to you" : "Namái visible pa ti",
"Contacts" : "Contautos",
diff --git a/apps/settings/l10n/az.js b/apps/settings/l10n/az.js
index e4bed5765b5..06506423a47 100644
--- a/apps/settings/l10n/az.js
+++ b/apps/settings/l10n/az.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Saved" : "Saxlanıldı",
"Email sent" : "Məktub göndərildi",
+ "Local" : "Yerli",
"Unable to change password" : "Şifrəni dəyişmək olmur",
"Very weak password" : "Çox asan şifrə",
"Weak password" : "Asan şifrə",
@@ -100,7 +101,6 @@ OC.L10N.register(
"New password" : "Yeni şifrə",
"Change password" : "Şifrəni dəyiş",
"Valid until {date}" : "Müddətədək keçərlidir {date}",
- "Local" : "Yerli",
"Contacts" : "Əlaqələr",
"by" : "onunla",
"Common Name" : "Ümumi ad",
diff --git a/apps/settings/l10n/az.json b/apps/settings/l10n/az.json
index f9191a4ef41..302e21ecbed 100644
--- a/apps/settings/l10n/az.json
+++ b/apps/settings/l10n/az.json
@@ -1,6 +1,7 @@
{ "translations": {
"Saved" : "Saxlanıldı",
"Email sent" : "Məktub göndərildi",
+ "Local" : "Yerli",
"Unable to change password" : "Şifrəni dəyişmək olmur",
"Very weak password" : "Çox asan şifrə",
"Weak password" : "Asan şifrə",
@@ -98,7 +99,6 @@
"New password" : "Yeni şifrə",
"Change password" : "Şifrəni dəyiş",
"Valid until {date}" : "Müddətədək keçərlidir {date}",
- "Local" : "Yerli",
"Contacts" : "Əlaqələr",
"by" : "onunla",
"Common Name" : "Ümumi ad",
diff --git a/apps/settings/l10n/bg.js b/apps/settings/l10n/bg.js
index 6eeab62cb55..3185d0325c0 100644
--- a/apps/settings/l10n/bg.js
+++ b/apps/settings/l10n/bg.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"Sending…" : "Изпращане...",
"Email sent" : "Имейлът е изпратен",
"Private" : "Частен",
- "Public" : "Публичен",
+ "Local" : "Локално",
"Verify" : "Потвърждаване",
"Verifying …" : "Потвърждаване...",
"Unable to change password" : "Неуспешна смяна на паролата.",
@@ -248,11 +248,11 @@ OC.L10N.register(
"Change password" : "Промени паролата",
"Use a second factor besides your password to increase security for your account." : "Ползвайте двустепенно удостоверяване за да повишите сигурността на профила си.",
"Valid until {date}" : "Далидна до {date}",
- "Local" : "Локално",
"Only visible to local users" : "Видима само за локални потребители",
"Only visible to you" : "Видима само за вас",
"Contacts" : "Контакти",
"Visible to local users and to trusted servers" : "Видима за локални потребители и от доверени сървъри",
+ "Public" : "Публичен",
"Will be synced to a global and public address book" : "Въвеждане в общата и публичната адресни книги",
"by" : "от",
"Common Name" : "Познато Име",
diff --git a/apps/settings/l10n/bg.json b/apps/settings/l10n/bg.json
index 557ba747fcd..fe380e676e2 100644
--- a/apps/settings/l10n/bg.json
+++ b/apps/settings/l10n/bg.json
@@ -4,7 +4,7 @@
"Sending…" : "Изпращане...",
"Email sent" : "Имейлът е изпратен",
"Private" : "Частен",
- "Public" : "Публичен",
+ "Local" : "Локално",
"Verify" : "Потвърждаване",
"Verifying …" : "Потвърждаване...",
"Unable to change password" : "Неуспешна смяна на паролата.",
@@ -246,11 +246,11 @@
"Change password" : "Промени паролата",
"Use a second factor besides your password to increase security for your account." : "Ползвайте двустепенно удостоверяване за да повишите сигурността на профила си.",
"Valid until {date}" : "Далидна до {date}",
- "Local" : "Локално",
"Only visible to local users" : "Видима само за локални потребители",
"Only visible to you" : "Видима само за вас",
"Contacts" : "Контакти",
"Visible to local users and to trusted servers" : "Видима за локални потребители и от доверени сървъри",
+ "Public" : "Публичен",
"Will be synced to a global and public address book" : "Въвеждане в общата и публичната адресни книги",
"by" : "от",
"Common Name" : "Познато Име",
diff --git a/apps/settings/l10n/br.js b/apps/settings/l10n/br.js
index f4816d363a9..c27036eeb88 100644
--- a/apps/settings/l10n/br.js
+++ b/apps/settings/l10n/br.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "O kas...",
"Email sent" : "Postel kaset",
"Private" : "Prevez",
- "Don't synchronize to servers" : "Na kempredit ket d'ar servijourioù",
- "Trusted" : "Fiziet",
+ "Local" : "Diabarzh",
"Only synchronize to trusted servers" : "Kempredañ da servijourioù fiziet nemetken",
- "Public" : "Publik",
"Synchronize to trusted servers and the global and public address book" : "Kempreda da servijourioù fiziet ha d'al levr chom-lerc'hioù oublik a hollek",
"Verify" : "Gwiriañ",
"Verifying …" : "O wiriañ...",
@@ -407,11 +405,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Implijour un eil-elfenn d'ho ger-tremen a gwella urentez o c'hont.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ur fazi a zo bet. Pellkasit ar sertifikad PEM enkodet e ASCII.",
"Valid until {date}" : "Gwir betek an {date}",
- "Local" : "Diabarzh",
"Only visible to local users" : "Na vez gwelet gant an implijourien diabarzh nemetken",
"Only visible to you" : "Ne vez gwelet ganeoc'h nemetken",
"Contacts" : "Darempredoù",
"Visible to local users and to trusted servers" : "Gwelet a vez gant an implijourien diabarzh hag an implijourien fiziet",
+ "Public" : "Publik",
"Will be synced to a global and public address book" : "Kemprenet a vo d'ur lerv chom-lec'h publik ha hollek",
"by" : "gant",
"SSL Root Certificates" : "SSL Sertifikad Gwrizienn",
@@ -425,6 +423,8 @@ OC.L10N.register(
"Set default expiration date for link shares" : "Lakaat un deizat termen dre ziouer evit al liamm rannañ",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Aotreañ ar skrivañ otamatek eus an anv implijourien er gemenadennoù rannet. M'a n'eo ket otreet e vo ret skrivañ tout an anv implijer pe ar chom-lec'h postel.",
"Restrict username autocompletion to users within the same groups" : "Aotreañ ar skrivañ otomatek eus anv an implijourien a zo er strollad nemetken.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Diskouez ur gemennadenn diwall war ar bajenn pellkas liammoù. (Na vez diskouezet nemet m'az eo kouachet ar roll restroù.)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Diskouez ur gemennadenn diwall war ar bajenn pellkas liammoù. (Na vez diskouezet nemet m'az eo kouachet ar roll restroù.)",
+ "Don't synchronize to servers" : "Na kempredit ket d'ar servijourioù",
+ "Trusted" : "Fiziet"
},
"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);");
diff --git a/apps/settings/l10n/br.json b/apps/settings/l10n/br.json
index 79b71232c8c..508192d6df3 100644
--- a/apps/settings/l10n/br.json
+++ b/apps/settings/l10n/br.json
@@ -6,10 +6,8 @@
"Sending…" : "O kas...",
"Email sent" : "Postel kaset",
"Private" : "Prevez",
- "Don't synchronize to servers" : "Na kempredit ket d'ar servijourioù",
- "Trusted" : "Fiziet",
+ "Local" : "Diabarzh",
"Only synchronize to trusted servers" : "Kempredañ da servijourioù fiziet nemetken",
- "Public" : "Publik",
"Synchronize to trusted servers and the global and public address book" : "Kempreda da servijourioù fiziet ha d'al levr chom-lerc'hioù oublik a hollek",
"Verify" : "Gwiriañ",
"Verifying …" : "O wiriañ...",
@@ -405,11 +403,11 @@
"Use a second factor besides your password to increase security for your account." : "Implijour un eil-elfenn d'ho ger-tremen a gwella urentez o c'hont.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ur fazi a zo bet. Pellkasit ar sertifikad PEM enkodet e ASCII.",
"Valid until {date}" : "Gwir betek an {date}",
- "Local" : "Diabarzh",
"Only visible to local users" : "Na vez gwelet gant an implijourien diabarzh nemetken",
"Only visible to you" : "Ne vez gwelet ganeoc'h nemetken",
"Contacts" : "Darempredoù",
"Visible to local users and to trusted servers" : "Gwelet a vez gant an implijourien diabarzh hag an implijourien fiziet",
+ "Public" : "Publik",
"Will be synced to a global and public address book" : "Kemprenet a vo d'ur lerv chom-lec'h publik ha hollek",
"by" : "gant",
"SSL Root Certificates" : "SSL Sertifikad Gwrizienn",
@@ -423,6 +421,8 @@
"Set default expiration date for link shares" : "Lakaat un deizat termen dre ziouer evit al liamm rannañ",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Aotreañ ar skrivañ otamatek eus an anv implijourien er gemenadennoù rannet. M'a n'eo ket otreet e vo ret skrivañ tout an anv implijer pe ar chom-lec'h postel.",
"Restrict username autocompletion to users within the same groups" : "Aotreañ ar skrivañ otomatek eus anv an implijourien a zo er strollad nemetken.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Diskouez ur gemennadenn diwall war ar bajenn pellkas liammoù. (Na vez diskouezet nemet m'az eo kouachet ar roll restroù.)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Diskouez ur gemennadenn diwall war ar bajenn pellkas liammoù. (Na vez diskouezet nemet m'az eo kouachet ar roll restroù.)",
+ "Don't synchronize to servers" : "Na kempredit ket d'ar servijourioù",
+ "Trusted" : "Fiziet"
},"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/bs.js b/apps/settings/l10n/bs.js
index 3d5249423e8..5b16bf20e31 100644
--- a/apps/settings/l10n/bs.js
+++ b/apps/settings/l10n/bs.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Saved" : "Spremljeno",
"Email sent" : "E-pošta je poslana",
- "Public" : "Javno",
+ "Local" : "Lokalno",
"Unable to change password" : "Promjena lozinke nije moguća",
"Very weak password" : "Veoma slaba lozinka",
"Weak password" : "Slaba lozinka",
@@ -91,8 +91,8 @@ OC.L10N.register(
"New password" : "Nova lozinka",
"Change password" : "Promijeni lozinku",
"Valid until {date}" : "Validno do {date}",
- "Local" : "Lokalno",
"Contacts" : "Kontakti",
+ "Public" : "Javno",
"by" : "od strane",
"Common Name" : "Opće Ime",
"Valid until" : "Validno do",
diff --git a/apps/settings/l10n/bs.json b/apps/settings/l10n/bs.json
index 4f0abd6322b..c1720b881d6 100644
--- a/apps/settings/l10n/bs.json
+++ b/apps/settings/l10n/bs.json
@@ -1,7 +1,7 @@
{ "translations": {
"Saved" : "Spremljeno",
"Email sent" : "E-pošta je poslana",
- "Public" : "Javno",
+ "Local" : "Lokalno",
"Unable to change password" : "Promjena lozinke nije moguća",
"Very weak password" : "Veoma slaba lozinka",
"Weak password" : "Slaba lozinka",
@@ -89,8 +89,8 @@
"New password" : "Nova lozinka",
"Change password" : "Promijeni lozinku",
"Valid until {date}" : "Validno do {date}",
- "Local" : "Lokalno",
"Contacts" : "Kontakti",
+ "Public" : "Javno",
"by" : "od strane",
"Common Name" : "Opće Ime",
"Valid until" : "Validno do",
diff --git a/apps/settings/l10n/ca.js b/apps/settings/l10n/ca.js
index c01ee88db7c..a6f93d2da98 100644
--- a/apps/settings/l10n/ca.js
+++ b/apps/settings/l10n/ca.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "S'està enviant…",
"Email sent" : "S'ha enviat el correu electrònic",
"Private" : "Privat",
- "Don't synchronize to servers" : "No sincronitzeu amb els servidors",
- "Trusted" : "De confiança",
+ "Local" : "Local",
"Only synchronize to trusted servers" : "Sincronitza només amb servidors de confiança",
- "Public" : "Públic",
"Synchronize to trusted servers and the global and public address book" : "Sincronitza amb servidors de confiança i amb la llibreta d'adreces global i pública",
"Verify" : "Verifica",
"Verifying …" : "S'està verificant …",
@@ -414,11 +412,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Si utilitzeu aplicacions de tercers per a connectar-vos a Nextcloud, assegureu-vos de crear i configurar una contrasenya d'aplicació per a cadascuna abans d'habilitar l'autenticació de segon factor.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "S'ha produït un error. Si us plau, carregueu un certificat PEM codificat en ASCII.",
"Valid until {date}" : "Vàlid fins {date}",
- "Local" : "Local",
"Only visible to local users" : "Només visible per a usuaris locals",
"Only visible to you" : "Només visible per mi",
"Contacts" : "Contactes",
"Visible to local users and to trusted servers" : "Visible per als usuaris locals i servidors de confiança",
+ "Public" : "Públic",
"Will be synced to a global and public address book" : "Se sincronitzarà amb una llibreta d'adreces global i pública",
"by" : "per",
"SSL Root Certificates" : "Certificats Arrel SSL",
@@ -433,6 +431,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permet la compleció automàtica del nom d’usuari en el diàleg de compartició. Si es desactiva, cal que s'introdueixi el nom d’usuari complet o l’adreça de correu electrònic.",
"Restrict username autocompletion to users within the same groups" : "Restringeix autocompletar nom d'usuari per usuaris en els mateixos grups",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostra el text de renúncia a la pàgina de càrrega d’enllaços públics. (Només es mostra quan la llista de fitxers està oculta).",
+ "Don't synchronize to servers" : "No sincronitzeu amb els servidors",
+ "Trusted" : "De confiança",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Permet la compleció automàtica en el diàleg de compartició (si es desactiva caldrà introduir el nom d'usuari complet i l'adreça de correu electrònic)"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/ca.json b/apps/settings/l10n/ca.json
index 6dfdf056806..3546f2d97be 100644
--- a/apps/settings/l10n/ca.json
+++ b/apps/settings/l10n/ca.json
@@ -6,10 +6,8 @@
"Sending…" : "S'està enviant…",
"Email sent" : "S'ha enviat el correu electrònic",
"Private" : "Privat",
- "Don't synchronize to servers" : "No sincronitzeu amb els servidors",
- "Trusted" : "De confiança",
+ "Local" : "Local",
"Only synchronize to trusted servers" : "Sincronitza només amb servidors de confiança",
- "Public" : "Públic",
"Synchronize to trusted servers and the global and public address book" : "Sincronitza amb servidors de confiança i amb la llibreta d'adreces global i pública",
"Verify" : "Verifica",
"Verifying …" : "S'està verificant …",
@@ -412,11 +410,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Si utilitzeu aplicacions de tercers per a connectar-vos a Nextcloud, assegureu-vos de crear i configurar una contrasenya d'aplicació per a cadascuna abans d'habilitar l'autenticació de segon factor.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "S'ha produït un error. Si us plau, carregueu un certificat PEM codificat en ASCII.",
"Valid until {date}" : "Vàlid fins {date}",
- "Local" : "Local",
"Only visible to local users" : "Només visible per a usuaris locals",
"Only visible to you" : "Només visible per mi",
"Contacts" : "Contactes",
"Visible to local users and to trusted servers" : "Visible per als usuaris locals i servidors de confiança",
+ "Public" : "Públic",
"Will be synced to a global and public address book" : "Se sincronitzarà amb una llibreta d'adreces global i pública",
"by" : "per",
"SSL Root Certificates" : "Certificats Arrel SSL",
@@ -431,6 +429,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permet la compleció automàtica del nom d’usuari en el diàleg de compartició. Si es desactiva, cal que s'introdueixi el nom d’usuari complet o l’adreça de correu electrònic.",
"Restrict username autocompletion to users within the same groups" : "Restringeix autocompletar nom d'usuari per usuaris en els mateixos grups",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostra el text de renúncia a la pàgina de càrrega d’enllaços públics. (Només es mostra quan la llista de fitxers està oculta).",
+ "Don't synchronize to servers" : "No sincronitzeu amb els servidors",
+ "Trusted" : "De confiança",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Permet la compleció automàtica en el diàleg de compartició (si es desactiva caldrà introduir el nom d'usuari complet i l'adreça de correu electrònic)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/cs.js b/apps/settings/l10n/cs.js
index b1f994db1fe..f95d7d4a447 100644
--- a/apps/settings/l10n/cs.js
+++ b/apps/settings/l10n/cs.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "Odesílání…",
"Email sent" : "E-mail odeslán",
"Private" : "Soukromé",
- "Don't synchronize to servers" : "Nesynchronizovat na servery",
- "Trusted" : "Důvěryhodné",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Viditelné pouze lidem, se kterými nalezena shoda začleněním přes telefonní číslo prostřednictvím Talk na mobilním telefonu",
+ "Local" : "Místní",
+ "Only visible to people on this instance and guests" : "Viditelné pouze lidem na této instanci a hostům",
+ "Federated" : "Federované",
"Only synchronize to trusted servers" : "Synchronizovat pouze s důvěryhodnými servery",
- "Public" : "Veřejné",
+ "Published" : "Zveřejněno",
"Synchronize to trusted servers and the global and public address book" : "Synchronizovat s důvěryhodnými servery a globálním a veřejným adresářem kontaktů",
"Verify" : "Ověřit",
"Verifying …" : "Ověřování…",
@@ -155,7 +157,7 @@ OC.L10N.register(
"User documentation" : "Dokumentace pro uživatele",
"Admin documentation" : "Dokumentace pro správce",
"Developer documentation" : "Dokumentace pro vývojáře",
- "This app is supported via your current Nextcloud subscription." : "Tato aplikace je podporována prostřednictvím vašeho stávajícího předplatného Nextcloud.",
+ "This app is supported via your current Nextcloud subscription." : "Tato aplikace je podporována prostřednictvím vašeho stávajícího předplatného podpory Nextcloud.",
"Supported" : "Podporováno",
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Doporučované aplikace jsou vyvíjeny komunitou. Jsou propojeny se zbytkem Nextcloud a připraveny na produkční nasazení.",
"Featured" : "Doporučené",
@@ -225,7 +227,7 @@ OC.L10N.register(
"Remote wipe of devices" : "Vymazat obsah zařízení na dálku",
"Wipe {userid}'s devices" : "Vymazat obsah ze zařízení uživatele {userid}",
"Cancel" : "Storno",
- "Fully delete {userid}'s account including all their personal files, app data, etc." : "Zcela vymazat účet {userid}, všechny osobní soubory, data atd.",
+ "Fully delete {userid}'s account including all their personal files, app data, etc." : "Úplně vymazat účet {userid}, včetně veškerých osobní souborů, dat aplikací, atd.",
"Account deletion" : "Smazání účtu",
"Delete {userid}'s account" : "Smazat účet {userid}",
"Welcome mail sent!" : "Uvítací e-mail odeslán!",
@@ -317,14 +319,14 @@ OC.L10N.register(
"From address" : "Adresa odesílatele",
"mail" : "e-mail",
"Authentication method" : "Metoda ověření",
- "Authentication required" : "Vyžadováno ověření",
+ "Authentication required" : "Vyžadováno ověření se",
"Server address" : "Adresa serveru",
"Port" : "Port",
"Credentials" : "Přihlašovací údaje",
"SMTP Username" : "SMTP uživatelské jméno ",
"SMTP Password" : "Heslo pro SMTP",
"Save" : "Uložit",
- "Test email settings" : "Test nastavení e-mailu",
+ "Test email settings" : "Vyzkoušet nastavení e-mailu",
"Send email" : "Odeslat e-mail",
"Security & setup warnings" : "Varování ohledně zabezpečení a nastavení",
"It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Pro zabezpečení a optimální výkon instance Nextcloud je důležité, aby vše bylo správně nastaveno. Jako pomoc, instance samotná automaticky ověřuje některá nastavení. Další informace naleznete v odkazované dokumentaci.",
@@ -339,7 +341,7 @@ OC.L10N.register(
"Server-side encryption" : "Šifrování na straně serveru",
"Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Šifrování na straně serveru umožňuje zašifrovat soubory, které jsou na tento server nahrávány. To přináší omezení jako třeba snížení výkonu, takže toto zapněte jen pokud je opravdu potřeba.",
"Enable server-side encryption" : "Šifrovat na straně serveru",
- "Please read carefully before activating server-side encryption: " : "Pročtěte důkladně před zapnutím šifrování dat na serveru:",
+ "Please read carefully before activating server-side encryption: " : "Důkladně si pročtěte a až teprve poté případně zapínejte šifrování dat na straně serveru: ",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Poté co je zapnuto šifrování, jsou od toho bodu všechny nahrávané soubory šifrovány serverem. Vypnout šifrování bude možné pouze později, až bude šifrovací modul tuto možnost podporovat a po splnění všech nutných podmínek (tzn. nastavení klíčů pro obnovení).",
"Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě nezaručuje bezpečnost systému. Pokud se chcete dozvědět víc o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití, naleznete to v dokumentaci.",
"Be aware that encryption always increases the file size." : "Mějte na paměti, že šifrování vždy navýší velikost souboru.",
@@ -382,8 +384,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možné sdílet, nemohou ale samy sdílet ostatním.",
"Allow username autocompletion in share dialog" : "Povolit automatické dokončování uživatelského jména v dialogu pro sdílení",
"Allow username autocompletion to users within the same groups" : "Umožnit automatické dokončování uživatelského jména uživatelům v rámci stejných skupin",
- "Allow username autocompletion to users based on phonebook matches" : "Umožnit dokončování uživatelského jména uživatelům na základě shod s telefonním seznamem",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "V případě, že jsou zapnuté automatická dokončování „stejná skupina“ a „shody s telefonním seznamem“, postačí pro zobrazení uživatele shoda s jedním z toho.",
+ "Allow username autocompletion to users based on phone number integration" : "Umožnit doplňování uživatelského jména uživatelům na základě začlenění telefonním číslem",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "V případě, že jsou zapnuté automatická dokončování „stejná skupina“ a „začlenění telefonním číslem“, postačí pro zobrazení uživatele shoda s jedním z toho.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Povolit automatické dokončování uživatelského jména při zadávání celého jména nebo e-mailové adresy (při ignorování chybějící shody s telefonním seznamem a toho, že je ve stejné skupině)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zobrazit text zřeknutí se odpovědnosti na stránce pro nahrání veřejného odkazu. (zobrazit pouze pokud je seznam souborů skrytý)",
"This text will be shown on the public link upload page when the file list is hidden." : "Tento text bude zobrazen on stránce pro nahrání veřejného odkazu, pokud bude seznam souborů skrytý.",
@@ -428,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Pokud pro připojování se k Nextcloud používáte aplikace třetích stran, nezapomeňte před zapnutím ověřování druhým faktorem vytvořit pro jednotlivé aplikace jejich hesla.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Došlo k chybě. Nahrajte PEM certifikát v ASCII kódování.",
"Valid until {date}" : "Platný do {date}",
- "Local" : "Místní",
"Only visible to local users" : "Viditelné pouze pro místní uživatele",
"Only visible to you" : "Viditelné pouze pro vás",
"Contacts" : "Kontakty",
"Visible to local users and to trusted servers" : "Viditelné pro místní uživatele a důvěryhodné servery",
+ "Public" : "Veřejné",
"Will be synced to a global and public address book" : "Bude synchronizováno do globálního a veřejného adresáře kontaktů",
"by" : "od",
"SSL Root Certificates" : "Kořenové certifikáty SSL",
@@ -447,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Povolit automatické dokončení uživatelského jména v dialogovém okně sdílení. Pokud je tato volba zakázána, je třeba zadat úplné uživatelské jméno nebo e-mailovou adresu.",
"Restrict username autocompletion to users within the same groups" : "Omezit automatické doplňování uživatelského jména k uživateli ve stejných skupinách",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zobrazit text zřeknutí se odpovědnosti na stránce pro nahrání veřejného odkazu. (Zobrazit pouze pokud je seznam souborů skrytý.)",
+ "Don't synchronize to servers" : "Nesynchronizovat na servery",
+ "Trusted" : "Důvěryhodné",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Povolit automatické dokončení uživatelského jména v dialogovém okně sdílení (pokud je tato volba zakázána, je třeba zadat úplné uživatelské jméno nebo e-mailovou adresu)."
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
diff --git a/apps/settings/l10n/cs.json b/apps/settings/l10n/cs.json
index 0a562904f4a..30eac1f87d2 100644
--- a/apps/settings/l10n/cs.json
+++ b/apps/settings/l10n/cs.json
@@ -6,10 +6,12 @@
"Sending…" : "Odesílání…",
"Email sent" : "E-mail odeslán",
"Private" : "Soukromé",
- "Don't synchronize to servers" : "Nesynchronizovat na servery",
- "Trusted" : "Důvěryhodné",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Viditelné pouze lidem, se kterými nalezena shoda začleněním přes telefonní číslo prostřednictvím Talk na mobilním telefonu",
+ "Local" : "Místní",
+ "Only visible to people on this instance and guests" : "Viditelné pouze lidem na této instanci a hostům",
+ "Federated" : "Federované",
"Only synchronize to trusted servers" : "Synchronizovat pouze s důvěryhodnými servery",
- "Public" : "Veřejné",
+ "Published" : "Zveřejněno",
"Synchronize to trusted servers and the global and public address book" : "Synchronizovat s důvěryhodnými servery a globálním a veřejným adresářem kontaktů",
"Verify" : "Ověřit",
"Verifying …" : "Ověřování…",
@@ -153,7 +155,7 @@
"User documentation" : "Dokumentace pro uživatele",
"Admin documentation" : "Dokumentace pro správce",
"Developer documentation" : "Dokumentace pro vývojáře",
- "This app is supported via your current Nextcloud subscription." : "Tato aplikace je podporována prostřednictvím vašeho stávajícího předplatného Nextcloud.",
+ "This app is supported via your current Nextcloud subscription." : "Tato aplikace je podporována prostřednictvím vašeho stávajícího předplatného podpory Nextcloud.",
"Supported" : "Podporováno",
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Doporučované aplikace jsou vyvíjeny komunitou. Jsou propojeny se zbytkem Nextcloud a připraveny na produkční nasazení.",
"Featured" : "Doporučené",
@@ -223,7 +225,7 @@
"Remote wipe of devices" : "Vymazat obsah zařízení na dálku",
"Wipe {userid}'s devices" : "Vymazat obsah ze zařízení uživatele {userid}",
"Cancel" : "Storno",
- "Fully delete {userid}'s account including all their personal files, app data, etc." : "Zcela vymazat účet {userid}, všechny osobní soubory, data atd.",
+ "Fully delete {userid}'s account including all their personal files, app data, etc." : "Úplně vymazat účet {userid}, včetně veškerých osobní souborů, dat aplikací, atd.",
"Account deletion" : "Smazání účtu",
"Delete {userid}'s account" : "Smazat účet {userid}",
"Welcome mail sent!" : "Uvítací e-mail odeslán!",
@@ -315,14 +317,14 @@
"From address" : "Adresa odesílatele",
"mail" : "e-mail",
"Authentication method" : "Metoda ověření",
- "Authentication required" : "Vyžadováno ověření",
+ "Authentication required" : "Vyžadováno ověření se",
"Server address" : "Adresa serveru",
"Port" : "Port",
"Credentials" : "Přihlašovací údaje",
"SMTP Username" : "SMTP uživatelské jméno ",
"SMTP Password" : "Heslo pro SMTP",
"Save" : "Uložit",
- "Test email settings" : "Test nastavení e-mailu",
+ "Test email settings" : "Vyzkoušet nastavení e-mailu",
"Send email" : "Odeslat e-mail",
"Security & setup warnings" : "Varování ohledně zabezpečení a nastavení",
"It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Pro zabezpečení a optimální výkon instance Nextcloud je důležité, aby vše bylo správně nastaveno. Jako pomoc, instance samotná automaticky ověřuje některá nastavení. Další informace naleznete v odkazované dokumentaci.",
@@ -337,7 +339,7 @@
"Server-side encryption" : "Šifrování na straně serveru",
"Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Šifrování na straně serveru umožňuje zašifrovat soubory, které jsou na tento server nahrávány. To přináší omezení jako třeba snížení výkonu, takže toto zapněte jen pokud je opravdu potřeba.",
"Enable server-side encryption" : "Šifrovat na straně serveru",
- "Please read carefully before activating server-side encryption: " : "Pročtěte důkladně před zapnutím šifrování dat na serveru:",
+ "Please read carefully before activating server-side encryption: " : "Důkladně si pročtěte a až teprve poté případně zapínejte šifrování dat na straně serveru: ",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Poté co je zapnuto šifrování, jsou od toho bodu všechny nahrávané soubory šifrovány serverem. Vypnout šifrování bude možné pouze později, až bude šifrovací modul tuto možnost podporovat a po splnění všech nutných podmínek (tzn. nastavení klíčů pro obnovení).",
"Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě nezaručuje bezpečnost systému. Pokud se chcete dozvědět víc o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití, naleznete to v dokumentaci.",
"Be aware that encryption always increases the file size." : "Mějte na paměti, že šifrování vždy navýší velikost souboru.",
@@ -380,8 +382,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možné sdílet, nemohou ale samy sdílet ostatním.",
"Allow username autocompletion in share dialog" : "Povolit automatické dokončování uživatelského jména v dialogu pro sdílení",
"Allow username autocompletion to users within the same groups" : "Umožnit automatické dokončování uživatelského jména uživatelům v rámci stejných skupin",
- "Allow username autocompletion to users based on phonebook matches" : "Umožnit dokončování uživatelského jména uživatelům na základě shod s telefonním seznamem",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "V případě, že jsou zapnuté automatická dokončování „stejná skupina“ a „shody s telefonním seznamem“, postačí pro zobrazení uživatele shoda s jedním z toho.",
+ "Allow username autocompletion to users based on phone number integration" : "Umožnit doplňování uživatelského jména uživatelům na základě začlenění telefonním číslem",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "V případě, že jsou zapnuté automatická dokončování „stejná skupina“ a „začlenění telefonním číslem“, postačí pro zobrazení uživatele shoda s jedním z toho.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Povolit automatické dokončování uživatelského jména při zadávání celého jména nebo e-mailové adresy (při ignorování chybějící shody s telefonním seznamem a toho, že je ve stejné skupině)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zobrazit text zřeknutí se odpovědnosti na stránce pro nahrání veřejného odkazu. (zobrazit pouze pokud je seznam souborů skrytý)",
"This text will be shown on the public link upload page when the file list is hidden." : "Tento text bude zobrazen on stránce pro nahrání veřejného odkazu, pokud bude seznam souborů skrytý.",
@@ -426,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Pokud pro připojování se k Nextcloud používáte aplikace třetích stran, nezapomeňte před zapnutím ověřování druhým faktorem vytvořit pro jednotlivé aplikace jejich hesla.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Došlo k chybě. Nahrajte PEM certifikát v ASCII kódování.",
"Valid until {date}" : "Platný do {date}",
- "Local" : "Místní",
"Only visible to local users" : "Viditelné pouze pro místní uživatele",
"Only visible to you" : "Viditelné pouze pro vás",
"Contacts" : "Kontakty",
"Visible to local users and to trusted servers" : "Viditelné pro místní uživatele a důvěryhodné servery",
+ "Public" : "Veřejné",
"Will be synced to a global and public address book" : "Bude synchronizováno do globálního a veřejného adresáře kontaktů",
"by" : "od",
"SSL Root Certificates" : "Kořenové certifikáty SSL",
@@ -445,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Povolit automatické dokončení uživatelského jména v dialogovém okně sdílení. Pokud je tato volba zakázána, je třeba zadat úplné uživatelské jméno nebo e-mailovou adresu.",
"Restrict username autocompletion to users within the same groups" : "Omezit automatické doplňování uživatelského jména k uživateli ve stejných skupinách",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zobrazit text zřeknutí se odpovědnosti na stránce pro nahrání veřejného odkazu. (Zobrazit pouze pokud je seznam souborů skrytý.)",
+ "Don't synchronize to servers" : "Nesynchronizovat na servery",
+ "Trusted" : "Důvěryhodné",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Povolit automatické dokončení uživatelského jména v dialogovém okně sdílení (pokud je tato volba zakázána, je třeba zadat úplné uživatelské jméno nebo e-mailovou adresu)."
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
} \ No newline at end of file
diff --git a/apps/settings/l10n/da.js b/apps/settings/l10n/da.js
index e995b4c8097..2cb99efe7ff 100644
--- a/apps/settings/l10n/da.js
+++ b/apps/settings/l10n/da.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Sender...",
"Email sent" : "E-mail afsendt",
"Private" : "Privat",
- "Public" : "Offentlig",
+ "Local" : "Lokal",
"Verify" : "Bekræft",
"Verifying …" : "Bekræfter.....",
"Unable to change password" : "Kunne ikke ændre kodeord",
@@ -301,11 +301,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Brug to-faktor godkendelse for at øge sikkerheden for din konto.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Der opstod en fejl. Upload venligst et ASCII-indkodet PEM-certifikat.",
"Valid until {date}" : "Gyldig indtil {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Kun synlig for lokale brugere",
"Only visible to you" : "Kun synlig for dig",
"Contacts" : "Kontakter",
"Visible to local users and to trusted servers" : "Tilgængelig for lokale brugere og godkendte servere",
+ "Public" : "Offentlig",
"by" : "af",
"SSL Root Certificates" : "SSL rodcertifikater",
"Common Name" : "Almindeligt navn",
diff --git a/apps/settings/l10n/da.json b/apps/settings/l10n/da.json
index 75b67e3a13e..f1ecd2a1a55 100644
--- a/apps/settings/l10n/da.json
+++ b/apps/settings/l10n/da.json
@@ -6,7 +6,7 @@
"Sending…" : "Sender...",
"Email sent" : "E-mail afsendt",
"Private" : "Privat",
- "Public" : "Offentlig",
+ "Local" : "Lokal",
"Verify" : "Bekræft",
"Verifying …" : "Bekræfter.....",
"Unable to change password" : "Kunne ikke ændre kodeord",
@@ -299,11 +299,11 @@
"Use a second factor besides your password to increase security for your account." : "Brug to-faktor godkendelse for at øge sikkerheden for din konto.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Der opstod en fejl. Upload venligst et ASCII-indkodet PEM-certifikat.",
"Valid until {date}" : "Gyldig indtil {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Kun synlig for lokale brugere",
"Only visible to you" : "Kun synlig for dig",
"Contacts" : "Kontakter",
"Visible to local users and to trusted servers" : "Tilgængelig for lokale brugere og godkendte servere",
+ "Public" : "Offentlig",
"by" : "af",
"SSL Root Certificates" : "SSL rodcertifikater",
"Common Name" : "Almindeligt navn",
diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js
index 6a5dbcf3680..fe786ca40b3 100644
--- a/apps/settings/l10n/de.js
+++ b/apps/settings/l10n/de.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Senden…",
"Email sent" : "E-Mail gesendet",
"Private" : "Privat",
- "Don't synchronize to servers" : "Nicht mit Servern synchronisieren",
- "Trusted" : "Vertrauenswürdig",
+ "Local" : "Lokal",
"Only synchronize to trusted servers" : "Nur mit vertrauenswürdigen Servern synchronisieren",
- "Public" : "Öffentlich",
"Synchronize to trusted servers and the global and public address book" : "Mit vertrauenswürdigen Servern und dem globalen und öffentlichen Adressbuch synchronisieren",
"Verify" : "Überprüfen",
"Verifying …" : "Überprüfe…",
@@ -370,9 +368,11 @@ OC.L10N.register(
"Expire after " : "Ablauf nach ",
"days" : "Tagen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
+ "Allow users to share via link and emails" : "Benutzern erlauben, Inhalte üver Links und E-Mails zu teilen",
"Allow public uploads" : "Öffentliches Hochladen erlauben",
"Always ask for a password" : "Immer nach einem Passwort fragen",
"Enforce password protection" : "Passwortschutz erzwingen",
+ "Set default expiration date" : "Standardmäßiges Ablaufdatum setzen",
"Allow resharing" : "Weiterverteilen erlauben",
"Allow sharing with groups" : "Teilen mit Gruppen erlauben",
"Restrict users to only share with users in their groups" : "Benutzer auf das Teilen innerhalb ihrer Gruppen beschränken",
@@ -380,8 +380,6 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog" : "Automatische Vervollständigung der Benutzernamen im Teilen-Dialog erlauben",
"Allow username autocompletion to users within the same groups" : "Automatische Vervollständigung der Benutzernamen auf Benutzer innerhalb der gleichen Gruppen erlauben",
- "Allow username autocompletion to users based on phonebook matches" : "Automatische Vervollständigung der Benutzernamen anhand passender Telefonbucheinträge erlauben",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Wenn die automatische Vervollständigung \"gleiche Gruppe\" und \"Telefonbuchübereinstimmungen\" aktiviert sind, reicht eine Übereinstimmung in beiden Gruppen aus, um den Benutzer anzuzeigen. ",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung des Benutzernamens, wenn der vollständigen Namen oder die E-Mail-Adresse eingeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und bei gleicher Gruppenzugehörigkeit). ",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
"This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
@@ -426,11 +424,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Wenn Du Anwendungen von Drittanbietern verwendest, um sich mit Nextcloud zu verbinden, stelle bitte sicher, dass Du für jede Anwendung ein Anwendungspasswort erstellest und einrichtest, bevor Du die Zwei-Faktor-Authentifizierung aktivierst.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte lade ein ASCII-kodiertes PEM-Zertifikat hoch.",
"Valid until {date}" : "Gültig bis {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Nur für lokale Benutzer sichtbar",
"Only visible to you" : "Nur für Dich sichtbar",
"Contacts" : "Kontakte",
"Visible to local users and to trusted servers" : "Sichtbar für lokale Benutzer und vertrauenswürdige Server",
+ "Public" : "Öffentlich",
"Will be synced to a global and public address book" : "Wird mit einem globalen und einem öffentlichen Adressbuch synchronisiert",
"by" : "von",
"SSL Root Certificates" : "SSL-Root-Zertifikate",
@@ -445,6 +443,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername oder E-Mail-Adresse eingegeben werden.",
"Restrict username autocompletion to users within the same groups" : "Automatische Vervollständigung der Benutzernamen auf Benutzer innerhalb der gleichen Gruppen beschränken",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "Don't synchronize to servers" : "Nicht mit Servern synchronisieren",
+ "Trusted" : "Vertrauenswürdig",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog zulassen (Wenn dies deaktiviert ist, müssen der vollständige Benutzername oder die E-Mail-Adresse eingegeben werden)"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json
index bffb27c9ae9..49f86d9dbd9 100644
--- a/apps/settings/l10n/de.json
+++ b/apps/settings/l10n/de.json
@@ -6,10 +6,8 @@
"Sending…" : "Senden…",
"Email sent" : "E-Mail gesendet",
"Private" : "Privat",
- "Don't synchronize to servers" : "Nicht mit Servern synchronisieren",
- "Trusted" : "Vertrauenswürdig",
+ "Local" : "Lokal",
"Only synchronize to trusted servers" : "Nur mit vertrauenswürdigen Servern synchronisieren",
- "Public" : "Öffentlich",
"Synchronize to trusted servers and the global and public address book" : "Mit vertrauenswürdigen Servern und dem globalen und öffentlichen Adressbuch synchronisieren",
"Verify" : "Überprüfen",
"Verifying …" : "Überprüfe…",
@@ -368,9 +366,11 @@
"Expire after " : "Ablauf nach ",
"days" : "Tagen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
+ "Allow users to share via link and emails" : "Benutzern erlauben, Inhalte üver Links und E-Mails zu teilen",
"Allow public uploads" : "Öffentliches Hochladen erlauben",
"Always ask for a password" : "Immer nach einem Passwort fragen",
"Enforce password protection" : "Passwortschutz erzwingen",
+ "Set default expiration date" : "Standardmäßiges Ablaufdatum setzen",
"Allow resharing" : "Weiterverteilen erlauben",
"Allow sharing with groups" : "Teilen mit Gruppen erlauben",
"Restrict users to only share with users in their groups" : "Benutzer auf das Teilen innerhalb ihrer Gruppen beschränken",
@@ -378,8 +378,6 @@
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog" : "Automatische Vervollständigung der Benutzernamen im Teilen-Dialog erlauben",
"Allow username autocompletion to users within the same groups" : "Automatische Vervollständigung der Benutzernamen auf Benutzer innerhalb der gleichen Gruppen erlauben",
- "Allow username autocompletion to users based on phonebook matches" : "Automatische Vervollständigung der Benutzernamen anhand passender Telefonbucheinträge erlauben",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Wenn die automatische Vervollständigung \"gleiche Gruppe\" und \"Telefonbuchübereinstimmungen\" aktiviert sind, reicht eine Übereinstimmung in beiden Gruppen aus, um den Benutzer anzuzeigen. ",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung des Benutzernamens, wenn der vollständigen Namen oder die E-Mail-Adresse eingeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und bei gleicher Gruppenzugehörigkeit). ",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
"This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
@@ -424,11 +422,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Wenn Du Anwendungen von Drittanbietern verwendest, um sich mit Nextcloud zu verbinden, stelle bitte sicher, dass Du für jede Anwendung ein Anwendungspasswort erstellest und einrichtest, bevor Du die Zwei-Faktor-Authentifizierung aktivierst.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte lade ein ASCII-kodiertes PEM-Zertifikat hoch.",
"Valid until {date}" : "Gültig bis {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Nur für lokale Benutzer sichtbar",
"Only visible to you" : "Nur für Dich sichtbar",
"Contacts" : "Kontakte",
"Visible to local users and to trusted servers" : "Sichtbar für lokale Benutzer und vertrauenswürdige Server",
+ "Public" : "Öffentlich",
"Will be synced to a global and public address book" : "Wird mit einem globalen und einem öffentlichen Adressbuch synchronisiert",
"by" : "von",
"SSL Root Certificates" : "SSL-Root-Zertifikate",
@@ -443,6 +441,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername oder E-Mail-Adresse eingegeben werden.",
"Restrict username autocompletion to users within the same groups" : "Automatische Vervollständigung der Benutzernamen auf Benutzer innerhalb der gleichen Gruppen beschränken",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "Don't synchronize to servers" : "Nicht mit Servern synchronisieren",
+ "Trusted" : "Vertrauenswürdig",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog zulassen (Wenn dies deaktiviert ist, müssen der vollständige Benutzername oder die E-Mail-Adresse eingegeben werden)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/de_DE.js b/apps/settings/l10n/de_DE.js
index 6a2dbd98417..95754284b36 100644
--- a/apps/settings/l10n/de_DE.js
+++ b/apps/settings/l10n/de_DE.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "Senden…",
"Email sent" : "E-Mail gesendet",
"Private" : "Privat",
- "Don't synchronize to servers" : "Nicht mit Servern synchronisieren",
- "Trusted" : "Vertrauenswürdig",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Nur sichtbar für Personen, die über Rufnummernintegration von Talk on mobile abgeglichen wurden.",
+ "Local" : "Lokal",
+ "Only visible to people on this instance and guests" : "Nur für Personen dieser Instanz und Gästen sichtbar",
+ "Federated" : "Federated",
"Only synchronize to trusted servers" : "Nur mit vertrauenswürdigen Servern synchronisieren",
- "Public" : "Öffentlich",
+ "Published" : "Veröffentlicht",
"Synchronize to trusted servers and the global and public address book" : "Mit vertrauenswürdigen Servern und dem globalen und öffentlichen Adressbuch synchronisieren",
"Verify" : "Überprüfen",
"Verifying …" : "Überprüfe…",
@@ -382,8 +384,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog" : "Automatische Vervollständigung der Benutzernamen im Teilen-Dialog erlauben",
"Allow username autocompletion to users within the same groups" : "Automatische Vervollständigung der Benutzernamen auf Benutzer innerhalb der gleichen Gruppen erlauben",
- "Allow username autocompletion to users based on phonebook matches" : "Automatische Vervollständigung der Benutzernamen anhand passender Telefonbucheinträge erlauben",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Wenn die automatische Vervollständigung \"gleiche Gruppe\" und \"Telefonbuchübereinstimmungen\" aktiviert sind, reicht eine Übereinstimmung in beiden Gruppen aus, um den Benutzer anzuzeigen. ",
+ "Allow username autocompletion to users based on phone number integration" : "Automatische Vervollständigung des Benutzernamens für Benutzer basierend auf der Rufnummernintegration zulassen",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung des Benutzernamens, wenn der vollständigen Namen oder die E-Mail-Adresse eingeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeiten).",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
"This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
@@ -428,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Wenn Sie Anwendungen von Drittanbietern verwenden, um sich mit Nextcloud zu verbinden, stellen Sie bitte sicher, dass Sie für jede Anwendung ein Anwendungspasswort erstellen und konfigurieren, bevor Sie die Zwei-Faktor-Authentifizierung aktivieren.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte laden Sie ein ASCII-kodiertes PEM-Zertifikat hoch.",
"Valid until {date}" : "Gültig bis {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Nur für lokale Benutzer sichtbar",
"Only visible to you" : "Nur für Sie sichtbar",
"Contacts" : "Kontakte",
"Visible to local users and to trusted servers" : "Sichtbar für lokale Benutzer und vertrauenswürdige Server",
+ "Public" : "Öffentlich",
"Will be synced to a global and public address book" : "Wird mit einem globalen und einem öffentlichen Adressbuch synchronisiert",
"by" : "von",
"SSL Root Certificates" : "SSL-Root-Zertifikate",
@@ -447,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, müssen Benutzername oder E-Mail-Adresse vollständig eingegeben werden.",
"Restrict username autocompletion to users within the same groups" : "Automatische Vervollständigung der Benutzernamen auf Benutzer innerhalb der gleichen Gruppen beschränken",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "Don't synchronize to servers" : "Nicht mit Servern synchronisieren",
+ "Trusted" : "Vertrauenswürdig",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog zulassen (Wenn dies deaktiviert ist, müssen der vollständige Benutzername oder die E-Mail-Adresse eingegeben werden)"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/de_DE.json b/apps/settings/l10n/de_DE.json
index b1bfe081677..cfcf84c5eba 100644
--- a/apps/settings/l10n/de_DE.json
+++ b/apps/settings/l10n/de_DE.json
@@ -6,10 +6,12 @@
"Sending…" : "Senden…",
"Email sent" : "E-Mail gesendet",
"Private" : "Privat",
- "Don't synchronize to servers" : "Nicht mit Servern synchronisieren",
- "Trusted" : "Vertrauenswürdig",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Nur sichtbar für Personen, die über Rufnummernintegration von Talk on mobile abgeglichen wurden.",
+ "Local" : "Lokal",
+ "Only visible to people on this instance and guests" : "Nur für Personen dieser Instanz und Gästen sichtbar",
+ "Federated" : "Federated",
"Only synchronize to trusted servers" : "Nur mit vertrauenswürdigen Servern synchronisieren",
- "Public" : "Öffentlich",
+ "Published" : "Veröffentlicht",
"Synchronize to trusted servers and the global and public address book" : "Mit vertrauenswürdigen Servern und dem globalen und öffentlichen Adressbuch synchronisieren",
"Verify" : "Überprüfen",
"Verifying …" : "Überprüfe…",
@@ -380,8 +382,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog" : "Automatische Vervollständigung der Benutzernamen im Teilen-Dialog erlauben",
"Allow username autocompletion to users within the same groups" : "Automatische Vervollständigung der Benutzernamen auf Benutzer innerhalb der gleichen Gruppen erlauben",
- "Allow username autocompletion to users based on phonebook matches" : "Automatische Vervollständigung der Benutzernamen anhand passender Telefonbucheinträge erlauben",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Wenn die automatische Vervollständigung \"gleiche Gruppe\" und \"Telefonbuchübereinstimmungen\" aktiviert sind, reicht eine Übereinstimmung in beiden Gruppen aus, um den Benutzer anzuzeigen. ",
+ "Allow username autocompletion to users based on phone number integration" : "Automatische Vervollständigung des Benutzernamens für Benutzer basierend auf der Rufnummernintegration zulassen",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung des Benutzernamens, wenn der vollständigen Namen oder die E-Mail-Adresse eingeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeiten).",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
"This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
@@ -426,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Wenn Sie Anwendungen von Drittanbietern verwenden, um sich mit Nextcloud zu verbinden, stellen Sie bitte sicher, dass Sie für jede Anwendung ein Anwendungspasswort erstellen und konfigurieren, bevor Sie die Zwei-Faktor-Authentifizierung aktivieren.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte laden Sie ein ASCII-kodiertes PEM-Zertifikat hoch.",
"Valid until {date}" : "Gültig bis {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Nur für lokale Benutzer sichtbar",
"Only visible to you" : "Nur für Sie sichtbar",
"Contacts" : "Kontakte",
"Visible to local users and to trusted servers" : "Sichtbar für lokale Benutzer und vertrauenswürdige Server",
+ "Public" : "Öffentlich",
"Will be synced to a global and public address book" : "Wird mit einem globalen und einem öffentlichen Adressbuch synchronisiert",
"by" : "von",
"SSL Root Certificates" : "SSL-Root-Zertifikate",
@@ -445,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, müssen Benutzername oder E-Mail-Adresse vollständig eingegeben werden.",
"Restrict username autocompletion to users within the same groups" : "Automatische Vervollständigung der Benutzernamen auf Benutzer innerhalb der gleichen Gruppen beschränken",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "Don't synchronize to servers" : "Nicht mit Servern synchronisieren",
+ "Trusted" : "Vertrauenswürdig",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog zulassen (Wenn dies deaktiviert ist, müssen der vollständige Benutzername oder die E-Mail-Adresse eingegeben werden)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/el.js b/apps/settings/l10n/el.js
index a5b36af75d9..0f678f7cd1b 100644
--- a/apps/settings/l10n/el.js
+++ b/apps/settings/l10n/el.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Γινεται αποστολή...",
"Email sent" : "Το Email απεστάλη ",
"Private" : "Ιδιωτικά",
- "Don't synchronize to servers" : "Να μη γίνει συγχρονισμός με τους διακομιστές.",
- "Trusted" : "Έμπιστος",
+ "Local" : "Τοπικά",
"Only synchronize to trusted servers" : "Συγχρονισμός μόνο με έμπιστους διακομιστές.",
- "Public" : "Δημόσιο",
"Synchronize to trusted servers and the global and public address book" : "Συγχρονισμός με αξιόπιστους διακομιστές του γενικού και δημόσιου βιβλίου διευθύνσεων",
"Verify" : "Επαλήθευση",
"Verifying …" : "Γίνεται επαλήθευση ...",
@@ -420,11 +418,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Εάν χρησιμοποιείτε εφαρμογές τρίτων για σύνδεση στο Nextcloud, βεβαιωθείτε ότι έχετε δημιουργήσει και διαμορφώσει έναν κωδικό πρόσβασης εφαρμογής για κάθε έναν προτού ενεργοποιήσετε τον έλεγχο ταυτότητας δεύτερου παράγοντα.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Προέκυψε σφάλμα. Παρακαλούμε μεταφορτώστε ένα πιστοποιητικό PEM κωδικοποιημένο κατά ASCII.",
"Valid until {date}" : "Έγκυρο έως {date}",
- "Local" : "Τοπικά",
"Only visible to local users" : "Εμφανές μόνο σε τοπικούς χρήστες",
"Only visible to you" : "Εμφανές μόνο σε εσάς",
"Contacts" : "Επαφές",
"Visible to local users and to trusted servers" : "Προσθήκη στη λίστα των έμπιστων διακομιστών",
+ "Public" : "Δημόσιο",
"Will be synced to a global and public address book" : "Θα συγχρονιστεί με παγκόσμιο και δημόσιο βιβλίο διευθύνσεων",
"by" : "από",
"SSL Root Certificates" : "Πιστοποιητικά SSL του Root",
@@ -439,6 +437,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Να επιτρέπεται η χρήση αυτόματης συμπλήρωσης του ονόματος χρήστη στο πεδίο διαμοιρασμού. Αν η ρύθμιση αυτή είναι απενεργοποιημένη θα πρέπει να εισαχθεί το πλήρες όνομα χρήστη ή το email του. ",
"Restrict username autocompletion to users within the same groups" : "Περιορισμός της αυτόματης συμπλήρωσης του ονόματος χρήστη σε χρήστες της ίδιας ομάδας",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Εμφάνιση κειμένου αποποίησης ευθυνών στη σελίδα δημοσίευσης συνδέσμων. (Εμφανίζεται μόνο όταν η λίστα αρχείων είναι κρυφή.)",
+ "Don't synchronize to servers" : "Να μη γίνει συγχρονισμός με τους διακομιστές.",
+ "Trusted" : "Έμπιστος",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Να επιτρέπεται η αυτόματη συμπλήρωση ονόματος χρήστη στο παράθυρο διαλόγου κοινής χρήσης (εάν είναι απενεργοποιημένο, πρέπει να εισαχθεί το πλήρες όνομα χρήστη ή η διεύθυνση email)"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/el.json b/apps/settings/l10n/el.json
index 7f05794a4db..a2b5ac1e1a6 100644
--- a/apps/settings/l10n/el.json
+++ b/apps/settings/l10n/el.json
@@ -6,10 +6,8 @@
"Sending…" : "Γινεται αποστολή...",
"Email sent" : "Το Email απεστάλη ",
"Private" : "Ιδιωτικά",
- "Don't synchronize to servers" : "Να μη γίνει συγχρονισμός με τους διακομιστές.",
- "Trusted" : "Έμπιστος",
+ "Local" : "Τοπικά",
"Only synchronize to trusted servers" : "Συγχρονισμός μόνο με έμπιστους διακομιστές.",
- "Public" : "Δημόσιο",
"Synchronize to trusted servers and the global and public address book" : "Συγχρονισμός με αξιόπιστους διακομιστές του γενικού και δημόσιου βιβλίου διευθύνσεων",
"Verify" : "Επαλήθευση",
"Verifying …" : "Γίνεται επαλήθευση ...",
@@ -418,11 +416,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Εάν χρησιμοποιείτε εφαρμογές τρίτων για σύνδεση στο Nextcloud, βεβαιωθείτε ότι έχετε δημιουργήσει και διαμορφώσει έναν κωδικό πρόσβασης εφαρμογής για κάθε έναν προτού ενεργοποιήσετε τον έλεγχο ταυτότητας δεύτερου παράγοντα.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Προέκυψε σφάλμα. Παρακαλούμε μεταφορτώστε ένα πιστοποιητικό PEM κωδικοποιημένο κατά ASCII.",
"Valid until {date}" : "Έγκυρο έως {date}",
- "Local" : "Τοπικά",
"Only visible to local users" : "Εμφανές μόνο σε τοπικούς χρήστες",
"Only visible to you" : "Εμφανές μόνο σε εσάς",
"Contacts" : "Επαφές",
"Visible to local users and to trusted servers" : "Προσθήκη στη λίστα των έμπιστων διακομιστών",
+ "Public" : "Δημόσιο",
"Will be synced to a global and public address book" : "Θα συγχρονιστεί με παγκόσμιο και δημόσιο βιβλίο διευθύνσεων",
"by" : "από",
"SSL Root Certificates" : "Πιστοποιητικά SSL του Root",
@@ -437,6 +435,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Να επιτρέπεται η χρήση αυτόματης συμπλήρωσης του ονόματος χρήστη στο πεδίο διαμοιρασμού. Αν η ρύθμιση αυτή είναι απενεργοποιημένη θα πρέπει να εισαχθεί το πλήρες όνομα χρήστη ή το email του. ",
"Restrict username autocompletion to users within the same groups" : "Περιορισμός της αυτόματης συμπλήρωσης του ονόματος χρήστη σε χρήστες της ίδιας ομάδας",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Εμφάνιση κειμένου αποποίησης ευθυνών στη σελίδα δημοσίευσης συνδέσμων. (Εμφανίζεται μόνο όταν η λίστα αρχείων είναι κρυφή.)",
+ "Don't synchronize to servers" : "Να μη γίνει συγχρονισμός με τους διακομιστές.",
+ "Trusted" : "Έμπιστος",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Να επιτρέπεται η αυτόματη συμπλήρωση ονόματος χρήστη στο παράθυρο διαλόγου κοινής χρήσης (εάν είναι απενεργοποιημένο, πρέπει να εισαχθεί το πλήρες όνομα χρήστη ή η διεύθυνση email)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/en_GB.js b/apps/settings/l10n/en_GB.js
index 159d4648a6e..57b79c83699 100644
--- a/apps/settings/l10n/en_GB.js
+++ b/apps/settings/l10n/en_GB.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Sending…",
"Email sent" : "Email sent",
"Private" : "Private",
- "Public" : "Public",
+ "Local" : "Local",
"Verify" : "Verify",
"Verifying …" : "Verifying …",
"Unable to change password" : "Unable to change password",
@@ -289,11 +289,11 @@ OC.L10N.register(
"Change password" : "Change password",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "An error occurred. Please upload an ASCII-encoded PEM certificate.",
"Valid until {date}" : "Valid until {date}",
- "Local" : "Local",
"Only visible to local users" : "Only visible to local users",
"Only visible to you" : "Only visible to you",
"Contacts" : "Contacts",
"Visible to local users and to trusted servers" : "Visible to local users and to trusted servers",
+ "Public" : "Public",
"Will be synced to a global and public address book" : "Will be synced to a global and public address book",
"by" : "by",
"SSL Root Certificates" : "SSL Root Certificates",
diff --git a/apps/settings/l10n/en_GB.json b/apps/settings/l10n/en_GB.json
index 0f09456a5d0..1aa97f7c9a7 100644
--- a/apps/settings/l10n/en_GB.json
+++ b/apps/settings/l10n/en_GB.json
@@ -6,7 +6,7 @@
"Sending…" : "Sending…",
"Email sent" : "Email sent",
"Private" : "Private",
- "Public" : "Public",
+ "Local" : "Local",
"Verify" : "Verify",
"Verifying …" : "Verifying …",
"Unable to change password" : "Unable to change password",
@@ -287,11 +287,11 @@
"Change password" : "Change password",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "An error occurred. Please upload an ASCII-encoded PEM certificate.",
"Valid until {date}" : "Valid until {date}",
- "Local" : "Local",
"Only visible to local users" : "Only visible to local users",
"Only visible to you" : "Only visible to you",
"Contacts" : "Contacts",
"Visible to local users and to trusted servers" : "Visible to local users and to trusted servers",
+ "Public" : "Public",
"Will be synced to a global and public address book" : "Will be synced to a global and public address book",
"by" : "by",
"SSL Root Certificates" : "SSL Root Certificates",
diff --git a/apps/settings/l10n/eo.js b/apps/settings/l10n/eo.js
index f4ea7e3a4f3..bdf5411c743 100644
--- a/apps/settings/l10n/eo.js
+++ b/apps/settings/l10n/eo.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Sendado...",
"Email sent" : "La retpoŝtaĵo sendiĝis",
"Private" : "Privata",
- "Public" : "Publika",
+ "Local" : "Loka",
"Verify" : "Kontroli",
"Verifying …" : "Kontrolado...",
"Unable to change password" : "Ne eblis ŝanĝi la pasvorton",
@@ -372,11 +372,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Uzu duan fazon krom via pasvorto por plisekurigi vian konton.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Eraro okazis. Bv. alŝuti askian PEM-atestilon.",
"Valid until {date}" : "Valida ĝis {date}",
- "Local" : "Loka",
"Only visible to local users" : "Nur videbla de lokaj uzantoj",
"Only visible to you" : "Nur videbla de vi",
"Contacts" : "Kontaktoj",
"Visible to local users and to trusted servers" : "Videbla de lokaj uzantoj kaj de fidindaj serviloj",
+ "Public" : "Publika",
"Will be synced to a global and public address book" : "Sinkroniĝos al malloka kaj publika adresaro",
"by" : "de",
"SSL Root Certificates" : "Radikaj SSL-atestiloj",
diff --git a/apps/settings/l10n/eo.json b/apps/settings/l10n/eo.json
index 6fc0ccd9405..7bfe259f972 100644
--- a/apps/settings/l10n/eo.json
+++ b/apps/settings/l10n/eo.json
@@ -6,7 +6,7 @@
"Sending…" : "Sendado...",
"Email sent" : "La retpoŝtaĵo sendiĝis",
"Private" : "Privata",
- "Public" : "Publika",
+ "Local" : "Loka",
"Verify" : "Kontroli",
"Verifying …" : "Kontrolado...",
"Unable to change password" : "Ne eblis ŝanĝi la pasvorton",
@@ -370,11 +370,11 @@
"Use a second factor besides your password to increase security for your account." : "Uzu duan fazon krom via pasvorto por plisekurigi vian konton.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Eraro okazis. Bv. alŝuti askian PEM-atestilon.",
"Valid until {date}" : "Valida ĝis {date}",
- "Local" : "Loka",
"Only visible to local users" : "Nur videbla de lokaj uzantoj",
"Only visible to you" : "Nur videbla de vi",
"Contacts" : "Kontaktoj",
"Visible to local users and to trusted servers" : "Videbla de lokaj uzantoj kaj de fidindaj serviloj",
+ "Public" : "Publika",
"Will be synced to a global and public address book" : "Sinkroniĝos al malloka kaj publika adresaro",
"by" : "de",
"SSL Root Certificates" : "Radikaj SSL-atestiloj",
diff --git a/apps/settings/l10n/es.js b/apps/settings/l10n/es.js
index 96930c0ee8e..bfb98030d54 100644
--- a/apps/settings/l10n/es.js
+++ b/apps/settings/l10n/es.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Don't synchronize to servers" : "No sincronizar con servidores",
- "Trusted" : "De confianza",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Sólo visible para las personas que coincidan con la integración del número de teléfono a través de Talk en el móvil",
+ "Local" : "Local",
+ "Only visible to people on this instance and guests" : "Sólo visible para las personas de esta instancia e invitados",
+ "Federated" : "Federado",
"Only synchronize to trusted servers" : "Sincronizar solo con servidores de confianza",
- "Public" : "Público",
+ "Published" : "Publicado",
"Synchronize to trusted servers and the global and public address book" : "Sincronizar con servidores de confianza y con la libreta de direcciones global y pública",
"Verify" : "Verificar",
"Verifying …" : "Verificando…",
@@ -76,6 +78,7 @@ OC.L10N.register(
"Email could not be sent. Check your mail server log" : "No se ha podido enviar el correo. Compruebe el registro del servidor de correo",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ha ocurrido un problema al enviar el mensaje de correo electrónico. Revisa tu configuración. (Error: %s)",
"You need to set your user email before being able to send test emails." : "Tienes que configurar tu dirección de correo electrónico antes de poder enviar mensajes de prueba.",
+ "Invalid user" : "Usuario no válido",
"Invalid mail address" : "Dirección de correo no válido",
"Settings saved" : "Ajustes guardados",
"Unable to change full name" : "No se puede cambiar el nombre completo",
@@ -369,14 +372,21 @@ OC.L10N.register(
"Expire after " : "Caduca tras",
"days" : "días",
"Enforce expiration date" : "Imponer fecha de caducidad",
+ "Allow users to share via link and emails" : "Permitir a los usuarios compartir a través de enlaces y emails",
"Allow public uploads" : "Permitir subidas públicas",
"Always ask for a password" : "Pedir siempre la contraseña",
"Enforce password protection" : "Forzar la protección por contraseña.",
+ "Set default expiration date" : "Establecer fecha de caducidad predeterminada",
"Allow resharing" : "Permitir que se vuelva a compartir",
"Allow sharing with groups" : "Permitir compartir con grupos",
"Restrict users to only share with users in their groups" : "Limitar a los usuarios a compartir solo con los usuarios de sus grupos",
"Exclude groups from sharing" : "Excluye grupos de compartir",
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir contenidos compartidos, pero no podrán iniciarlos.",
+ "Allow username autocompletion in share dialog" : "Permitir autocompletar nombre de usuario en la casilla de compartir",
+ "Allow username autocompletion to users within the same groups" : "Permitir autocompletar nombre de usuario a los usuarios del mismo grupo",
+ "Allow username autocompletion to users based on phone number integration" : "Permitir autocompletar nombre de usuario a usuarios basado en la integración del número de teléfono",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Si el autocompletado \"en mismo grupo\" e \"integración del número de telefono\" están activados, una coincidencia en cualquiera de ellos es suficiente para mostrar un usuario.",
+ "Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir autocompletado del nombre de usuario cuando se introduzca el nombre completo o la dirección del email (ignorando la falta de coincidencia en la agenda de teléfonos y ser del mismo grupo)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Mostrar texto de aviso en la página de subida de enlace público (solo se muestra cuando la lista de archivos está oculta)",
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto se mostrará en la página de subida de enlace público cuando la lista de archivos esté oculta.",
"Default share permissions" : "Permisos para compartir por defecto",
@@ -420,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Si utiliza aplicaciones de terceras partes para conectarse a Nextcloud, por favor compruebe que crea y configura una contraseña de app para cada una antes de activar el factor de autentificación de dos pasos.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ha ocurrido un error. Por favor, cargue un certificado PEM codificado en ASCII.",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible solo a usuarios locales",
"Only visible to you" : "Visible sólo para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Se sincronizará a una libreta de direcciones pública y global",
"by" : "por",
"SSL Root Certificates" : "Certificados raíz SSL ",
@@ -439,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permitir autocompletado del nombre de usuario en el diálogo de compartir. Si se desactiva, se necesitará introducir el nombre de usuario completo o la dirección de correo electrónico.",
"Restrict username autocompletion to users within the same groups" : "Limitar autocompletar de usuarios solo para los usuarios dentro del mismo grupo",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostrar texto de descargo de responsabilidad en la página de subida con el enlace público. (Sólo se muestra cuando la lista de archivos está oculta.)",
+ "Don't synchronize to servers" : "No sincronizar con servidores",
+ "Trusted" : "De confianza",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Permitir autocompletado del nombre de usuario en el diálogo de compartir (si esto está desactivado, hay que introducir completos el nombre de usuario completo o la dirección de correo)"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/es.json b/apps/settings/l10n/es.json
index 2410dd6d7f1..1caf156502e 100644
--- a/apps/settings/l10n/es.json
+++ b/apps/settings/l10n/es.json
@@ -6,10 +6,12 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Don't synchronize to servers" : "No sincronizar con servidores",
- "Trusted" : "De confianza",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Sólo visible para las personas que coincidan con la integración del número de teléfono a través de Talk en el móvil",
+ "Local" : "Local",
+ "Only visible to people on this instance and guests" : "Sólo visible para las personas de esta instancia e invitados",
+ "Federated" : "Federado",
"Only synchronize to trusted servers" : "Sincronizar solo con servidores de confianza",
- "Public" : "Público",
+ "Published" : "Publicado",
"Synchronize to trusted servers and the global and public address book" : "Sincronizar con servidores de confianza y con la libreta de direcciones global y pública",
"Verify" : "Verificar",
"Verifying …" : "Verificando…",
@@ -74,6 +76,7 @@
"Email could not be sent. Check your mail server log" : "No se ha podido enviar el correo. Compruebe el registro del servidor de correo",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ha ocurrido un problema al enviar el mensaje de correo electrónico. Revisa tu configuración. (Error: %s)",
"You need to set your user email before being able to send test emails." : "Tienes que configurar tu dirección de correo electrónico antes de poder enviar mensajes de prueba.",
+ "Invalid user" : "Usuario no válido",
"Invalid mail address" : "Dirección de correo no válido",
"Settings saved" : "Ajustes guardados",
"Unable to change full name" : "No se puede cambiar el nombre completo",
@@ -367,14 +370,21 @@
"Expire after " : "Caduca tras",
"days" : "días",
"Enforce expiration date" : "Imponer fecha de caducidad",
+ "Allow users to share via link and emails" : "Permitir a los usuarios compartir a través de enlaces y emails",
"Allow public uploads" : "Permitir subidas públicas",
"Always ask for a password" : "Pedir siempre la contraseña",
"Enforce password protection" : "Forzar la protección por contraseña.",
+ "Set default expiration date" : "Establecer fecha de caducidad predeterminada",
"Allow resharing" : "Permitir que se vuelva a compartir",
"Allow sharing with groups" : "Permitir compartir con grupos",
"Restrict users to only share with users in their groups" : "Limitar a los usuarios a compartir solo con los usuarios de sus grupos",
"Exclude groups from sharing" : "Excluye grupos de compartir",
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir contenidos compartidos, pero no podrán iniciarlos.",
+ "Allow username autocompletion in share dialog" : "Permitir autocompletar nombre de usuario en la casilla de compartir",
+ "Allow username autocompletion to users within the same groups" : "Permitir autocompletar nombre de usuario a los usuarios del mismo grupo",
+ "Allow username autocompletion to users based on phone number integration" : "Permitir autocompletar nombre de usuario a usuarios basado en la integración del número de teléfono",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Si el autocompletado \"en mismo grupo\" e \"integración del número de telefono\" están activados, una coincidencia en cualquiera de ellos es suficiente para mostrar un usuario.",
+ "Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir autocompletado del nombre de usuario cuando se introduzca el nombre completo o la dirección del email (ignorando la falta de coincidencia en la agenda de teléfonos y ser del mismo grupo)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Mostrar texto de aviso en la página de subida de enlace público (solo se muestra cuando la lista de archivos está oculta)",
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto se mostrará en la página de subida de enlace público cuando la lista de archivos esté oculta.",
"Default share permissions" : "Permisos para compartir por defecto",
@@ -418,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Si utiliza aplicaciones de terceras partes para conectarse a Nextcloud, por favor compruebe que crea y configura una contraseña de app para cada una antes de activar el factor de autentificación de dos pasos.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ha ocurrido un error. Por favor, cargue un certificado PEM codificado en ASCII.",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible solo a usuarios locales",
"Only visible to you" : "Visible sólo para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Se sincronizará a una libreta de direcciones pública y global",
"by" : "por",
"SSL Root Certificates" : "Certificados raíz SSL ",
@@ -437,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permitir autocompletado del nombre de usuario en el diálogo de compartir. Si se desactiva, se necesitará introducir el nombre de usuario completo o la dirección de correo electrónico.",
"Restrict username autocompletion to users within the same groups" : "Limitar autocompletar de usuarios solo para los usuarios dentro del mismo grupo",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostrar texto de descargo de responsabilidad en la página de subida con el enlace público. (Sólo se muestra cuando la lista de archivos está oculta.)",
+ "Don't synchronize to servers" : "No sincronizar con servidores",
+ "Trusted" : "De confianza",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Permitir autocompletado del nombre de usuario en el diálogo de compartir (si esto está desactivado, hay que introducir completos el nombre de usuario completo o la dirección de correo)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/es_419.js b/apps/settings/l10n/es_419.js
index de67d9a7d0e..9a7bbde3aeb 100644
--- a/apps/settings/l10n/es_419.js
+++ b/apps/settings/l10n/es_419.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -269,11 +269,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_419.json b/apps/settings/l10n/es_419.json
index 01feb0f86ee..ffb58f3b578 100644
--- a/apps/settings/l10n/es_419.json
+++ b/apps/settings/l10n/es_419.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -267,11 +267,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_AR.js b/apps/settings/l10n/es_AR.js
index 959bbf928c9..691cfb42d34 100644
--- a/apps/settings/l10n/es_AR.js
+++ b/apps/settings/l10n/es_AR.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -253,11 +253,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Favor de cargar un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para usted",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_AR.json b/apps/settings/l10n/es_AR.json
index baf551b8dfa..7d39da0c489 100644
--- a/apps/settings/l10n/es_AR.json
+++ b/apps/settings/l10n/es_AR.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -251,11 +251,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Favor de cargar un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para usted",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_CL.js b/apps/settings/l10n/es_CL.js
index 6da527e883b..dd299ca8437 100644
--- a/apps/settings/l10n/es_CL.js
+++ b/apps/settings/l10n/es_CL.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -265,11 +265,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_CL.json b/apps/settings/l10n/es_CL.json
index 234adbdbdf7..f533d4c4923 100644
--- a/apps/settings/l10n/es_CL.json
+++ b/apps/settings/l10n/es_CL.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -263,11 +263,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_CO.js b/apps/settings/l10n/es_CO.js
index 6da527e883b..dd299ca8437 100644
--- a/apps/settings/l10n/es_CO.js
+++ b/apps/settings/l10n/es_CO.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -265,11 +265,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_CO.json b/apps/settings/l10n/es_CO.json
index 234adbdbdf7..f533d4c4923 100644
--- a/apps/settings/l10n/es_CO.json
+++ b/apps/settings/l10n/es_CO.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -263,11 +263,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_CR.js b/apps/settings/l10n/es_CR.js
index 6da527e883b..dd299ca8437 100644
--- a/apps/settings/l10n/es_CR.js
+++ b/apps/settings/l10n/es_CR.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -265,11 +265,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_CR.json b/apps/settings/l10n/es_CR.json
index 234adbdbdf7..f533d4c4923 100644
--- a/apps/settings/l10n/es_CR.json
+++ b/apps/settings/l10n/es_CR.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -263,11 +263,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_DO.js b/apps/settings/l10n/es_DO.js
index 6da527e883b..dd299ca8437 100644
--- a/apps/settings/l10n/es_DO.js
+++ b/apps/settings/l10n/es_DO.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -265,11 +265,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_DO.json b/apps/settings/l10n/es_DO.json
index 234adbdbdf7..f533d4c4923 100644
--- a/apps/settings/l10n/es_DO.json
+++ b/apps/settings/l10n/es_DO.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -263,11 +263,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_EC.js b/apps/settings/l10n/es_EC.js
index 6da527e883b..dd299ca8437 100644
--- a/apps/settings/l10n/es_EC.js
+++ b/apps/settings/l10n/es_EC.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -265,11 +265,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_EC.json b/apps/settings/l10n/es_EC.json
index 234adbdbdf7..f533d4c4923 100644
--- a/apps/settings/l10n/es_EC.json
+++ b/apps/settings/l10n/es_EC.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -263,11 +263,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_GT.js b/apps/settings/l10n/es_GT.js
index 6da527e883b..dd299ca8437 100644
--- a/apps/settings/l10n/es_GT.js
+++ b/apps/settings/l10n/es_GT.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -265,11 +265,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_GT.json b/apps/settings/l10n/es_GT.json
index 234adbdbdf7..f533d4c4923 100644
--- a/apps/settings/l10n/es_GT.json
+++ b/apps/settings/l10n/es_GT.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -263,11 +263,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_HN.js b/apps/settings/l10n/es_HN.js
index 9038f931c1f..7e8ad974f53 100644
--- a/apps/settings/l10n/es_HN.js
+++ b/apps/settings/l10n/es_HN.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -258,11 +258,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_HN.json b/apps/settings/l10n/es_HN.json
index d8286864a31..a14b7073a25 100644
--- a/apps/settings/l10n/es_HN.json
+++ b/apps/settings/l10n/es_HN.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -256,11 +256,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_MX.js b/apps/settings/l10n/es_MX.js
index 1f096b84c95..8e6c4056c1e 100644
--- a/apps/settings/l10n/es_MX.js
+++ b/apps/settings/l10n/es_MX.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -289,11 +289,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_MX.json b/apps/settings/l10n/es_MX.json
index 5d76ae0d2a3..530d6bfb35a 100644
--- a/apps/settings/l10n/es_MX.json
+++ b/apps/settings/l10n/es_MX.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -287,11 +287,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_NI.js b/apps/settings/l10n/es_NI.js
index 9038f931c1f..7e8ad974f53 100644
--- a/apps/settings/l10n/es_NI.js
+++ b/apps/settings/l10n/es_NI.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -258,11 +258,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_NI.json b/apps/settings/l10n/es_NI.json
index d8286864a31..a14b7073a25 100644
--- a/apps/settings/l10n/es_NI.json
+++ b/apps/settings/l10n/es_NI.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -256,11 +256,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_PA.js b/apps/settings/l10n/es_PA.js
index 9038f931c1f..7e8ad974f53 100644
--- a/apps/settings/l10n/es_PA.js
+++ b/apps/settings/l10n/es_PA.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -258,11 +258,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_PA.json b/apps/settings/l10n/es_PA.json
index d8286864a31..a14b7073a25 100644
--- a/apps/settings/l10n/es_PA.json
+++ b/apps/settings/l10n/es_PA.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -256,11 +256,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_PE.js b/apps/settings/l10n/es_PE.js
index 9038f931c1f..7e8ad974f53 100644
--- a/apps/settings/l10n/es_PE.js
+++ b/apps/settings/l10n/es_PE.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -258,11 +258,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_PE.json b/apps/settings/l10n/es_PE.json
index d8286864a31..a14b7073a25 100644
--- a/apps/settings/l10n/es_PE.json
+++ b/apps/settings/l10n/es_PE.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -256,11 +256,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_PR.js b/apps/settings/l10n/es_PR.js
index 9038f931c1f..7e8ad974f53 100644
--- a/apps/settings/l10n/es_PR.js
+++ b/apps/settings/l10n/es_PR.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -258,11 +258,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_PR.json b/apps/settings/l10n/es_PR.json
index d8286864a31..a14b7073a25 100644
--- a/apps/settings/l10n/es_PR.json
+++ b/apps/settings/l10n/es_PR.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -256,11 +256,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_PY.js b/apps/settings/l10n/es_PY.js
index 9038f931c1f..7e8ad974f53 100644
--- a/apps/settings/l10n/es_PY.js
+++ b/apps/settings/l10n/es_PY.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -258,11 +258,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_PY.json b/apps/settings/l10n/es_PY.json
index d8286864a31..a14b7073a25 100644
--- a/apps/settings/l10n/es_PY.json
+++ b/apps/settings/l10n/es_PY.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -256,11 +256,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_SV.js b/apps/settings/l10n/es_SV.js
index 6da527e883b..dd299ca8437 100644
--- a/apps/settings/l10n/es_SV.js
+++ b/apps/settings/l10n/es_SV.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -265,11 +265,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_SV.json b/apps/settings/l10n/es_SV.json
index 234adbdbdf7..f533d4c4923 100644
--- a/apps/settings/l10n/es_SV.json
+++ b/apps/settings/l10n/es_SV.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -263,11 +263,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_UY.js b/apps/settings/l10n/es_UY.js
index 9038f931c1f..7e8ad974f53 100644
--- a/apps/settings/l10n/es_UY.js
+++ b/apps/settings/l10n/es_UY.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -258,11 +258,11 @@ OC.L10N.register(
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/es_UY.json b/apps/settings/l10n/es_UY.json
index d8286864a31..a14b7073a25 100644
--- a/apps/settings/l10n/es_UY.json
+++ b/apps/settings/l10n/es_UY.json
@@ -6,7 +6,7 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "Verificando ...",
"Unable to change password" : "No fue posible cambiar la contraseña",
@@ -256,11 +256,11 @@
"Change password" : "Cambiar contraseña",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Por favor carga un certificado PEM con codificación ASCII",
"Valid until {date}" : "Válido hasta {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible sólo para usuarios locales",
"Only visible to you" : "Sólo visible para ti",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"by" : "por",
"SSL Root Certificates" : "Certificado SSL Raíz",
diff --git a/apps/settings/l10n/et_EE.js b/apps/settings/l10n/et_EE.js
index 28d352bf6d7..0a9d6fdf1af 100644
--- a/apps/settings/l10n/et_EE.js
+++ b/apps/settings/l10n/et_EE.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Saadan...",
"Email sent" : "E-kiri on saadetud",
"Private" : "Privaatne",
- "Public" : "Avalik",
+ "Local" : "Kohalik",
"Verify" : "Kontrolli",
"Verifying …" : "Kontrollin ...",
"Unable to change password" : "Ei suuda parooli muuta",
@@ -251,11 +251,11 @@ OC.L10N.register(
"Change password" : "Muuda parooli",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Tekkis viga. Palun lae üles ASCII kodeeringud PEM sertifikaat.",
"Valid until {date}" : "Kehtib kuni {date}",
- "Local" : "Kohalik",
"Only visible to local users" : "Ainult nähtav kohalikele kasutajatele",
"Only visible to you" : "Ainult sinule nähtav",
"Contacts" : "Kontaktid",
"Visible to local users and to trusted servers" : "Nähtav kohelikele kasutajatele ja usaldatud serveritele",
+ "Public" : "Avalik",
"Will be synced to a global and public address book" : "Sünkroniseeritakse globaalsesse ja avalikku aadressiraamatusse",
"by" : "lisas",
"SSL Root Certificates" : "SSL juursertifikaadid",
diff --git a/apps/settings/l10n/et_EE.json b/apps/settings/l10n/et_EE.json
index 9a633b7682f..cc2951fa54d 100644
--- a/apps/settings/l10n/et_EE.json
+++ b/apps/settings/l10n/et_EE.json
@@ -6,7 +6,7 @@
"Sending…" : "Saadan...",
"Email sent" : "E-kiri on saadetud",
"Private" : "Privaatne",
- "Public" : "Avalik",
+ "Local" : "Kohalik",
"Verify" : "Kontrolli",
"Verifying …" : "Kontrollin ...",
"Unable to change password" : "Ei suuda parooli muuta",
@@ -249,11 +249,11 @@
"Change password" : "Muuda parooli",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Tekkis viga. Palun lae üles ASCII kodeeringud PEM sertifikaat.",
"Valid until {date}" : "Kehtib kuni {date}",
- "Local" : "Kohalik",
"Only visible to local users" : "Ainult nähtav kohalikele kasutajatele",
"Only visible to you" : "Ainult sinule nähtav",
"Contacts" : "Kontaktid",
"Visible to local users and to trusted servers" : "Nähtav kohelikele kasutajatele ja usaldatud serveritele",
+ "Public" : "Avalik",
"Will be synced to a global and public address book" : "Sünkroniseeritakse globaalsesse ja avalikku aadressiraamatusse",
"by" : "lisas",
"SSL Root Certificates" : "SSL juursertifikaadid",
diff --git a/apps/settings/l10n/eu.js b/apps/settings/l10n/eu.js
index e85540e7836..fbe118c0c26 100644
--- a/apps/settings/l10n/eu.js
+++ b/apps/settings/l10n/eu.js
@@ -8,7 +8,8 @@ OC.L10N.register(
"Sending…" : "Bidaltzen...",
"Email sent" : "Eposta bidalia",
"Private" : "Pribatua",
- "Public" : "Publikoa",
+ "Local" : "Lokala",
+ "Federated" : "Federatua",
"Verify" : "Egiaztatu",
"Verifying …" : "Egiaztatzen...",
"Unable to change password" : "Ezin izan da pasahitza aldatu",
@@ -71,6 +72,7 @@ OC.L10N.register(
"Email could not be sent. Check your mail server log" : "E-posta mezua ezin izan da bidali. Begiratu zure posta-zerbitzariaren egunkaria",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Arazo bat sortu da posta bidaltzerakoan. Berrikusi zure ezarpenak. (Error: %s)",
"You need to set your user email before being able to send test emails." : "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.",
+ "Invalid user" : "Erabiltzaile baliogabea",
"Invalid mail address" : "Posta helbide baliogabea",
"Settings saved" : "Ezarpenak gordeta",
"Unable to change full name" : "Ezin izan da izena aldatu",
@@ -394,11 +396,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Zure pasahitzaz gain bigarren faktore bat erabiltzeak zure kontua seguruago egingo du.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Errorea gertatu da. Kargatu ASCII formatuan kodetutako PEM ziurtagiria.",
"Valid until {date}" : "{date} arte baliogarria",
- "Local" : "Lokala",
"Only visible to local users" : "Soilik bertako erabiltzaileentzako ikusgai",
"Only visible to you" : "Zuretzat bakarrik ikusgai",
"Contacts" : "Kontaktuak",
"Visible to local users and to trusted servers" : "Bertako erabiltzaile eta zerbitzarien jendearentzat ikusgai",
+ "Public" : "Publikoa",
"Will be synced to a global and public address book" : "Helbide liburu global eta publikoan sinkronizatuko da",
"by" : "Nork",
"SSL Root Certificates" : "SSL Root Certificates",
diff --git a/apps/settings/l10n/eu.json b/apps/settings/l10n/eu.json
index de21ed8e656..6e1fe6c935b 100644
--- a/apps/settings/l10n/eu.json
+++ b/apps/settings/l10n/eu.json
@@ -6,7 +6,8 @@
"Sending…" : "Bidaltzen...",
"Email sent" : "Eposta bidalia",
"Private" : "Pribatua",
- "Public" : "Publikoa",
+ "Local" : "Lokala",
+ "Federated" : "Federatua",
"Verify" : "Egiaztatu",
"Verifying …" : "Egiaztatzen...",
"Unable to change password" : "Ezin izan da pasahitza aldatu",
@@ -69,6 +70,7 @@
"Email could not be sent. Check your mail server log" : "E-posta mezua ezin izan da bidali. Begiratu zure posta-zerbitzariaren egunkaria",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Arazo bat sortu da posta bidaltzerakoan. Berrikusi zure ezarpenak. (Error: %s)",
"You need to set your user email before being able to send test emails." : "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.",
+ "Invalid user" : "Erabiltzaile baliogabea",
"Invalid mail address" : "Posta helbide baliogabea",
"Settings saved" : "Ezarpenak gordeta",
"Unable to change full name" : "Ezin izan da izena aldatu",
@@ -392,11 +394,11 @@
"Use a second factor besides your password to increase security for your account." : "Zure pasahitzaz gain bigarren faktore bat erabiltzeak zure kontua seguruago egingo du.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Errorea gertatu da. Kargatu ASCII formatuan kodetutako PEM ziurtagiria.",
"Valid until {date}" : "{date} arte baliogarria",
- "Local" : "Lokala",
"Only visible to local users" : "Soilik bertako erabiltzaileentzako ikusgai",
"Only visible to you" : "Zuretzat bakarrik ikusgai",
"Contacts" : "Kontaktuak",
"Visible to local users and to trusted servers" : "Bertako erabiltzaile eta zerbitzarien jendearentzat ikusgai",
+ "Public" : "Publikoa",
"Will be synced to a global and public address book" : "Helbide liburu global eta publikoan sinkronizatuko da",
"by" : "Nork",
"SSL Root Certificates" : "SSL Root Certificates",
diff --git a/apps/settings/l10n/fa.js b/apps/settings/l10n/fa.js
index 48a2095ab5e..af4e4dba988 100644
--- a/apps/settings/l10n/fa.js
+++ b/apps/settings/l10n/fa.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "در حال ارسال",
"Email sent" : "ایمیل ارسال شد",
"Private" : "خصوصی",
- "Public" : "عمومی",
+ "Local" : "محلی",
"Verify" : "تأیید کنید",
"Verifying …" : "در حال تایید ...",
"Unable to change password" : "نمی‌توان رمز را تغییر داد",
@@ -378,11 +378,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "برای افزایش امنیت حساب کاربری خود ، از یک عامل دوم علاوه بر رمز عبور خود استفاده کنید.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "خطا: لطفاً یک کد اسکی دارای گواهینامه PEM بارگزاری کنید.",
"Valid until {date}" : "معتبر تا {date}",
- "Local" : "محلی",
"Only visible to local users" : "فقط برای کاربران محلی قابل مشاهده است.",
"Only visible to you" : "فقط برای شما قابل مشاهده است.",
"Contacts" : "مخاطبین",
"Visible to local users and to trusted servers" : " برای کاربران محلی و سرورهای مورد اطمینان قابل مشاهده است",
+ "Public" : "عمومی",
"Will be synced to a global and public address book" : "به صورت جهانی و دفترچه اطلاعات عمومی همگام سازی می شود.",
"by" : "با",
"SSL Root Certificates" : "گواهی های SSL Root",
diff --git a/apps/settings/l10n/fa.json b/apps/settings/l10n/fa.json
index a07d448f880..882b5bd3a09 100644
--- a/apps/settings/l10n/fa.json
+++ b/apps/settings/l10n/fa.json
@@ -6,7 +6,7 @@
"Sending…" : "در حال ارسال",
"Email sent" : "ایمیل ارسال شد",
"Private" : "خصوصی",
- "Public" : "عمومی",
+ "Local" : "محلی",
"Verify" : "تأیید کنید",
"Verifying …" : "در حال تایید ...",
"Unable to change password" : "نمی‌توان رمز را تغییر داد",
@@ -376,11 +376,11 @@
"Use a second factor besides your password to increase security for your account." : "برای افزایش امنیت حساب کاربری خود ، از یک عامل دوم علاوه بر رمز عبور خود استفاده کنید.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "خطا: لطفاً یک کد اسکی دارای گواهینامه PEM بارگزاری کنید.",
"Valid until {date}" : "معتبر تا {date}",
- "Local" : "محلی",
"Only visible to local users" : "فقط برای کاربران محلی قابل مشاهده است.",
"Only visible to you" : "فقط برای شما قابل مشاهده است.",
"Contacts" : "مخاطبین",
"Visible to local users and to trusted servers" : " برای کاربران محلی و سرورهای مورد اطمینان قابل مشاهده است",
+ "Public" : "عمومی",
"Will be synced to a global and public address book" : "به صورت جهانی و دفترچه اطلاعات عمومی همگام سازی می شود.",
"by" : "با",
"SSL Root Certificates" : "گواهی های SSL Root",
diff --git a/apps/settings/l10n/fi.js b/apps/settings/l10n/fi.js
index d7036b1cd83..bed977824a2 100644
--- a/apps/settings/l10n/fi.js
+++ b/apps/settings/l10n/fi.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Lähetetään…",
"Email sent" : "Sähköposti lähetetty",
"Private" : "Yksityinen",
- "Don't synchronize to servers" : "Älä synkronoi palvelimille",
- "Trusted" : "Luotettu",
+ "Local" : "Paikallinen",
"Only synchronize to trusted servers" : "Synkronoi vain luotetulle palvelimelle",
- "Public" : "Julkinen",
"Verify" : "Vahvista",
"Verifying …" : "Vahvistetaan…",
"Unable to change password" : "Salasanan vaihto ei onnistunut",
@@ -397,11 +395,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Jos yhdistät kolmannen osapuolen ohjelmia Nextcloudiin, määritä niille sovellussalasanat ennen kaksiosaisen todentamismenetelmän käyttöönottoa.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Tapahtu virhe. Lähetä ASCII-koodattu PEM-varmenne.",
"Valid until {date}" : "Kelvollinen {date} asti",
- "Local" : "Paikallinen",
"Only visible to local users" : "Näkyvillä vain paikallisille käyttäjille",
"Only visible to you" : "Näkyvillä vain sinulle",
"Contacts" : "Yhteystiedot",
"Visible to local users and to trusted servers" : "Näkyvillä vain paikallisille käyttäjille ja luotetuille palvelimille",
+ "Public" : "Julkinen",
"Will be synced to a global and public address book" : "Synkronoidaan maailmanlaajuiseen ja julkiseen osoitekirjaan",
"by" : " Kirjoittaja:",
"SSL Root Certificates" : "SSL-juurivarmenteet",
@@ -416,6 +414,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Salli käyttäjätunnusten automaattinen täydentäminen jakoikkunassa. Jos tämä asetus on pois käytöstä, tulee käyttäjän kirjoittaa käyttäjätunnus tai sähköpostiosoite kokonaan.",
"Restrict username autocompletion to users within the same groups" : "Rajoita käyttäjänimen automaattista täydentämistä samoihin ryhmiin kuuluviin käyttäjiin",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Näytä vastuuvapauslauseke julkisen linkin lähetyssivulla. (Näytetään vain, kun tiedostolista on piilotettu.)",
+ "Don't synchronize to servers" : "Älä synkronoi palvelimille",
+ "Trusted" : "Luotettu",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Salli käyttäjänimen automaattinen täydentäminen jakemisikkunassa (jos tämä on pois käytöstä, tulee koko käyttäjänimi tai sähköpostiosoite kirjoittaa)"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/fi.json b/apps/settings/l10n/fi.json
index d77edd3abc4..f3326f9e246 100644
--- a/apps/settings/l10n/fi.json
+++ b/apps/settings/l10n/fi.json
@@ -6,10 +6,8 @@
"Sending…" : "Lähetetään…",
"Email sent" : "Sähköposti lähetetty",
"Private" : "Yksityinen",
- "Don't synchronize to servers" : "Älä synkronoi palvelimille",
- "Trusted" : "Luotettu",
+ "Local" : "Paikallinen",
"Only synchronize to trusted servers" : "Synkronoi vain luotetulle palvelimelle",
- "Public" : "Julkinen",
"Verify" : "Vahvista",
"Verifying …" : "Vahvistetaan…",
"Unable to change password" : "Salasanan vaihto ei onnistunut",
@@ -395,11 +393,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Jos yhdistät kolmannen osapuolen ohjelmia Nextcloudiin, määritä niille sovellussalasanat ennen kaksiosaisen todentamismenetelmän käyttöönottoa.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Tapahtu virhe. Lähetä ASCII-koodattu PEM-varmenne.",
"Valid until {date}" : "Kelvollinen {date} asti",
- "Local" : "Paikallinen",
"Only visible to local users" : "Näkyvillä vain paikallisille käyttäjille",
"Only visible to you" : "Näkyvillä vain sinulle",
"Contacts" : "Yhteystiedot",
"Visible to local users and to trusted servers" : "Näkyvillä vain paikallisille käyttäjille ja luotetuille palvelimille",
+ "Public" : "Julkinen",
"Will be synced to a global and public address book" : "Synkronoidaan maailmanlaajuiseen ja julkiseen osoitekirjaan",
"by" : " Kirjoittaja:",
"SSL Root Certificates" : "SSL-juurivarmenteet",
@@ -414,6 +412,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Salli käyttäjätunnusten automaattinen täydentäminen jakoikkunassa. Jos tämä asetus on pois käytöstä, tulee käyttäjän kirjoittaa käyttäjätunnus tai sähköpostiosoite kokonaan.",
"Restrict username autocompletion to users within the same groups" : "Rajoita käyttäjänimen automaattista täydentämistä samoihin ryhmiin kuuluviin käyttäjiin",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Näytä vastuuvapauslauseke julkisen linkin lähetyssivulla. (Näytetään vain, kun tiedostolista on piilotettu.)",
+ "Don't synchronize to servers" : "Älä synkronoi palvelimille",
+ "Trusted" : "Luotettu",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Salli käyttäjänimen automaattinen täydentäminen jakemisikkunassa (jos tämä on pois käytöstä, tulee koko käyttäjänimi tai sähköpostiosoite kirjoittaa)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/fo.js b/apps/settings/l10n/fo.js
index c836ecd0a76..0e072df2e23 100644
--- a/apps/settings/l10n/fo.js
+++ b/apps/settings/l10n/fo.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Saved" : "Goymt",
"Email sent" : "Sendi t-post",
"Private" : "Privat",
- "Public" : "Alment",
"Unable to change password" : "Kundi ikki broyta loyniorðið",
"Select a profile picture" : "Vel ein profil mynd",
"Groups" : "Bólkar",
@@ -100,6 +99,7 @@ OC.L10N.register(
"Twitter" : "Twitter",
"Current password" : "Núverandi loyniorð",
"New password" : "Nýtt loyniorð",
- "Change password" : "Broyd loyniorð"
+ "Change password" : "Broyd loyniorð",
+ "Public" : "Alment"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/fo.json b/apps/settings/l10n/fo.json
index 22b37633653..2e81b2a8e96 100644
--- a/apps/settings/l10n/fo.json
+++ b/apps/settings/l10n/fo.json
@@ -2,7 +2,6 @@
"Saved" : "Goymt",
"Email sent" : "Sendi t-post",
"Private" : "Privat",
- "Public" : "Alment",
"Unable to change password" : "Kundi ikki broyta loyniorðið",
"Select a profile picture" : "Vel ein profil mynd",
"Groups" : "Bólkar",
@@ -98,6 +97,7 @@
"Twitter" : "Twitter",
"Current password" : "Núverandi loyniorð",
"New password" : "Nýtt loyniorð",
- "Change password" : "Broyd loyniorð"
+ "Change password" : "Broyd loyniorð",
+ "Public" : "Alment"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/fr.js b/apps/settings/l10n/fr.js
index 6beb936702f..ef59a64143f 100644
--- a/apps/settings/l10n/fr.js
+++ b/apps/settings/l10n/fr.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Envoi en cours...",
"Email sent" : "E-mail envoyé",
"Private" : "Privé",
- "Don't synchronize to servers" : "Ne pas synchroniser avec les serveurs",
- "Trusted" : "Approuvé",
+ "Local" : "Local",
"Only synchronize to trusted servers" : "Ne synchroniser qu'avec les serveurs de confiance",
- "Public" : "Publique",
"Synchronize to trusted servers and the global and public address book" : "Synchronisation avec les serveurs de confiance et le carnet d'adresses mondial et public",
"Verify" : "Vérifier",
"Verifying …" : "Vérification en cours...",
@@ -417,11 +415,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Si vous utilisez des applications tierces pour vous connecter à Nextcloud, assurez-vous de créer et de configurer un mot de passe d'application pour chacune avant d'activer l'authentification à deux facteurs.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Une erreur est survenue. Veuillez fournir un certificat PEM encodé au format ASCII.",
"Valid until {date}" : "Valide jusqu'au {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible uniquement par les utilisateurs locaux",
"Only visible to you" : "Visible uniquement par vous",
"Contacts" : "Contacts",
"Visible to local users and to trusted servers" : "Visible par les utilisateurs locaux et les serveurs de confiance",
+ "Public" : "Publique",
"Will be synced to a global and public address book" : "Va être synchronisé dans un carnet d'adresse global et public",
"by" : "par",
"SSL Root Certificates" : "Certificats Racines SSL",
@@ -436,6 +434,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets ou les adresses e-mail doivent être indiqués.",
"Restrict username autocompletion to users within the same groups" : "Limiter la saisie automatique du nom d'utilisateur aux utilisateurs appartenant aux mêmes groupes",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement (seulement lorsque la liste des fichiers est masquée).",
+ "Don't synchronize to servers" : "Ne pas synchroniser avec les serveurs",
+ "Trusted" : "Approuvé",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage (Si cette option est désactivée, les noms complets ou les adresses e-mail doivent être indiqués)"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json
index 652b0a167dc..18bf11b1709 100644
--- a/apps/settings/l10n/fr.json
+++ b/apps/settings/l10n/fr.json
@@ -6,10 +6,8 @@
"Sending…" : "Envoi en cours...",
"Email sent" : "E-mail envoyé",
"Private" : "Privé",
- "Don't synchronize to servers" : "Ne pas synchroniser avec les serveurs",
- "Trusted" : "Approuvé",
+ "Local" : "Local",
"Only synchronize to trusted servers" : "Ne synchroniser qu'avec les serveurs de confiance",
- "Public" : "Publique",
"Synchronize to trusted servers and the global and public address book" : "Synchronisation avec les serveurs de confiance et le carnet d'adresses mondial et public",
"Verify" : "Vérifier",
"Verifying …" : "Vérification en cours...",
@@ -415,11 +413,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Si vous utilisez des applications tierces pour vous connecter à Nextcloud, assurez-vous de créer et de configurer un mot de passe d'application pour chacune avant d'activer l'authentification à deux facteurs.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Une erreur est survenue. Veuillez fournir un certificat PEM encodé au format ASCII.",
"Valid until {date}" : "Valide jusqu'au {date}",
- "Local" : "Local",
"Only visible to local users" : "Visible uniquement par les utilisateurs locaux",
"Only visible to you" : "Visible uniquement par vous",
"Contacts" : "Contacts",
"Visible to local users and to trusted servers" : "Visible par les utilisateurs locaux et les serveurs de confiance",
+ "Public" : "Publique",
"Will be synced to a global and public address book" : "Va être synchronisé dans un carnet d'adresse global et public",
"by" : "par",
"SSL Root Certificates" : "Certificats Racines SSL",
@@ -434,6 +432,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets ou les adresses e-mail doivent être indiqués.",
"Restrict username autocompletion to users within the same groups" : "Limiter la saisie automatique du nom d'utilisateur aux utilisateurs appartenant aux mêmes groupes",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement (seulement lorsque la liste des fichiers est masquée).",
+ "Don't synchronize to servers" : "Ne pas synchroniser avec les serveurs",
+ "Trusted" : "Approuvé",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage (Si cette option est désactivée, les noms complets ou les adresses e-mail doivent être indiqués)"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/gl.js b/apps/settings/l10n/gl.js
index 362190dc795..45b05df4580 100644
--- a/apps/settings/l10n/gl.js
+++ b/apps/settings/l10n/gl.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "Correo enviado",
"Private" : "Privado",
- "Don't synchronize to servers" : "Non sincronizar con servidores",
- "Trusted" : "De confianza",
+ "Local" : "Local",
"Only synchronize to trusted servers" : "Sincronizar só con servidores de confianza",
- "Public" : "Público",
"Synchronize to trusted servers and the global and public address book" : "Sincronizar con servidores de confianza e co caderno de enderezos global e público",
"Verify" : "Verificar",
"Verifying …" : "Verificando…",
@@ -380,8 +378,6 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderán recibir comparticións, mais non inicialas.",
"Allow username autocompletion in share dialog" : "Permitir autocompletar o nome de usuario no diálogo de compartir",
"Allow username autocompletion to users within the same groups" : "Permitir autocompletar o nome de usuario aos usuarios dos mesmos grupos",
- "Allow username autocompletion to users based on phonebook matches" : "Permitir autocompletar o nome de usuario aos usuarios baseandose nas coincidencias da lista de teléfonos",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Se os autocompletados «mesmo grupo» e «coincidencias da lista de teléfonos» están activados, unha coincidencia en calquera dos dous abonda para amosar ao usuario.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir autocompletar o nome de usuario cando se introduce o nome completo ou o enderezo de correo-e ignorando a coincidencia da lista de teléfonos que falta e está no mesmo grupo",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Amosar o texto de exención de responsabilidade na páxina de envío de ligazóns publicas (amosarase só cando a lista de ficheiros estea agochada)",
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto amosarase na páxina de envío das ligazóns públicas cando a lista de ficheiros estea agochada.",
@@ -426,11 +422,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : " Se usa aplicacións de terceiros para conectarse a Nextcloud, asegúrese de crear e configurar un contrasinal de aplicación para cada unha antes de activar a autenticación de segundo factor.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Produciuse un erro. Envíe un certificado PEM codificado en ASCII.",
"Valid until {date}" : "Válido ata {date}",
- "Local" : "Local",
"Only visible to local users" : "Visíbel só para usuarios locais",
"Only visible to you" : "Visíbel só para vostede",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visíbel para usuarios locais e para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Vai ser sincronizado cun caderno de enderezos global e público",
"by" : "por",
"SSL Root Certificates" : "Certificados raíz SSL",
@@ -445,6 +441,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permitir autocompletar o nome de usuario na xanela de diálogo. Se esta opción está desactivada, debera escribirse o nome de usuario completo ou o enderezo de correo-e. ",
"Restrict username autocompletion to users within the same groups" : "Restrinxir o completado automático de nome de usuario a usuarios dentro dos mesmos grupos",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Amosar o texto de exención de responsabilidade na páxina de envío de ligazóns publicas. (Amosarase só cando a lista de ficheiros estea agochada.)",
+ "Don't synchronize to servers" : "Non sincronizar con servidores",
+ "Trusted" : "De confianza",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Permitir autocompletar o nome de usuario na xanela de diálogo (se esta opción está desactivada, debera escribirse o nome de usuario completo ou o enderezo de correo-e) "
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/gl.json b/apps/settings/l10n/gl.json
index 3a4e8e0a675..ccb72aa6e81 100644
--- a/apps/settings/l10n/gl.json
+++ b/apps/settings/l10n/gl.json
@@ -6,10 +6,8 @@
"Sending…" : "Enviando...",
"Email sent" : "Correo enviado",
"Private" : "Privado",
- "Don't synchronize to servers" : "Non sincronizar con servidores",
- "Trusted" : "De confianza",
+ "Local" : "Local",
"Only synchronize to trusted servers" : "Sincronizar só con servidores de confianza",
- "Public" : "Público",
"Synchronize to trusted servers and the global and public address book" : "Sincronizar con servidores de confianza e co caderno de enderezos global e público",
"Verify" : "Verificar",
"Verifying …" : "Verificando…",
@@ -378,8 +376,6 @@
"These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderán recibir comparticións, mais non inicialas.",
"Allow username autocompletion in share dialog" : "Permitir autocompletar o nome de usuario no diálogo de compartir",
"Allow username autocompletion to users within the same groups" : "Permitir autocompletar o nome de usuario aos usuarios dos mesmos grupos",
- "Allow username autocompletion to users based on phonebook matches" : "Permitir autocompletar o nome de usuario aos usuarios baseandose nas coincidencias da lista de teléfonos",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Se os autocompletados «mesmo grupo» e «coincidencias da lista de teléfonos» están activados, unha coincidencia en calquera dos dous abonda para amosar ao usuario.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir autocompletar o nome de usuario cando se introduce o nome completo ou o enderezo de correo-e ignorando a coincidencia da lista de teléfonos que falta e está no mesmo grupo",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Amosar o texto de exención de responsabilidade na páxina de envío de ligazóns publicas (amosarase só cando a lista de ficheiros estea agochada)",
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto amosarase na páxina de envío das ligazóns públicas cando a lista de ficheiros estea agochada.",
@@ -424,11 +420,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : " Se usa aplicacións de terceiros para conectarse a Nextcloud, asegúrese de crear e configurar un contrasinal de aplicación para cada unha antes de activar a autenticación de segundo factor.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Produciuse un erro. Envíe un certificado PEM codificado en ASCII.",
"Valid until {date}" : "Válido ata {date}",
- "Local" : "Local",
"Only visible to local users" : "Visíbel só para usuarios locais",
"Only visible to you" : "Visíbel só para vostede",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visíbel para usuarios locais e para servidores de confianza",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Vai ser sincronizado cun caderno de enderezos global e público",
"by" : "por",
"SSL Root Certificates" : "Certificados raíz SSL",
@@ -443,6 +439,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permitir autocompletar o nome de usuario na xanela de diálogo. Se esta opción está desactivada, debera escribirse o nome de usuario completo ou o enderezo de correo-e. ",
"Restrict username autocompletion to users within the same groups" : "Restrinxir o completado automático de nome de usuario a usuarios dentro dos mesmos grupos",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Amosar o texto de exención de responsabilidade na páxina de envío de ligazóns publicas. (Amosarase só cando a lista de ficheiros estea agochada.)",
+ "Don't synchronize to servers" : "Non sincronizar con servidores",
+ "Trusted" : "De confianza",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Permitir autocompletar o nome de usuario na xanela de diálogo (se esta opción está desactivada, debera escribirse o nome de usuario completo ou o enderezo de correo-e) "
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/he.js b/apps/settings/l10n/he.js
index 6d03df98963..297ee869298 100644
--- a/apps/settings/l10n/he.js
+++ b/apps/settings/l10n/he.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "בשליחה…",
"Email sent" : "הודעת הדואר האלקטרוני נשלחה",
"Private" : "פרטי",
- "Don't synchronize to servers" : "לא לסנכרן מול השרתים",
- "Trusted" : "מהימן",
+ "Local" : "מקומ",
"Only synchronize to trusted servers" : "לסנכרן מול שרתים מהימנים בלבד",
- "Public" : "ציבורי",
"Synchronize to trusted servers and the global and public address book" : "לסנכרן מול שרתים מהימנים וספר הכתובות הגלובלי והציבורי",
"Verify" : "אימות",
"Verifying …" : "מתבצע אימות…",
@@ -423,11 +421,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "אם משמשים אותך יישומי צד־שלישי להתחברות אל Nextcloud, נא לוודא יצירת והגדרת ססמה ליישומון לכל אחד מהם בטרם הפעלת אימות דו־שלבי.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "אירעה שגיאה. יש להעלות תעודת ASCII-encoded PEM.",
"Valid until {date}" : "בתוקף עד ל- {date}",
- "Local" : "מקומ",
"Only visible to local users" : "גלוי למשתמשים מקומיים בלבד",
"Only visible to you" : "גלוי רק לך",
"Contacts" : "אנשי קשר",
"Visible to local users and to trusted servers" : "גלוי למשתמשים מקומיים ולשרתים מהימנים",
+ "Public" : "ציבורי",
"Will be synced to a global and public address book" : "יסונכרן לספר כתובות גלובלי וציבורי",
"by" : "מאת",
"SSL Root Certificates" : "אישורי אבטחת SSL לנתיב יסוד",
@@ -442,6 +440,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "לאפשר השלמת שם משתמש אוטומטית בתיבת השיתוף. אם האפשרות הזו מושבתת יש להקליד את שם המשתמש או את כתובת הדוא״ל במלואם.",
"Restrict username autocompletion to users within the same groups" : "הגבלת השלמה אוטומטית של שמות משתמשים למשתמשים באותה הקבוצה.",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "הצגת טקסט ויתור בעמוד העלאת קישור ציבורי. (מופיע רק כאשר רשימת הקבצים מוסתרת.)",
+ "Don't synchronize to servers" : "לא לסנכרן מול השרתים",
+ "Trusted" : "מהימן",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "לאפשר השלמת שמות משתמשים בתיבת דו־שיח השיתוף (אם האפשרות מושבתת יש להקליד את שם המשתמש או את כתובת הדוא״ל המלאים)"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;");
diff --git a/apps/settings/l10n/he.json b/apps/settings/l10n/he.json
index 1811062eceb..ae46581ffd6 100644
--- a/apps/settings/l10n/he.json
+++ b/apps/settings/l10n/he.json
@@ -6,10 +6,8 @@
"Sending…" : "בשליחה…",
"Email sent" : "הודעת הדואר האלקטרוני נשלחה",
"Private" : "פרטי",
- "Don't synchronize to servers" : "לא לסנכרן מול השרתים",
- "Trusted" : "מהימן",
+ "Local" : "מקומ",
"Only synchronize to trusted servers" : "לסנכרן מול שרתים מהימנים בלבד",
- "Public" : "ציבורי",
"Synchronize to trusted servers and the global and public address book" : "לסנכרן מול שרתים מהימנים וספר הכתובות הגלובלי והציבורי",
"Verify" : "אימות",
"Verifying …" : "מתבצע אימות…",
@@ -421,11 +419,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "אם משמשים אותך יישומי צד־שלישי להתחברות אל Nextcloud, נא לוודא יצירת והגדרת ססמה ליישומון לכל אחד מהם בטרם הפעלת אימות דו־שלבי.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "אירעה שגיאה. יש להעלות תעודת ASCII-encoded PEM.",
"Valid until {date}" : "בתוקף עד ל- {date}",
- "Local" : "מקומ",
"Only visible to local users" : "גלוי למשתמשים מקומיים בלבד",
"Only visible to you" : "גלוי רק לך",
"Contacts" : "אנשי קשר",
"Visible to local users and to trusted servers" : "גלוי למשתמשים מקומיים ולשרתים מהימנים",
+ "Public" : "ציבורי",
"Will be synced to a global and public address book" : "יסונכרן לספר כתובות גלובלי וציבורי",
"by" : "מאת",
"SSL Root Certificates" : "אישורי אבטחת SSL לנתיב יסוד",
@@ -440,6 +438,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "לאפשר השלמת שם משתמש אוטומטית בתיבת השיתוף. אם האפשרות הזו מושבתת יש להקליד את שם המשתמש או את כתובת הדוא״ל במלואם.",
"Restrict username autocompletion to users within the same groups" : "הגבלת השלמה אוטומטית של שמות משתמשים למשתמשים באותה הקבוצה.",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "הצגת טקסט ויתור בעמוד העלאת קישור ציבורי. (מופיע רק כאשר רשימת הקבצים מוסתרת.)",
+ "Don't synchronize to servers" : "לא לסנכרן מול השרתים",
+ "Trusted" : "מהימן",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "לאפשר השלמת שמות משתמשים בתיבת דו־שיח השיתוף (אם האפשרות מושבתת יש להקליד את שם המשתמש או את כתובת הדוא״ל המלאים)"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"
} \ No newline at end of file
diff --git a/apps/settings/l10n/hr.js b/apps/settings/l10n/hr.js
index fff977a75d7..2ae6f4dfd26 100644
--- a/apps/settings/l10n/hr.js
+++ b/apps/settings/l10n/hr.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Slanje…",
"Email sent" : "E-pošta je poslana",
"Private" : "Privatno",
- "Don't synchronize to servers" : "Nemoj sinkronizirati s poslužiteljem",
- "Trusted" : "Pouzdan",
+ "Local" : "Lokalno",
"Only synchronize to trusted servers" : "Sinkroniziraj samo s pouzdanim poslužiteljima",
- "Public" : "Javna",
"Synchronize to trusted servers and the global and public address book" : "Sinkroniziraj s pouzdanim poslužiteljima i globalnim i javnim adresarom",
"Verify" : "Provjeri",
"Verifying …" : "Provjeravanje…",
@@ -417,11 +415,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Ako se za povezivanje s Nextcloudom koristite aplikacijama treće strane, stvorite i konfigurirajte lozinku za svaku aplikaciju prije omogućavanja drugog faktora za provođenje autentifikacije.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Došlo je do pogreške. Otpremite ASCII-kodiranu PEM vjerodajnicu.",
"Valid until {date}" : "Vrijedi do {date}",
- "Local" : "Lokalno",
"Only visible to local users" : "Vidljivo samo lokalnim korisnicima",
"Only visible to you" : "Vidljivo samo vama",
"Contacts" : "Kontakti",
"Visible to local users and to trusted servers" : "Vidljivo lokalnim korisnicima i pouzdanim poslužiteljima",
+ "Public" : "Javna",
"Will be synced to a global and public address book" : "Sinkronizirat će se s globalnim i javnim adresarom",
"by" : "od",
"SSL Root Certificates" : "Korijenske vjerodajnice SSL-a",
@@ -436,6 +434,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Dopusti automatsko dovršavanje korisničkog imena u dijaloškom okviru za dijeljenje. Ako je ova postavka onemogućena, potrebno je unijeti puno korisničko ime ili adresu e-pošte.",
"Restrict username autocompletion to users within the same groups" : "Ograniči automatsko dovršavanje korisničkog imena na korisnike iz istih grupa",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Prikaži tekst izjave o odricanju od odgovornosti na stranici za otpremanje javnih poveznica. (Prikazuje se samo kad je popis datoteka skriven.)",
+ "Don't synchronize to servers" : "Nemoj sinkronizirati s poslužiteljem",
+ "Trusted" : "Pouzdan",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Dopusti automatsko dovršavanje korisničkog imena u dijaloškom okviru za dijeljenje (ako je ova postavka onemogućena, potrebno je unijeti puno korisničko ime ili adresu e-pošte)"
},
"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
diff --git a/apps/settings/l10n/hr.json b/apps/settings/l10n/hr.json
index 1a9b1d7d7a6..3504b8fa4fe 100644
--- a/apps/settings/l10n/hr.json
+++ b/apps/settings/l10n/hr.json
@@ -6,10 +6,8 @@
"Sending…" : "Slanje…",
"Email sent" : "E-pošta je poslana",
"Private" : "Privatno",
- "Don't synchronize to servers" : "Nemoj sinkronizirati s poslužiteljem",
- "Trusted" : "Pouzdan",
+ "Local" : "Lokalno",
"Only synchronize to trusted servers" : "Sinkroniziraj samo s pouzdanim poslužiteljima",
- "Public" : "Javna",
"Synchronize to trusted servers and the global and public address book" : "Sinkroniziraj s pouzdanim poslužiteljima i globalnim i javnim adresarom",
"Verify" : "Provjeri",
"Verifying …" : "Provjeravanje…",
@@ -415,11 +413,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Ako se za povezivanje s Nextcloudom koristite aplikacijama treće strane, stvorite i konfigurirajte lozinku za svaku aplikaciju prije omogućavanja drugog faktora za provođenje autentifikacije.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Došlo je do pogreške. Otpremite ASCII-kodiranu PEM vjerodajnicu.",
"Valid until {date}" : "Vrijedi do {date}",
- "Local" : "Lokalno",
"Only visible to local users" : "Vidljivo samo lokalnim korisnicima",
"Only visible to you" : "Vidljivo samo vama",
"Contacts" : "Kontakti",
"Visible to local users and to trusted servers" : "Vidljivo lokalnim korisnicima i pouzdanim poslužiteljima",
+ "Public" : "Javna",
"Will be synced to a global and public address book" : "Sinkronizirat će se s globalnim i javnim adresarom",
"by" : "od",
"SSL Root Certificates" : "Korijenske vjerodajnice SSL-a",
@@ -434,6 +432,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Dopusti automatsko dovršavanje korisničkog imena u dijaloškom okviru za dijeljenje. Ako je ova postavka onemogućena, potrebno je unijeti puno korisničko ime ili adresu e-pošte.",
"Restrict username autocompletion to users within the same groups" : "Ograniči automatsko dovršavanje korisničkog imena na korisnike iz istih grupa",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Prikaži tekst izjave o odricanju od odgovornosti na stranici za otpremanje javnih poveznica. (Prikazuje se samo kad je popis datoteka skriven.)",
+ "Don't synchronize to servers" : "Nemoj sinkronizirati s poslužiteljem",
+ "Trusted" : "Pouzdan",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Dopusti automatsko dovršavanje korisničkog imena u dijaloškom okviru za dijeljenje (ako je ova postavka onemogućena, potrebno je unijeti puno korisničko ime ili adresu e-pošte)"
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/settings/l10n/hu.js b/apps/settings/l10n/hu.js
index 0e3c11bf3a9..413bf7898e2 100644
--- a/apps/settings/l10n/hu.js
+++ b/apps/settings/l10n/hu.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Küldés…",
"Email sent" : "E-mail elküldve",
"Private" : "Privát",
- "Don't synchronize to servers" : "Ne szinkronizáljon kiszolgálókkal",
- "Trusted" : "Megbízható",
+ "Local" : "Helyi",
"Only synchronize to trusted servers" : "Csak megbízható kiszolgálókkal szinkronizáljon",
- "Public" : "Nyilvános",
"Synchronize to trusted servers and the global and public address book" : "Szinkronizáljon megbízható kiszolgálókkal, valamint a globális és nyilvános címjegyzékkel",
"Verify" : "Ellenőrzés",
"Verifying …" : "Ellenőrzés…",
@@ -380,8 +378,6 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.",
"Allow username autocompletion in share dialog" : "A felhasználónév automatikus kiegészítésének engedélyezése a megosztás párbeszédpanelen ",
"Allow username autocompletion to users within the same groups" : "Engedélyezze a felhasználónév automatikus kiegészítését az azonos csoportokba tartozó felhasználók számára ",
- "Allow username autocompletion to users based on phonebook matches" : "Engedélyezze a felhasználóknak a felhasználónév automatikus kiegészítését a telefonkönyv-egyezések alapján ",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Ha az \"ugyanazon csoport\" és a \"telefonkönyv-egyezések\" automatikus kiegészítése engedélyezve van, akkor bármelyik egyezés elegendő a felhasználó megjelenítéséhez. ",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Engedélyezze a felhasználónév automatikus kiegészítését a teljes név vagy e-mail cím megadásakor (figyelmen kívül hagyva a hiányzó telefonkönyv-egyezést és az ugyanabba a csoportba tartozást) ",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Nyilatkozat szövegének megjelenítése a nyilvános feltöltési oldalon. (Csak akkor jelenik meg, ha fájl lista rejtett.)",
"This text will be shown on the public link upload page when the file list is hidden." : "Ez a szöveg jelenik meg a nyilvános feltöltési oldalon, amikor a fájl lista el van rejtve.",
@@ -426,11 +422,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Ha harmadik féltől származó alkalmazásokat használ a Nextcloudhoz való csatlakozáshoz, akkor a két faktoros hitelesítés engedélyezése előtt győződjön meg róla, hogy mindegyikhez létrehozott és konfigurált egy alkalmazás jelszót. ",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Hiba történt. Töltsön fel egy ASCII karakterekkel kódolt PEM-tanúsítványt.",
"Valid until {date}" : "Érvényes: {date}",
- "Local" : "Helyi",
"Only visible to local users" : "Csak a helyi felhasználók láthatják",
"Only visible to you" : "Csak Ön láthatja",
"Contacts" : "Névjegyek",
"Visible to local users and to trusted servers" : "Helyi felhasználók és megbízható kiszolgálók láthatják",
+ "Public" : "Nyilvános",
"Will be synced to a global and public address book" : "Globális és nyilvános címjegyzékekkel lesz szinkronizálva",
"by" : "által",
"SSL Root Certificates" : "SSL Root tanusítványok",
@@ -445,6 +441,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Felhasználónevek automatikus kiegészítésének engedélyezése a megosztási ablakban. Ha ki van kapcsolva, teljes felhasználóneveket vagy e-mail címeket kell begépelni.",
"Restrict username autocompletion to users within the same groups" : "Korlátozza a felhasználónevek automata kiegészítését azonos csoportokon belül",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Nyilatkozat szövegének megjelenítése a nyilvános feltöltési oldalon. (Csak akkor jelenik meg, ha fájl lista rejtett.)",
+ "Don't synchronize to servers" : "Ne szinkronizáljon kiszolgálókkal",
+ "Trusted" : "Megbízható",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Felhasználónevek automatikus kiegészítésének engedélyezése a megosztási ablakban. Ha ki van kapcsolva, teljes felhasználóneveket vagy e-mail címeket kell begépelni."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/hu.json b/apps/settings/l10n/hu.json
index 1577aa62771..08bb6b22856 100644
--- a/apps/settings/l10n/hu.json
+++ b/apps/settings/l10n/hu.json
@@ -6,10 +6,8 @@
"Sending…" : "Küldés…",
"Email sent" : "E-mail elküldve",
"Private" : "Privát",
- "Don't synchronize to servers" : "Ne szinkronizáljon kiszolgálókkal",
- "Trusted" : "Megbízható",
+ "Local" : "Helyi",
"Only synchronize to trusted servers" : "Csak megbízható kiszolgálókkal szinkronizáljon",
- "Public" : "Nyilvános",
"Synchronize to trusted servers and the global and public address book" : "Szinkronizáljon megbízható kiszolgálókkal, valamint a globális és nyilvános címjegyzékkel",
"Verify" : "Ellenőrzés",
"Verifying …" : "Ellenőrzés…",
@@ -378,8 +376,6 @@
"These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.",
"Allow username autocompletion in share dialog" : "A felhasználónév automatikus kiegészítésének engedélyezése a megosztás párbeszédpanelen ",
"Allow username autocompletion to users within the same groups" : "Engedélyezze a felhasználónév automatikus kiegészítését az azonos csoportokba tartozó felhasználók számára ",
- "Allow username autocompletion to users based on phonebook matches" : "Engedélyezze a felhasználóknak a felhasználónév automatikus kiegészítését a telefonkönyv-egyezések alapján ",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Ha az \"ugyanazon csoport\" és a \"telefonkönyv-egyezések\" automatikus kiegészítése engedélyezve van, akkor bármelyik egyezés elegendő a felhasználó megjelenítéséhez. ",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Engedélyezze a felhasználónév automatikus kiegészítését a teljes név vagy e-mail cím megadásakor (figyelmen kívül hagyva a hiányzó telefonkönyv-egyezést és az ugyanabba a csoportba tartozást) ",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Nyilatkozat szövegének megjelenítése a nyilvános feltöltési oldalon. (Csak akkor jelenik meg, ha fájl lista rejtett.)",
"This text will be shown on the public link upload page when the file list is hidden." : "Ez a szöveg jelenik meg a nyilvános feltöltési oldalon, amikor a fájl lista el van rejtve.",
@@ -424,11 +420,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Ha harmadik féltől származó alkalmazásokat használ a Nextcloudhoz való csatlakozáshoz, akkor a két faktoros hitelesítés engedélyezése előtt győződjön meg róla, hogy mindegyikhez létrehozott és konfigurált egy alkalmazás jelszót. ",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Hiba történt. Töltsön fel egy ASCII karakterekkel kódolt PEM-tanúsítványt.",
"Valid until {date}" : "Érvényes: {date}",
- "Local" : "Helyi",
"Only visible to local users" : "Csak a helyi felhasználók láthatják",
"Only visible to you" : "Csak Ön láthatja",
"Contacts" : "Névjegyek",
"Visible to local users and to trusted servers" : "Helyi felhasználók és megbízható kiszolgálók láthatják",
+ "Public" : "Nyilvános",
"Will be synced to a global and public address book" : "Globális és nyilvános címjegyzékekkel lesz szinkronizálva",
"by" : "által",
"SSL Root Certificates" : "SSL Root tanusítványok",
@@ -443,6 +439,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Felhasználónevek automatikus kiegészítésének engedélyezése a megosztási ablakban. Ha ki van kapcsolva, teljes felhasználóneveket vagy e-mail címeket kell begépelni.",
"Restrict username autocompletion to users within the same groups" : "Korlátozza a felhasználónevek automata kiegészítését azonos csoportokon belül",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Nyilatkozat szövegének megjelenítése a nyilvános feltöltési oldalon. (Csak akkor jelenik meg, ha fájl lista rejtett.)",
+ "Don't synchronize to servers" : "Ne szinkronizáljon kiszolgálókkal",
+ "Trusted" : "Megbízható",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Felhasználónevek automatikus kiegészítésének engedélyezése a megosztási ablakban. Ha ki van kapcsolva, teljes felhasználóneveket vagy e-mail címeket kell begépelni."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/ia.js b/apps/settings/l10n/ia.js
index e6f561cdbf7..150564e19fb 100644
--- a/apps/settings/l10n/ia.js
+++ b/apps/settings/l10n/ia.js
@@ -7,7 +7,7 @@ OC.L10N.register(
"Not saved" : "Non salveguardate",
"Email sent" : "Message de e-posta inviate",
"Private" : "Private",
- "Public" : "Public",
+ "Local" : "Local",
"Unable to change password" : "Impossibile cambiar contrasigno",
"Very weak password" : "Contrasigno multo debile",
"Weak password" : "Contrasigno debile",
@@ -140,11 +140,11 @@ OC.L10N.register(
"Change password" : "Cambiar contrasigno",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Un error occurreva. Per favor, incarga un certificato PEM codificate in ASCII",
"Valid until {date}" : "Valide usque {date}",
- "Local" : "Local",
"Only visible to local users" : "Solmente visibile a usatores local",
"Only visible to you" : "Solmente visibile a tu",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visibile a usatores local e a servitores fiduciari",
+ "Public" : "Public",
"by" : "per",
"SSL Root Certificates" : "Certificatos Root SSL",
"Common Name" : "Nomine Commun",
diff --git a/apps/settings/l10n/ia.json b/apps/settings/l10n/ia.json
index dd68b7ee9ce..f9744faedb4 100644
--- a/apps/settings/l10n/ia.json
+++ b/apps/settings/l10n/ia.json
@@ -5,7 +5,7 @@
"Not saved" : "Non salveguardate",
"Email sent" : "Message de e-posta inviate",
"Private" : "Private",
- "Public" : "Public",
+ "Local" : "Local",
"Unable to change password" : "Impossibile cambiar contrasigno",
"Very weak password" : "Contrasigno multo debile",
"Weak password" : "Contrasigno debile",
@@ -138,11 +138,11 @@
"Change password" : "Cambiar contrasigno",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Un error occurreva. Per favor, incarga un certificato PEM codificate in ASCII",
"Valid until {date}" : "Valide usque {date}",
- "Local" : "Local",
"Only visible to local users" : "Solmente visibile a usatores local",
"Only visible to you" : "Solmente visibile a tu",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visibile a usatores local e a servitores fiduciari",
+ "Public" : "Public",
"by" : "per",
"SSL Root Certificates" : "Certificatos Root SSL",
"Common Name" : "Nomine Commun",
diff --git a/apps/settings/l10n/id.js b/apps/settings/l10n/id.js
index 7011bebf614..06510436418 100644
--- a/apps/settings/l10n/id.js
+++ b/apps/settings/l10n/id.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Mengirim…",
"Email sent" : "Surel terkirim",
"Private" : "Pribadi",
- "Public" : "Publik",
+ "Local" : "Lokal",
"Verify" : "Verifikasi",
"Verifying …" : "Sedang memferivikasi …",
"Unable to change password" : "Tidak dapat mengubah kata sandi",
@@ -342,11 +342,11 @@ OC.L10N.register(
"Change password" : "Ubah kata sandi",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Terjadi kesalahan. Mohon unggah sertifikat PEM terenkode-ASCII.",
"Valid until {date}" : "Berlaku sampai {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Hanya terlihat untuk pengguna lokal saja",
"Only visible to you" : "Hanya terlihat untuk Anda saja",
"Contacts" : "Kontak",
"Visible to local users and to trusted servers" : "Terlihat untuk semua pengguna lokal dan server yang dipercaya",
+ "Public" : "Publik",
"Will be synced to a global and public address book" : "Akan disinkronisasikan ke buku alamat global dan publik",
"by" : "oleh",
"SSL Root Certificates" : "Sertifikat Root SSL",
diff --git a/apps/settings/l10n/id.json b/apps/settings/l10n/id.json
index 6e0b34d46de..bf7e62f5128 100644
--- a/apps/settings/l10n/id.json
+++ b/apps/settings/l10n/id.json
@@ -6,7 +6,7 @@
"Sending…" : "Mengirim…",
"Email sent" : "Surel terkirim",
"Private" : "Pribadi",
- "Public" : "Publik",
+ "Local" : "Lokal",
"Verify" : "Verifikasi",
"Verifying …" : "Sedang memferivikasi …",
"Unable to change password" : "Tidak dapat mengubah kata sandi",
@@ -340,11 +340,11 @@
"Change password" : "Ubah kata sandi",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Terjadi kesalahan. Mohon unggah sertifikat PEM terenkode-ASCII.",
"Valid until {date}" : "Berlaku sampai {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Hanya terlihat untuk pengguna lokal saja",
"Only visible to you" : "Hanya terlihat untuk Anda saja",
"Contacts" : "Kontak",
"Visible to local users and to trusted servers" : "Terlihat untuk semua pengguna lokal dan server yang dipercaya",
+ "Public" : "Publik",
"Will be synced to a global and public address book" : "Akan disinkronisasikan ke buku alamat global dan publik",
"by" : "oleh",
"SSL Root Certificates" : "Sertifikat Root SSL",
diff --git a/apps/settings/l10n/is.js b/apps/settings/l10n/is.js
index fac9a107b84..12d67bd42a0 100644
--- a/apps/settings/l10n/is.js
+++ b/apps/settings/l10n/is.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Sendi...",
"Email sent" : "Tölvupóstur sendur",
"Private" : "Einka",
- "Public" : "Opinbert",
+ "Local" : "Staðvært",
"Verify" : "Sannreyna",
"Verifying …" : "Sannreyni …",
"Unable to change password" : "Ekki tókst að breyta lykilorði",
@@ -376,11 +376,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Notaðu annað þrep til viðbótar lykilorðinu þínu til að auka öryggi notandaaðgangsins þíns.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Villa kom upp. Sendu inn ASCII-kóðað PEM-skilríki.",
"Valid until {date}" : "Gildir til {date}",
- "Local" : "Staðvært",
"Only visible to local users" : "Einungis sýnilegt staðværum notendum",
"Only visible to you" : "Einungis sýnilegt þér",
"Contacts" : "Tengiliðir",
"Visible to local users and to trusted servers" : "Sýnilegt staðværum notendum og á treystum þjónum",
+ "Public" : "Opinbert",
"Will be synced to a global and public address book" : "Verður samstillt víðværri og opinberri vistfangaskrá",
"by" : "af",
"SSL Root Certificates" : "SSL-rótarskilríki",
diff --git a/apps/settings/l10n/is.json b/apps/settings/l10n/is.json
index 3ad4f24aaa8..f0e2551966c 100644
--- a/apps/settings/l10n/is.json
+++ b/apps/settings/l10n/is.json
@@ -6,7 +6,7 @@
"Sending…" : "Sendi...",
"Email sent" : "Tölvupóstur sendur",
"Private" : "Einka",
- "Public" : "Opinbert",
+ "Local" : "Staðvært",
"Verify" : "Sannreyna",
"Verifying …" : "Sannreyni …",
"Unable to change password" : "Ekki tókst að breyta lykilorði",
@@ -374,11 +374,11 @@
"Use a second factor besides your password to increase security for your account." : "Notaðu annað þrep til viðbótar lykilorðinu þínu til að auka öryggi notandaaðgangsins þíns.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Villa kom upp. Sendu inn ASCII-kóðað PEM-skilríki.",
"Valid until {date}" : "Gildir til {date}",
- "Local" : "Staðvært",
"Only visible to local users" : "Einungis sýnilegt staðværum notendum",
"Only visible to you" : "Einungis sýnilegt þér",
"Contacts" : "Tengiliðir",
"Visible to local users and to trusted servers" : "Sýnilegt staðværum notendum og á treystum þjónum",
+ "Public" : "Opinbert",
"Will be synced to a global and public address book" : "Verður samstillt víðværri og opinberri vistfangaskrá",
"by" : "af",
"SSL Root Certificates" : "SSL-rótarskilríki",
diff --git a/apps/settings/l10n/it.js b/apps/settings/l10n/it.js
index 22d8bf01b57..e30bac31c33 100644
--- a/apps/settings/l10n/it.js
+++ b/apps/settings/l10n/it.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "Invio in corso...",
"Email sent" : "Email inviata",
"Private" : "Privato",
- "Don't synchronize to servers" : "Non sincronizzazione con i server",
- "Trusted" : "Affidabili",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Visibile solo alle persone trovate con l'integrazione del numero di telefono via Talk su mobile",
+ "Local" : "Locale",
+ "Only visible to people on this instance and guests" : "Visibile solo alle persone in questa istanza e agli ospiti",
+ "Federated" : "Federato",
"Only synchronize to trusted servers" : "Sincronizzazione solo con i server affidabili",
- "Public" : "Pubblico",
+ "Published" : "Pubblicato",
"Synchronize to trusted servers and the global and public address book" : "Sincronizza con server affidabili e la rubrica globale e pubblica",
"Verify" : "Verifica",
"Verifying …" : "Verifica in corso...",
@@ -370,14 +372,21 @@ OC.L10N.register(
"Expire after " : "Scadenza dopo",
"days" : "giorni",
"Enforce expiration date" : "Forza la data di scadenza",
+ "Allow users to share via link and emails" : "Consenti agli utenti di condividere tramite collegamento e email",
"Allow public uploads" : "Consenti caricamenti pubblici",
"Always ask for a password" : "Chiedi sempre una password",
"Enforce password protection" : "Imponi la protezione con password",
+ "Set default expiration date" : "Imposta data di scadenza predefinita",
"Allow resharing" : "Consenti la ri-condivisione",
"Allow sharing with groups" : "Consenti la condivisione con gruppi",
"Restrict users to only share with users in their groups" : "Limita gli utenti a condividere solo con gli utenti nei loro gruppi",
"Exclude groups from sharing" : "Escludi gruppi dalla condivisione",
"These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.",
+ "Allow username autocompletion in share dialog" : "Consenti il completamento del nome utente nella finestra di condivisione",
+ "Allow username autocompletion to users within the same groups" : "Consenti il completamento del nome utente agli utenti degli stessi gruppi",
+ "Allow username autocompletion to users based on phone number integration" : "Consenti il completamento del nome utente agli utenti basati sull'integrazione del numero di telefono",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se completamento di \"stesso gruppo\" e \"integrazione numero di telefono\" sono attivi, una corrispondenza in uno dei due è sufficiente per mostrare l'utente.",
+ "Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Consenti il completamento del nome utente inserendo il nome o l'indirizzo email (ignorando la mancanza in rubrica ed essendo nello stesso gruppo)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Mostra il testo della liberatoria sulla pagina di caricamento del collegamento pubblico (visualizzato solo quando l'elenco dei file è nascosto)",
"This text will be shown on the public link upload page when the file list is hidden." : "Questo testo sarà mostrato sulla pagina di caricamento del collegamento pubblico quando l'elenco dei file è nascosto.",
"Default share permissions" : "Permessi predefiniti di condivisione",
@@ -421,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Se utilizzi applicazioni di terze parti per connetterti a Nextcloud, assicurati di creare e configurare una password per ciascuna applicazione prima di abilitare l'autenticazione a due fattori.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Si è verificato un errore. Carica un certificato PEM codificato in ASCII.",
"Valid until {date}" : "Valido fino al {date}",
- "Local" : "Locale",
"Only visible to local users" : "Visibile solo agli utenti locali",
"Only visible to you" : "Visibile solo a te",
"Contacts" : "Contatti",
"Visible to local users and to trusted servers" : "Visibile agli utenti locali e ai server affidabili",
+ "Public" : "Pubblico",
"Will be synced to a global and public address book" : "Sarà sincronizzato con una rubrica globale e pubblica",
"by" : "di",
"SSL Root Certificates" : "Certificati radice SSL",
@@ -440,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Consenti il completamento del nome utente nella finestra di condivisione. Se è disabilitata, è necessario digitare il nome utente completo o l'indirizzo di posta.",
"Restrict username autocompletion to users within the same groups" : "Limita il completamento del nome utente agli utenti degli stessi gruppi",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostra il testo di liberatoria sulla pagina di caricamento del collegamento pubblico. (Mostrato solo quando l'elenco dei file è nascosto)",
+ "Don't synchronize to servers" : "Non sincronizzazione con i server",
+ "Trusted" : "Affidabili",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Consenti il completamento automatico del nome utente nella finestra di condivisione (se è disabilitata, è necessario inserire il nome utente completo o l'indirizzo di posta elettronica)"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/it.json b/apps/settings/l10n/it.json
index aeb613c663d..3ac8881626f 100644
--- a/apps/settings/l10n/it.json
+++ b/apps/settings/l10n/it.json
@@ -6,10 +6,12 @@
"Sending…" : "Invio in corso...",
"Email sent" : "Email inviata",
"Private" : "Privato",
- "Don't synchronize to servers" : "Non sincronizzazione con i server",
- "Trusted" : "Affidabili",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Visibile solo alle persone trovate con l'integrazione del numero di telefono via Talk su mobile",
+ "Local" : "Locale",
+ "Only visible to people on this instance and guests" : "Visibile solo alle persone in questa istanza e agli ospiti",
+ "Federated" : "Federato",
"Only synchronize to trusted servers" : "Sincronizzazione solo con i server affidabili",
- "Public" : "Pubblico",
+ "Published" : "Pubblicato",
"Synchronize to trusted servers and the global and public address book" : "Sincronizza con server affidabili e la rubrica globale e pubblica",
"Verify" : "Verifica",
"Verifying …" : "Verifica in corso...",
@@ -368,14 +370,21 @@
"Expire after " : "Scadenza dopo",
"days" : "giorni",
"Enforce expiration date" : "Forza la data di scadenza",
+ "Allow users to share via link and emails" : "Consenti agli utenti di condividere tramite collegamento e email",
"Allow public uploads" : "Consenti caricamenti pubblici",
"Always ask for a password" : "Chiedi sempre una password",
"Enforce password protection" : "Imponi la protezione con password",
+ "Set default expiration date" : "Imposta data di scadenza predefinita",
"Allow resharing" : "Consenti la ri-condivisione",
"Allow sharing with groups" : "Consenti la condivisione con gruppi",
"Restrict users to only share with users in their groups" : "Limita gli utenti a condividere solo con gli utenti nei loro gruppi",
"Exclude groups from sharing" : "Escludi gruppi dalla condivisione",
"These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.",
+ "Allow username autocompletion in share dialog" : "Consenti il completamento del nome utente nella finestra di condivisione",
+ "Allow username autocompletion to users within the same groups" : "Consenti il completamento del nome utente agli utenti degli stessi gruppi",
+ "Allow username autocompletion to users based on phone number integration" : "Consenti il completamento del nome utente agli utenti basati sull'integrazione del numero di telefono",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se completamento di \"stesso gruppo\" e \"integrazione numero di telefono\" sono attivi, una corrispondenza in uno dei due è sufficiente per mostrare l'utente.",
+ "Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Consenti il completamento del nome utente inserendo il nome o l'indirizzo email (ignorando la mancanza in rubrica ed essendo nello stesso gruppo)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Mostra il testo della liberatoria sulla pagina di caricamento del collegamento pubblico (visualizzato solo quando l'elenco dei file è nascosto)",
"This text will be shown on the public link upload page when the file list is hidden." : "Questo testo sarà mostrato sulla pagina di caricamento del collegamento pubblico quando l'elenco dei file è nascosto.",
"Default share permissions" : "Permessi predefiniti di condivisione",
@@ -419,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Se utilizzi applicazioni di terze parti per connetterti a Nextcloud, assicurati di creare e configurare una password per ciascuna applicazione prima di abilitare l'autenticazione a due fattori.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Si è verificato un errore. Carica un certificato PEM codificato in ASCII.",
"Valid until {date}" : "Valido fino al {date}",
- "Local" : "Locale",
"Only visible to local users" : "Visibile solo agli utenti locali",
"Only visible to you" : "Visibile solo a te",
"Contacts" : "Contatti",
"Visible to local users and to trusted servers" : "Visibile agli utenti locali e ai server affidabili",
+ "Public" : "Pubblico",
"Will be synced to a global and public address book" : "Sarà sincronizzato con una rubrica globale e pubblica",
"by" : "di",
"SSL Root Certificates" : "Certificati radice SSL",
@@ -438,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Consenti il completamento del nome utente nella finestra di condivisione. Se è disabilitata, è necessario digitare il nome utente completo o l'indirizzo di posta.",
"Restrict username autocompletion to users within the same groups" : "Limita il completamento del nome utente agli utenti degli stessi gruppi",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostra il testo di liberatoria sulla pagina di caricamento del collegamento pubblico. (Mostrato solo quando l'elenco dei file è nascosto)",
+ "Don't synchronize to servers" : "Non sincronizzazione con i server",
+ "Trusted" : "Affidabili",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Consenti il completamento automatico del nome utente nella finestra di condivisione (se è disabilitata, è necessario inserire il nome utente completo o l'indirizzo di posta elettronica)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/ja.js b/apps/settings/l10n/ja.js
index d2ce3de11e2..a58a4043960 100644
--- a/apps/settings/l10n/ja.js
+++ b/apps/settings/l10n/ja.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "送信中 …",
"Email sent" : "メールを送信しました",
"Private" : "非公開",
- "Don't synchronize to servers" : "サーバーと同期しない",
- "Trusted" : "信頼できる",
+ "Local" : "ローカル",
"Only synchronize to trusted servers" : "信頼できるサーバーのみと同期する",
- "Public" : "公開",
"Verify" : "検証",
"Verifying …" : "検証中",
"Unable to change password" : "パスワードを変更できません",
@@ -413,11 +411,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "アカウントのセキュリティを強化するには、パスワード以外に2番目の要素を使用してください。",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "エラーが発生しました。ASCIIコードのPEM証明書をアップロードしてください。",
"Valid until {date}" : "{date} まで有効",
- "Local" : "ローカル",
"Only visible to local users" : "ローカルユーザーのみ見れます",
"Only visible to you" : "あなたのみから見れます",
"Contacts" : "連絡先",
"Visible to local users and to trusted servers" : "ローカルユーザーと信頼できるサーバーから見れます",
+ "Public" : "公開",
"Will be synced to a global and public address book" : "グローバルなアドレス帳と公開アドレス帳に同期されます",
"by" : "by",
"SSL Root Certificates" : "SSLルート証明書",
@@ -431,6 +429,8 @@ OC.L10N.register(
"Set default expiration date for link shares" : "URL リンク共有のデフォルトの有効期限を設定する",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "共有ダイアログ中でユーザー名の自動補完を許可する。この設定が無効の場合、完全なユーザー名またはメールアドレスを入力する必要があります。",
"Restrict username autocompletion to users within the same groups" : "ユーザー名の自動補完を同じグループ内のユーザーに制限する",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "公開リンクのアップロードページに免責事項のテキストを表示する。 (ファイルリストが非表示のときのみ表示します)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "公開リンクのアップロードページに免責事項のテキストを表示する。 (ファイルリストが非表示のときのみ表示します)",
+ "Don't synchronize to servers" : "サーバーと同期しない",
+ "Trusted" : "信頼できる"
},
"nplurals=1; plural=0;");
diff --git a/apps/settings/l10n/ja.json b/apps/settings/l10n/ja.json
index 7814155077b..38c55cde069 100644
--- a/apps/settings/l10n/ja.json
+++ b/apps/settings/l10n/ja.json
@@ -6,10 +6,8 @@
"Sending…" : "送信中 …",
"Email sent" : "メールを送信しました",
"Private" : "非公開",
- "Don't synchronize to servers" : "サーバーと同期しない",
- "Trusted" : "信頼できる",
+ "Local" : "ローカル",
"Only synchronize to trusted servers" : "信頼できるサーバーのみと同期する",
- "Public" : "公開",
"Verify" : "検証",
"Verifying …" : "検証中",
"Unable to change password" : "パスワードを変更できません",
@@ -411,11 +409,11 @@
"Use a second factor besides your password to increase security for your account." : "アカウントのセキュリティを強化するには、パスワード以外に2番目の要素を使用してください。",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "エラーが発生しました。ASCIIコードのPEM証明書をアップロードしてください。",
"Valid until {date}" : "{date} まで有効",
- "Local" : "ローカル",
"Only visible to local users" : "ローカルユーザーのみ見れます",
"Only visible to you" : "あなたのみから見れます",
"Contacts" : "連絡先",
"Visible to local users and to trusted servers" : "ローカルユーザーと信頼できるサーバーから見れます",
+ "Public" : "公開",
"Will be synced to a global and public address book" : "グローバルなアドレス帳と公開アドレス帳に同期されます",
"by" : "by",
"SSL Root Certificates" : "SSLルート証明書",
@@ -429,6 +427,8 @@
"Set default expiration date for link shares" : "URL リンク共有のデフォルトの有効期限を設定する",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "共有ダイアログ中でユーザー名の自動補完を許可する。この設定が無効の場合、完全なユーザー名またはメールアドレスを入力する必要があります。",
"Restrict username autocompletion to users within the same groups" : "ユーザー名の自動補完を同じグループ内のユーザーに制限する",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "公開リンクのアップロードページに免責事項のテキストを表示する。 (ファイルリストが非表示のときのみ表示します)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "公開リンクのアップロードページに免責事項のテキストを表示する。 (ファイルリストが非表示のときのみ表示します)",
+ "Don't synchronize to servers" : "サーバーと同期しない",
+ "Trusted" : "信頼できる"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/settings/l10n/ka_GE.js b/apps/settings/l10n/ka_GE.js
index a438b14d88e..b613839a540 100644
--- a/apps/settings/l10n/ka_GE.js
+++ b/apps/settings/l10n/ka_GE.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "იგზავნება…",
"Email sent" : "ელ-წერილი გაიგზავნა",
"Private" : "პირადი",
- "Public" : "ღია",
+ "Local" : "ლოკალური",
"Verify" : "დამოწმება",
"Verifying …" : "მოწმდება …",
"Unable to change password" : "პაროლის ცვილება შეუძლებელია",
@@ -263,11 +263,11 @@ OC.L10N.register(
"Change password" : "პაროლის შეცვლა",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "წარმოიქმნა შეცდომა. გთხოვთ ატვირთოთ ASCII-თ კოდირებული PEM სერტიფიკატი.",
"Valid until {date}" : "ვარგისია {date}-მდე",
- "Local" : "ლოკალური",
"Only visible to local users" : "გამოჩნდება მხოლოდ ლოკალურ მომხმარებლებთან",
"Only visible to you" : "გამოჩნდება მხოლოდ თქვენთან",
"Contacts" : "კონტაქტები",
"Visible to local users and to trusted servers" : "გამოჩნდება ლოკალურ მომხმარებლებთან და სანდო სერვერებთან",
+ "Public" : "ღია",
"Will be synced to a global and public address book" : "სინქრონიზაცია მოხდება გლობალურ და ღია მისამართების წიგნში",
"by" : "სუბიექტი:",
"SSL Root Certificates" : "SSL Root სერტიფიკატები",
diff --git a/apps/settings/l10n/ka_GE.json b/apps/settings/l10n/ka_GE.json
index 9f48dfd9442..4ea655ce9d7 100644
--- a/apps/settings/l10n/ka_GE.json
+++ b/apps/settings/l10n/ka_GE.json
@@ -6,7 +6,7 @@
"Sending…" : "იგზავნება…",
"Email sent" : "ელ-წერილი გაიგზავნა",
"Private" : "პირადი",
- "Public" : "ღია",
+ "Local" : "ლოკალური",
"Verify" : "დამოწმება",
"Verifying …" : "მოწმდება …",
"Unable to change password" : "პაროლის ცვილება შეუძლებელია",
@@ -261,11 +261,11 @@
"Change password" : "პაროლის შეცვლა",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "წარმოიქმნა შეცდომა. გთხოვთ ატვირთოთ ASCII-თ კოდირებული PEM სერტიფიკატი.",
"Valid until {date}" : "ვარგისია {date}-მდე",
- "Local" : "ლოკალური",
"Only visible to local users" : "გამოჩნდება მხოლოდ ლოკალურ მომხმარებლებთან",
"Only visible to you" : "გამოჩნდება მხოლოდ თქვენთან",
"Contacts" : "კონტაქტები",
"Visible to local users and to trusted servers" : "გამოჩნდება ლოკალურ მომხმარებლებთან და სანდო სერვერებთან",
+ "Public" : "ღია",
"Will be synced to a global and public address book" : "სინქრონიზაცია მოხდება გლობალურ და ღია მისამართების წიგნში",
"by" : "სუბიექტი:",
"SSL Root Certificates" : "SSL Root სერტიფიკატები",
diff --git a/apps/settings/l10n/ko.js b/apps/settings/l10n/ko.js
index c9e475fc2a8..9f61ad0fcdf 100644
--- a/apps/settings/l10n/ko.js
+++ b/apps/settings/l10n/ko.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "보내는 중…",
"Email sent" : "이메일 보냄",
"Private" : "개인",
- "Public" : "공개",
+ "Local" : "로컬",
"Verify" : "확인",
"Verifying …" : "확인 중 …",
"Unable to change password" : "암호를 변경할 수 없음",
@@ -344,11 +344,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "사용자의 계정을 더욱 안전하게 보호하기 위해 암호와 함께 2단계 인증을 사용하세요.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "오류가 발생했습니다. ASCII로 인코딩된 PEM 인증서를 업로드하십시오.",
"Valid until {date}" : "{date}까지 유효함",
- "Local" : "로컬",
"Only visible to local users" : "로컬 사용자만 보임",
"Only visible to you" : "나만 보임",
"Contacts" : "연락처",
"Visible to local users and to trusted servers" : "로컬 사용자와 신뢰된 서버에게 보이기",
+ "Public" : "공개",
"Will be synced to a global and public address book" : "공개 및 전역 주소록으로 동기화됨",
"by" : "by",
"SSL Root Certificates" : "SSL 루트 인증서",
diff --git a/apps/settings/l10n/ko.json b/apps/settings/l10n/ko.json
index b73f698b997..45b255d36da 100644
--- a/apps/settings/l10n/ko.json
+++ b/apps/settings/l10n/ko.json
@@ -6,7 +6,7 @@
"Sending…" : "보내는 중…",
"Email sent" : "이메일 보냄",
"Private" : "개인",
- "Public" : "공개",
+ "Local" : "로컬",
"Verify" : "확인",
"Verifying …" : "확인 중 …",
"Unable to change password" : "암호를 변경할 수 없음",
@@ -342,11 +342,11 @@
"Use a second factor besides your password to increase security for your account." : "사용자의 계정을 더욱 안전하게 보호하기 위해 암호와 함께 2단계 인증을 사용하세요.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "오류가 발생했습니다. ASCII로 인코딩된 PEM 인증서를 업로드하십시오.",
"Valid until {date}" : "{date}까지 유효함",
- "Local" : "로컬",
"Only visible to local users" : "로컬 사용자만 보임",
"Only visible to you" : "나만 보임",
"Contacts" : "연락처",
"Visible to local users and to trusted servers" : "로컬 사용자와 신뢰된 서버에게 보이기",
+ "Public" : "공개",
"Will be synced to a global and public address book" : "공개 및 전역 주소록으로 동기화됨",
"by" : "by",
"SSL Root Certificates" : "SSL 루트 인증서",
diff --git a/apps/settings/l10n/lt_LT.js b/apps/settings/l10n/lt_LT.js
index f1d75317be3..0b46890ec54 100644
--- a/apps/settings/l10n/lt_LT.js
+++ b/apps/settings/l10n/lt_LT.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Siunčiama…",
"Email sent" : "El. paštas išsiųstas",
"Private" : "Privatu",
- "Don't synchronize to servers" : "Nesinchronizuoti į serverius",
- "Trusted" : "Patikimas",
+ "Local" : "Vietinis",
"Only synchronize to trusted servers" : "Sinchronizuoti tik į patikimus serverius",
- "Public" : "Vieša",
"Synchronize to trusted servers and the global and public address book" : "Sinchronizuoti į patikimus serverius ir į visuotinę bei viešą adresų knygą",
"Verify" : "Patikrinti",
"Verifying …" : "Tikrinama...",
@@ -75,6 +73,7 @@ OC.L10N.register(
"Email could not be sent. Check your mail server log" : "El. laiškas nebuvo išsiųstas. Peržiūrėkite savo pašto serverio žurnalą.",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Siunčiant el. laišką atsirado problemų. Peržiūrėkite savo nustatymus. (Klaida: %s)",
"You need to set your user email before being able to send test emails." : "Prieš galėdami siųsti bandomuosius el. laiškus, turite nusistatyti savo naudotojo el. paštą.",
+ "Invalid user" : "Neteisingas naudotojas",
"Invalid mail address" : "Neteisingas pašto adresas",
"Settings saved" : "Nustatymai įrašyti",
"Unable to change full name" : "Nepavyko pakeisti vardo ir pavardės",
@@ -408,11 +407,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Be savo slaptažodžio naudokite ir antrąjį faktorių, kad padidintumėte savo paskyros saugumą.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Įvyko klaida. Įkelkite ASCII koduotą PEM liudijimą.",
"Valid until {date}" : "Galioja iki {date}",
- "Local" : "Vietinis",
"Only visible to local users" : "Matoma tik vietiniams naudotojams",
"Only visible to you" : "Matoma tik jums",
"Contacts" : "Adresatai",
"Visible to local users and to trusted servers" : "Matoma tik vietiniams naudotojams ir patikimiems serveriams",
+ "Public" : "Vieša",
"Will be synced to a global and public address book" : "Bus sinchronizuota į visuotinę ir viešą adresų knygą",
"by" : "pagal",
"SSL Root Certificates" : "SSL šakniniai sertifikatai",
@@ -427,6 +426,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Leisti bendrinimo dialoge automatinį naudotojo vardų užbaigimą. Jeigu tai išjungta, reikės įvesti pilną naudotojo vardą ar el. pašto adresą.",
"Restrict username autocompletion to users within the same groups" : "Apriboti naudotojo vardo automatinį užbaigimą kitiems tų pačių grupių naudotojams",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Rodyti atsakomybės ribojimo tekstą įkėlimo per viešąją nuorodą puslapyje. (Rodomas tik tada, kai failų sąrašas yra paslėptas.)",
+ "Don't synchronize to servers" : "Nesinchronizuoti į serverius",
+ "Trusted" : "Patikimas",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Leisti bendrinimo dialoge automatinį naudotojo vardų užbaigimą (jeigu tai išjungta, reikės įvesti pilną naudotojo vardą ar el. pašto adresą)"
},
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");
diff --git a/apps/settings/l10n/lt_LT.json b/apps/settings/l10n/lt_LT.json
index 132f1fd41df..74145a60d59 100644
--- a/apps/settings/l10n/lt_LT.json
+++ b/apps/settings/l10n/lt_LT.json
@@ -6,10 +6,8 @@
"Sending…" : "Siunčiama…",
"Email sent" : "El. paštas išsiųstas",
"Private" : "Privatu",
- "Don't synchronize to servers" : "Nesinchronizuoti į serverius",
- "Trusted" : "Patikimas",
+ "Local" : "Vietinis",
"Only synchronize to trusted servers" : "Sinchronizuoti tik į patikimus serverius",
- "Public" : "Vieša",
"Synchronize to trusted servers and the global and public address book" : "Sinchronizuoti į patikimus serverius ir į visuotinę bei viešą adresų knygą",
"Verify" : "Patikrinti",
"Verifying …" : "Tikrinama...",
@@ -73,6 +71,7 @@
"Email could not be sent. Check your mail server log" : "El. laiškas nebuvo išsiųstas. Peržiūrėkite savo pašto serverio žurnalą.",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Siunčiant el. laišką atsirado problemų. Peržiūrėkite savo nustatymus. (Klaida: %s)",
"You need to set your user email before being able to send test emails." : "Prieš galėdami siųsti bandomuosius el. laiškus, turite nusistatyti savo naudotojo el. paštą.",
+ "Invalid user" : "Neteisingas naudotojas",
"Invalid mail address" : "Neteisingas pašto adresas",
"Settings saved" : "Nustatymai įrašyti",
"Unable to change full name" : "Nepavyko pakeisti vardo ir pavardės",
@@ -406,11 +405,11 @@
"Use a second factor besides your password to increase security for your account." : "Be savo slaptažodžio naudokite ir antrąjį faktorių, kad padidintumėte savo paskyros saugumą.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Įvyko klaida. Įkelkite ASCII koduotą PEM liudijimą.",
"Valid until {date}" : "Galioja iki {date}",
- "Local" : "Vietinis",
"Only visible to local users" : "Matoma tik vietiniams naudotojams",
"Only visible to you" : "Matoma tik jums",
"Contacts" : "Adresatai",
"Visible to local users and to trusted servers" : "Matoma tik vietiniams naudotojams ir patikimiems serveriams",
+ "Public" : "Vieša",
"Will be synced to a global and public address book" : "Bus sinchronizuota į visuotinę ir viešą adresų knygą",
"by" : "pagal",
"SSL Root Certificates" : "SSL šakniniai sertifikatai",
@@ -425,6 +424,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Leisti bendrinimo dialoge automatinį naudotojo vardų užbaigimą. Jeigu tai išjungta, reikės įvesti pilną naudotojo vardą ar el. pašto adresą.",
"Restrict username autocompletion to users within the same groups" : "Apriboti naudotojo vardo automatinį užbaigimą kitiems tų pačių grupių naudotojams",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Rodyti atsakomybės ribojimo tekstą įkėlimo per viešąją nuorodą puslapyje. (Rodomas tik tada, kai failų sąrašas yra paslėptas.)",
+ "Don't synchronize to servers" : "Nesinchronizuoti į serverius",
+ "Trusted" : "Patikimas",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Leisti bendrinimo dialoge automatinį naudotojo vardų užbaigimą (jeigu tai išjungta, reikės įvesti pilną naudotojo vardą ar el. pašto adresą)"
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/lv.js b/apps/settings/l10n/lv.js
index a67e7a30662..bcfa055947b 100644
--- a/apps/settings/l10n/lv.js
+++ b/apps/settings/l10n/lv.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Sūta …",
"Email sent" : "Vēstule nosūtīta",
"Private" : "Privāts",
- "Public" : "Publisks",
+ "Local" : "Lokāls",
"Verify" : "Verificēt",
"Unable to change password" : "Nav iespējams nomainīt paroli",
"Very weak password" : "Ļoti vāja parole",
@@ -174,11 +174,11 @@ OC.L10N.register(
"New password" : "Jauna parole",
"Change password" : "Mainīt paroli",
"Valid until {date}" : "Valīds līdz {date}",
- "Local" : "Lokāls",
"Only visible to local users" : "Redzami tikai lokālajiem lietotājiem",
"Only visible to you" : "Redzams tikai jums",
"Contacts" : "Kontakti",
"Visible to local users and to trusted servers" : "Redzama uz vietējiem lietotājiem un uzticamiem serveriem",
+ "Public" : "Publisks",
"Will be synced to a global and public address book" : "Tiks sinhronizēts ar globālu un publisku adrešu grāmatu",
"by" : "līdz",
"SSL Root Certificates" : "SSL Root Sertifikāti",
diff --git a/apps/settings/l10n/lv.json b/apps/settings/l10n/lv.json
index 8d26377ea16..54755582127 100644
--- a/apps/settings/l10n/lv.json
+++ b/apps/settings/l10n/lv.json
@@ -6,7 +6,7 @@
"Sending…" : "Sūta …",
"Email sent" : "Vēstule nosūtīta",
"Private" : "Privāts",
- "Public" : "Publisks",
+ "Local" : "Lokāls",
"Verify" : "Verificēt",
"Unable to change password" : "Nav iespējams nomainīt paroli",
"Very weak password" : "Ļoti vāja parole",
@@ -172,11 +172,11 @@
"New password" : "Jauna parole",
"Change password" : "Mainīt paroli",
"Valid until {date}" : "Valīds līdz {date}",
- "Local" : "Lokāls",
"Only visible to local users" : "Redzami tikai lokālajiem lietotājiem",
"Only visible to you" : "Redzams tikai jums",
"Contacts" : "Kontakti",
"Visible to local users and to trusted servers" : "Redzama uz vietējiem lietotājiem un uzticamiem serveriem",
+ "Public" : "Publisks",
"Will be synced to a global and public address book" : "Tiks sinhronizēts ar globālu un publisku adrešu grāmatu",
"by" : "līdz",
"SSL Root Certificates" : "SSL Root Sertifikāti",
diff --git a/apps/settings/l10n/mk.js b/apps/settings/l10n/mk.js
index 3ca0d2085fa..8e20e4936e7 100644
--- a/apps/settings/l10n/mk.js
+++ b/apps/settings/l10n/mk.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Испраќа…",
"Email sent" : "Е-порака пратена",
"Private" : "Приватност",
- "Don't synchronize to servers" : "Не синхронизирај со сервери",
- "Trusted" : "Доверлив",
+ "Local" : "Локално",
"Only synchronize to trusted servers" : "Синхронизирај само со доверливи сервери",
- "Public" : "Јавно",
"Synchronize to trusted servers and the global and public address book" : "Синхронизирај само со доверливи сервери и со глобални и јавни адресари",
"Verify" : "Потврди",
"Verifying …" : "Потврдување …",
@@ -420,11 +418,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Доколку користите друга апликација за поврзување на Nextcloud, осигурајте се дека имате креирано лозинка за секоја апликација пред да овозможите втор фактор.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Настана грешка. Ве молиме прикачете го PEM сертификатот во ASCII-кодна форма.",
"Valid until {date}" : "Валидно до {date}",
- "Local" : "Локално",
"Only visible to local users" : "Видливо само за локални корисници",
"Only visible to you" : "Видливо само за вас",
"Contacts" : "Контакти",
"Visible to local users and to trusted servers" : "Видливо за локални корисници и доверливи сервери.",
+ "Public" : "Јавно",
"Will be synced to a global and public address book" : "Ќе биде синхронизирано на глобалниот и јавниот адресар",
"by" : "од",
"SSL Root Certificates" : "SSL Root сертификати",
@@ -439,6 +437,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Дозволи автоматско комплетирање во лентата за споделување. Доколку ова е оневозможено потребно е да се внесе целосно корисничко име или адреса на е-пошта.",
"Restrict username autocompletion to users within the same groups" : "Ограничи ги корисниците од одредени групи за автоматско комплетирање",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Покажете го текстот за одрекување од одговорност на страницата за поставување јавен линк. (Се прикажува само кога листата со датотеки е скриена.)",
+ "Don't synchronize to servers" : "Не синхронизирај со сервери",
+ "Trusted" : "Доверлив",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Дозволи автоматско комплетирање во лентата за споделување. (Доколку ова е оневозможено потребно е да се внесе целосно корисничко име или адреса на е-пошта)"
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
diff --git a/apps/settings/l10n/mk.json b/apps/settings/l10n/mk.json
index 615d292ce86..a2404148189 100644
--- a/apps/settings/l10n/mk.json
+++ b/apps/settings/l10n/mk.json
@@ -6,10 +6,8 @@
"Sending…" : "Испраќа…",
"Email sent" : "Е-порака пратена",
"Private" : "Приватност",
- "Don't synchronize to servers" : "Не синхронизирај со сервери",
- "Trusted" : "Доверлив",
+ "Local" : "Локално",
"Only synchronize to trusted servers" : "Синхронизирај само со доверливи сервери",
- "Public" : "Јавно",
"Synchronize to trusted servers and the global and public address book" : "Синхронизирај само со доверливи сервери и со глобални и јавни адресари",
"Verify" : "Потврди",
"Verifying …" : "Потврдување …",
@@ -418,11 +416,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Доколку користите друга апликација за поврзување на Nextcloud, осигурајте се дека имате креирано лозинка за секоја апликација пред да овозможите втор фактор.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Настана грешка. Ве молиме прикачете го PEM сертификатот во ASCII-кодна форма.",
"Valid until {date}" : "Валидно до {date}",
- "Local" : "Локално",
"Only visible to local users" : "Видливо само за локални корисници",
"Only visible to you" : "Видливо само за вас",
"Contacts" : "Контакти",
"Visible to local users and to trusted servers" : "Видливо за локални корисници и доверливи сервери.",
+ "Public" : "Јавно",
"Will be synced to a global and public address book" : "Ќе биде синхронизирано на глобалниот и јавниот адресар",
"by" : "од",
"SSL Root Certificates" : "SSL Root сертификати",
@@ -437,6 +435,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Дозволи автоматско комплетирање во лентата за споделување. Доколку ова е оневозможено потребно е да се внесе целосно корисничко име или адреса на е-пошта.",
"Restrict username autocompletion to users within the same groups" : "Ограничи ги корисниците од одредени групи за автоматско комплетирање",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Покажете го текстот за одрекување од одговорност на страницата за поставување јавен линк. (Се прикажува само кога листата со датотеки е скриена.)",
+ "Don't synchronize to servers" : "Не синхронизирај со сервери",
+ "Trusted" : "Доверлив",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Дозволи автоматско комплетирање во лентата за споделување. (Доколку ова е оневозможено потребно е да се внесе целосно корисничко име или адреса на е-пошта)"
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
} \ No newline at end of file
diff --git a/apps/settings/l10n/mn.js b/apps/settings/l10n/mn.js
index aa10f0ac2ce..9db175154be 100644
--- a/apps/settings/l10n/mn.js
+++ b/apps/settings/l10n/mn.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Saved" : "Хадгалагдсан",
"Sending…" : "Илгээх...",
"Private" : "Далд",
- "Public" : "Нийтийн",
"Verify" : "Шалнгах",
"Unable to change password" : "Нууц үг солих боломжгүй",
"Very weak password" : "маш муу нууц үг",
@@ -106,6 +105,7 @@ OC.L10N.register(
"Current password" : "Одоогийн нууц үг",
"New password" : "Шинэ нууц үг",
"Change password" : "Нууц үг солих",
- "Contacts" : "Харилцагчид"
+ "Contacts" : "Харилцагчид",
+ "Public" : "Нийтийн"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/mn.json b/apps/settings/l10n/mn.json
index 1e2a778db9a..6b380a09cb1 100644
--- a/apps/settings/l10n/mn.json
+++ b/apps/settings/l10n/mn.json
@@ -2,7 +2,6 @@
"Saved" : "Хадгалагдсан",
"Sending…" : "Илгээх...",
"Private" : "Далд",
- "Public" : "Нийтийн",
"Verify" : "Шалнгах",
"Unable to change password" : "Нууц үг солих боломжгүй",
"Very weak password" : "маш муу нууц үг",
@@ -104,6 +103,7 @@
"Current password" : "Одоогийн нууц үг",
"New password" : "Шинэ нууц үг",
"Change password" : "Нууц үг солих",
- "Contacts" : "Харилцагчид"
+ "Contacts" : "Харилцагчид",
+ "Public" : "Нийтийн"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/nb.js b/apps/settings/l10n/nb.js
index cc5d732d445..13b22fea567 100644
--- a/apps/settings/l10n/nb.js
+++ b/apps/settings/l10n/nb.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Sender…",
"Email sent" : "E-post sendt",
"Private" : "Privat",
- "Don't synchronize to servers" : "Ikke synkroniser til servere",
- "Trusted" : "Betrodd",
+ "Local" : "Lokal",
"Only synchronize to trusted servers" : "Synkroniser kun til betrodde servere",
- "Public" : "Offentlig",
"Synchronize to trusted servers and the global and public address book" : "Synkroniser til betrodde servere og den globale og offentlige adresseboken",
"Verify" : "Bekreft",
"Verifying …" : "Bekrefter…",
@@ -376,11 +374,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Bruk en annen faktor i tillegg til passordet ditt for å øke sikkerheten for kontoen din.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Last opp et ASCII-kodet PEM-sertifikat.",
"Valid until {date}" : "Gyldig til {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Kun synlig for lokale brukere",
"Only visible to you" : "Kun synlig for deg",
"Contacts" : "Kontakter",
"Visible to local users and to trusted servers" : "Synlig for lokale brukere og klarerte servere",
+ "Public" : "Offentlig",
"Will be synced to a global and public address book" : "Vil blir synkronisert til global og offentlig addressbok",
"by" : "av",
"SSL Root Certificates" : "SSL-rotsertifikater",
@@ -392,6 +390,8 @@ OC.L10N.register(
"Execute one task with each page loaded" : "Utfør en oppgave med hver side som blir lastet",
"Allow users to share via link" : "Tillat brukere å dele via lenke",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Tillat automatisk fullføring i delingsdialogvindu. Dette kan skrus av hvis hele brukernavnet eller e-postadressen må skrives inn.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Vis ansvarsfraskrivelse på den offentlige opplastingssiden. (Vises kun nå fillisten er tom.)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Vis ansvarsfraskrivelse på den offentlige opplastingssiden. (Vises kun nå fillisten er tom.)",
+ "Don't synchronize to servers" : "Ikke synkroniser til servere",
+ "Trusted" : "Betrodd"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/nb.json b/apps/settings/l10n/nb.json
index 49d2d9473ce..8cd0f456f97 100644
--- a/apps/settings/l10n/nb.json
+++ b/apps/settings/l10n/nb.json
@@ -6,10 +6,8 @@
"Sending…" : "Sender…",
"Email sent" : "E-post sendt",
"Private" : "Privat",
- "Don't synchronize to servers" : "Ikke synkroniser til servere",
- "Trusted" : "Betrodd",
+ "Local" : "Lokal",
"Only synchronize to trusted servers" : "Synkroniser kun til betrodde servere",
- "Public" : "Offentlig",
"Synchronize to trusted servers and the global and public address book" : "Synkroniser til betrodde servere og den globale og offentlige adresseboken",
"Verify" : "Bekreft",
"Verifying …" : "Bekrefter…",
@@ -374,11 +372,11 @@
"Use a second factor besides your password to increase security for your account." : "Bruk en annen faktor i tillegg til passordet ditt for å øke sikkerheten for kontoen din.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Last opp et ASCII-kodet PEM-sertifikat.",
"Valid until {date}" : "Gyldig til {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Kun synlig for lokale brukere",
"Only visible to you" : "Kun synlig for deg",
"Contacts" : "Kontakter",
"Visible to local users and to trusted servers" : "Synlig for lokale brukere og klarerte servere",
+ "Public" : "Offentlig",
"Will be synced to a global and public address book" : "Vil blir synkronisert til global og offentlig addressbok",
"by" : "av",
"SSL Root Certificates" : "SSL-rotsertifikater",
@@ -390,6 +388,8 @@
"Execute one task with each page loaded" : "Utfør en oppgave med hver side som blir lastet",
"Allow users to share via link" : "Tillat brukere å dele via lenke",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Tillat automatisk fullføring i delingsdialogvindu. Dette kan skrus av hvis hele brukernavnet eller e-postadressen må skrives inn.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Vis ansvarsfraskrivelse på den offentlige opplastingssiden. (Vises kun nå fillisten er tom.)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Vis ansvarsfraskrivelse på den offentlige opplastingssiden. (Vises kun nå fillisten er tom.)",
+ "Don't synchronize to servers" : "Ikke synkroniser til servere",
+ "Trusted" : "Betrodd"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/nl.js b/apps/settings/l10n/nl.js
index 2c75afad4d3..767b49e3dc7 100644
--- a/apps/settings/l10n/nl.js
+++ b/apps/settings/l10n/nl.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "Versturen...",
"Email sent" : "E-mail verzonden",
"Private" : "Privé",
- "Don't synchronize to servers" : "Niet synchroniseren met de servers",
- "Trusted" : "Vertrouwd",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Alleen zichtbaar voor mensen die via telefoonnummerintegratie gematcht zijn voor Talk op mobiel",
+ "Local" : "Lokaal",
+ "Only visible to people on this instance and guests" : "Alleen zichtbaar voor gebruikers op deze server en gasten",
+ "Federated" : "Gefedereerd",
"Only synchronize to trusted servers" : "Alleen synchroniseren met vertrouwde servers",
- "Public" : "Openbaar",
+ "Published" : "Gepubliceerd",
"Synchronize to trusted servers and the global and public address book" : "Synchroniseren met vertrouwde servers en het wereldwijde en openbare adresboek",
"Verify" : "Verifiëren",
"Verifying …" : "Verifiëren...",
@@ -382,8 +384,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Deze groepen kunnen gedeelde mappen en bestanden ontvangen, maar kunnen zelf niks delen.",
"Allow username autocompletion in share dialog" : "Automatisch aanvullen gebruikersnamen binnen deeldialoog toegestaan",
"Allow username autocompletion to users within the same groups" : "Automatisch aanvullen van gebruikersnamen voor de gebruikers binnen dezelfde groepen toegestaan",
- "Allow username autocompletion to users based on phonebook matches" : "Toestaan automatisch aanvullen van gebruikersnamen gebaseerd op telefoonboek",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Als automatisch aanvullen \"dezelfde groep\" en \"telefoonboekovereenkomsten\" zijn ingeschakeld, is een overeenkomst in een van beide voldoende om de gebruiker te tonen.",
+ "Allow username autocompletion to users based on phone number integration" : "Toestaan automatisch aanvullen van gebruikersnamen gebaseerd op telefoonnummer integratie",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Als automatisch aanvullen \"dezelfde groep\" en \"telefoonnummer integratie\" zijn ingeschakeld, is een overeenkomst in een van beide voldoende om de gebruiker te tonen.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Automatisch aanvullen van gebruikersnaam toestaan bij het invoeren van de volledige naam of het e-mailadres (ontbrekende overeenkomst in het telefoonboek negeren en deel uitmaken van dezelfde groep)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Toon disclaimer tekst op de publieke link upload pagina (alleen getoond wanneer de bestandslijst verborgen is)",
"This text will be shown on the public link upload page when the file list is hidden." : "Deze tekst wordt getoond op de openbare link uploadpagina als het bestandsoverzicht is verborgen.",
@@ -428,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Als u toepassingen van derden gebruikt om met Nextcloud te verbinden, zorg er dan voor om voor elke app een wachtwoord te maken en te configureren voordat \"tweede factor authenticatie\" wordt geactiveerd.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Er trad een fout op. Upload als een ASCII-gecodeerd PEM certificaat.",
"Valid until {date}" : "Geldig tot {date}",
- "Local" : "Lokaal",
"Only visible to local users" : "Alleen zichtbaar voor lokale gebruikers",
"Only visible to you" : "Alleen zichtbaar voor jou",
"Contacts" : "Contactpersonen",
"Visible to local users and to trusted servers" : "Alleen zichtbaar voor lokale gebruikers en vertrouwde servers",
+ "Public" : "Openbaar",
"Will be synced to a global and public address book" : "Wordt gesynct met een globaal en openbaar adresboek",
"by" : "door",
"SSL Root Certificates" : "SSL Root Certificaten",
@@ -447,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Automatisch afmaken gebruikersnaam bij het delen. Als dit is uitgeschakeld moet een volledige gebruiksnaam of volledig emailadres worden opgegeven.",
"Restrict username autocompletion to users within the same groups" : "Beperk het automatisch aanvullen van gebruikersnamen tot de gebruikers binnen dezelfde groepen.",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Toon disclaimer op de openbare link uploadpagina (alleen tonen als het bestandsoverzicht verborgen is).",
+ "Don't synchronize to servers" : "Niet synchroniseren met de servers",
+ "Trusted" : "Vertrouwd",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Sta het automatisch aanvullen van de gebruikersnaam toe in het dialoogvenster voor delen (als dit is uitgeschakeld, moet de volledige gebruikersnaam of het e-mailadres worden ingevoerd)"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/nl.json b/apps/settings/l10n/nl.json
index f0f793f0cdd..80dddfb18ad 100644
--- a/apps/settings/l10n/nl.json
+++ b/apps/settings/l10n/nl.json
@@ -6,10 +6,12 @@
"Sending…" : "Versturen...",
"Email sent" : "E-mail verzonden",
"Private" : "Privé",
- "Don't synchronize to servers" : "Niet synchroniseren met de servers",
- "Trusted" : "Vertrouwd",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Alleen zichtbaar voor mensen die via telefoonnummerintegratie gematcht zijn voor Talk op mobiel",
+ "Local" : "Lokaal",
+ "Only visible to people on this instance and guests" : "Alleen zichtbaar voor gebruikers op deze server en gasten",
+ "Federated" : "Gefedereerd",
"Only synchronize to trusted servers" : "Alleen synchroniseren met vertrouwde servers",
- "Public" : "Openbaar",
+ "Published" : "Gepubliceerd",
"Synchronize to trusted servers and the global and public address book" : "Synchroniseren met vertrouwde servers en het wereldwijde en openbare adresboek",
"Verify" : "Verifiëren",
"Verifying …" : "Verifiëren...",
@@ -380,8 +382,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Deze groepen kunnen gedeelde mappen en bestanden ontvangen, maar kunnen zelf niks delen.",
"Allow username autocompletion in share dialog" : "Automatisch aanvullen gebruikersnamen binnen deeldialoog toegestaan",
"Allow username autocompletion to users within the same groups" : "Automatisch aanvullen van gebruikersnamen voor de gebruikers binnen dezelfde groepen toegestaan",
- "Allow username autocompletion to users based on phonebook matches" : "Toestaan automatisch aanvullen van gebruikersnamen gebaseerd op telefoonboek",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Als automatisch aanvullen \"dezelfde groep\" en \"telefoonboekovereenkomsten\" zijn ingeschakeld, is een overeenkomst in een van beide voldoende om de gebruiker te tonen.",
+ "Allow username autocompletion to users based on phone number integration" : "Toestaan automatisch aanvullen van gebruikersnamen gebaseerd op telefoonnummer integratie",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Als automatisch aanvullen \"dezelfde groep\" en \"telefoonnummer integratie\" zijn ingeschakeld, is een overeenkomst in een van beide voldoende om de gebruiker te tonen.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Automatisch aanvullen van gebruikersnaam toestaan bij het invoeren van de volledige naam of het e-mailadres (ontbrekende overeenkomst in het telefoonboek negeren en deel uitmaken van dezelfde groep)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Toon disclaimer tekst op de publieke link upload pagina (alleen getoond wanneer de bestandslijst verborgen is)",
"This text will be shown on the public link upload page when the file list is hidden." : "Deze tekst wordt getoond op de openbare link uploadpagina als het bestandsoverzicht is verborgen.",
@@ -426,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Als u toepassingen van derden gebruikt om met Nextcloud te verbinden, zorg er dan voor om voor elke app een wachtwoord te maken en te configureren voordat \"tweede factor authenticatie\" wordt geactiveerd.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Er trad een fout op. Upload als een ASCII-gecodeerd PEM certificaat.",
"Valid until {date}" : "Geldig tot {date}",
- "Local" : "Lokaal",
"Only visible to local users" : "Alleen zichtbaar voor lokale gebruikers",
"Only visible to you" : "Alleen zichtbaar voor jou",
"Contacts" : "Contactpersonen",
"Visible to local users and to trusted servers" : "Alleen zichtbaar voor lokale gebruikers en vertrouwde servers",
+ "Public" : "Openbaar",
"Will be synced to a global and public address book" : "Wordt gesynct met een globaal en openbaar adresboek",
"by" : "door",
"SSL Root Certificates" : "SSL Root Certificaten",
@@ -445,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Automatisch afmaken gebruikersnaam bij het delen. Als dit is uitgeschakeld moet een volledige gebruiksnaam of volledig emailadres worden opgegeven.",
"Restrict username autocompletion to users within the same groups" : "Beperk het automatisch aanvullen van gebruikersnamen tot de gebruikers binnen dezelfde groepen.",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Toon disclaimer op de openbare link uploadpagina (alleen tonen als het bestandsoverzicht verborgen is).",
+ "Don't synchronize to servers" : "Niet synchroniseren met de servers",
+ "Trusted" : "Vertrouwd",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Sta het automatisch aanvullen van de gebruikersnaam toe in het dialoogvenster voor delen (als dit is uitgeschakeld, moet de volledige gebruikersnaam of het e-mailadres worden ingevoerd)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/oc.js b/apps/settings/l10n/oc.js
index 3bbe52d5d17..6812994b42c 100644
--- a/apps/settings/l10n/oc.js
+++ b/apps/settings/l10n/oc.js
@@ -8,10 +8,7 @@ OC.L10N.register(
"Sending…" : "Mandadís…",
"Email sent" : "Corrièl mandat",
"Private" : "Privat",
- "Don't synchronize to servers" : "Sincronizar pas als servidors",
- "Trusted" : "Fisable",
"Only synchronize to trusted servers" : "Sincronizar pas qu’als servidors fisables",
- "Public" : "Public",
"Synchronize to trusted servers and the global and public address book" : "Sincronizar als servidors fisables e los annuaris d’adreças globals e publics",
"Verify" : "Verificar",
"Verifying …" : "Verificacion…",
@@ -223,9 +220,12 @@ OC.L10N.register(
"Change password" : "Cambiar de senhal",
"Only visible to you" : "Sonque visible per vos",
"Contacts" : "Contactes",
+ "Public" : "Public",
"by" : "per",
"Valid until" : "Valid fins a",
"Issued By" : "Emés per",
- "Valid until %s" : "Valid fins a %s"
+ "Valid until %s" : "Valid fins a %s",
+ "Don't synchronize to servers" : "Sincronizar pas als servidors",
+ "Trusted" : "Fisable"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/settings/l10n/oc.json b/apps/settings/l10n/oc.json
index 9eef40f97de..220b87acf0a 100644
--- a/apps/settings/l10n/oc.json
+++ b/apps/settings/l10n/oc.json
@@ -6,10 +6,7 @@
"Sending…" : "Mandadís…",
"Email sent" : "Corrièl mandat",
"Private" : "Privat",
- "Don't synchronize to servers" : "Sincronizar pas als servidors",
- "Trusted" : "Fisable",
"Only synchronize to trusted servers" : "Sincronizar pas qu’als servidors fisables",
- "Public" : "Public",
"Synchronize to trusted servers and the global and public address book" : "Sincronizar als servidors fisables e los annuaris d’adreças globals e publics",
"Verify" : "Verificar",
"Verifying …" : "Verificacion…",
@@ -221,9 +218,12 @@
"Change password" : "Cambiar de senhal",
"Only visible to you" : "Sonque visible per vos",
"Contacts" : "Contactes",
+ "Public" : "Public",
"by" : "per",
"Valid until" : "Valid fins a",
"Issued By" : "Emés per",
- "Valid until %s" : "Valid fins a %s"
+ "Valid until %s" : "Valid fins a %s",
+ "Don't synchronize to servers" : "Sincronizar pas als servidors",
+ "Trusted" : "Fisable"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/pl.js b/apps/settings/l10n/pl.js
index ad7b1f02630..602f962fd2d 100644
--- a/apps/settings/l10n/pl.js
+++ b/apps/settings/l10n/pl.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "Wysyłam…",
"Email sent" : "E-mail został wysłany",
"Private" : "Prywatny",
- "Don't synchronize to servers" : "Nie synchronizuj z serwerami",
- "Trusted" : "Zaufany",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Widoczne tylko dla osób dopasowanych poprzez integrację numeru telefonu za pomocą Talka na telefonie komórkowym",
+ "Local" : "Lokalny",
+ "Only visible to people on this instance and guests" : "Widoczne tylko dla osób w tej instancji i gości",
+ "Federated" : "Sfederowane",
"Only synchronize to trusted servers" : "Synchronizuj tylko z zaufanymi serwerami",
- "Public" : "Publiczny",
+ "Published" : "Opublikowane",
"Synchronize to trusted servers and the global and public address book" : "Synchronizuj z zaufanymi serwerami oraz globalną i publiczną książką adresową",
"Verify" : "Zweryfikuj",
"Verifying …" : "Weryfikacja…",
@@ -382,8 +384,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Grupy te nadal będą mogły otrzymywać udostępnienia, ale nie będą mogły ich tworzyć.",
"Allow username autocompletion in share dialog" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika w oknie udostępniania",
"Allow username autocompletion to users within the same groups" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika dla użytkowników w tych samych grupach",
- "Allow username autocompletion to users based on phonebook matches" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika na podstawie użytkowników dopasowanych w książce telefonicznej",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Jeśli automatyczne uzupełnianie \"ta sama grupa\" i \"dopasowania w książce telefonicznej\" są włączone, wystarczy dopasowanie w jednej z nich, aby pokazać użytkownikowi.",
+ "Allow username autocompletion to users based on phone number integration" : "Zezwalaj na automatyczne uzupełnianie nazw użytkowników na podstawie integracji numeru telefonu",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Jeśli automatyczne uzupełnianie \"ta sama grupa\" i \"integracja numeru telefonu\" są włączone, wystarczy dopasowanie w jednej z nich, aby pokazać użytkownikowi.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika podczas wpisywania imienia i nazwiska lub adresu e-mail (ignorowanie brakującego dopasowania w książce telefonicznej i przynależności do tej samej grupy)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Pokaż tekst zastrzeżenia na stronie przesyłania linków publicznych (wyświetlane tylko wtedy, gdy lista plików jest ukryta)",
"This text will be shown on the public link upload page when the file list is hidden." : "Ten tekst zostanie wyświetlony na stronie przesyłania linków publicznych, gdy lista plików jest ukryta.",
@@ -428,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Jeśli używasz aplikacji innych firm do łączenia się z Nextcloud, upewnij się, że utworzyłeś i skonfigurowałeś hasło aplikacji dla każdej przed włączeniem uwierzytelniania dwuskładnikowego.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Wystąpił błąd. Proszę wysłać certyfikat PEM w kodowaniu ASCII.",
"Valid until {date}" : "Ważny do {date}",
- "Local" : "Lokalny",
"Only visible to local users" : "Widoczne tylko dla użytkowników lokalnych",
"Only visible to you" : "Widoczne tylko dla Ciebie",
"Contacts" : "Kontakty",
"Visible to local users and to trusted servers" : "Widoczne dla lokalnych użytkowników i zaufanych serwerów",
+ "Public" : "Publiczny",
"Will be synced to a global and public address book" : "Synchronizacja z globalną i publiczną książką adresową",
"by" : "przez",
"SSL Root Certificates" : "Certyfikaty główne SSL",
@@ -447,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika w oknie dialogowym udostępniania. Przy wyłączonej opcji wymagać będzie podania pełnej nazwy użytkownika lub adres e-mail.",
"Restrict username autocompletion to users within the same groups" : "Ogranicz automatyczne uzupełnianie nazwy użytkownika dla użytkowników w tych samych grupach",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Pokaż tekst zastrzeżenia na stronie przesyłania linków publicznych. (Wyświetlane tylko, gdy lista plików jest ukryta).",
+ "Don't synchronize to servers" : "Nie synchronizuj z serwerami",
+ "Trusted" : "Zaufany",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika w oknie udostępniania (jeśli ta opcja będzie wyłączona, wymagane będzie wprowadzanie pełnej nazwy użytkownika lub adres e-mail)"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/apps/settings/l10n/pl.json b/apps/settings/l10n/pl.json
index 5f0d381f210..c8743bff6f3 100644
--- a/apps/settings/l10n/pl.json
+++ b/apps/settings/l10n/pl.json
@@ -6,10 +6,12 @@
"Sending…" : "Wysyłam…",
"Email sent" : "E-mail został wysłany",
"Private" : "Prywatny",
- "Don't synchronize to servers" : "Nie synchronizuj z serwerami",
- "Trusted" : "Zaufany",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Widoczne tylko dla osób dopasowanych poprzez integrację numeru telefonu za pomocą Talka na telefonie komórkowym",
+ "Local" : "Lokalny",
+ "Only visible to people on this instance and guests" : "Widoczne tylko dla osób w tej instancji i gości",
+ "Federated" : "Sfederowane",
"Only synchronize to trusted servers" : "Synchronizuj tylko z zaufanymi serwerami",
- "Public" : "Publiczny",
+ "Published" : "Opublikowane",
"Synchronize to trusted servers and the global and public address book" : "Synchronizuj z zaufanymi serwerami oraz globalną i publiczną książką adresową",
"Verify" : "Zweryfikuj",
"Verifying …" : "Weryfikacja…",
@@ -380,8 +382,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Grupy te nadal będą mogły otrzymywać udostępnienia, ale nie będą mogły ich tworzyć.",
"Allow username autocompletion in share dialog" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika w oknie udostępniania",
"Allow username autocompletion to users within the same groups" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika dla użytkowników w tych samych grupach",
- "Allow username autocompletion to users based on phonebook matches" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika na podstawie użytkowników dopasowanych w książce telefonicznej",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Jeśli automatyczne uzupełnianie \"ta sama grupa\" i \"dopasowania w książce telefonicznej\" są włączone, wystarczy dopasowanie w jednej z nich, aby pokazać użytkownikowi.",
+ "Allow username autocompletion to users based on phone number integration" : "Zezwalaj na automatyczne uzupełnianie nazw użytkowników na podstawie integracji numeru telefonu",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Jeśli automatyczne uzupełnianie \"ta sama grupa\" i \"integracja numeru telefonu\" są włączone, wystarczy dopasowanie w jednej z nich, aby pokazać użytkownikowi.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika podczas wpisywania imienia i nazwiska lub adresu e-mail (ignorowanie brakującego dopasowania w książce telefonicznej i przynależności do tej samej grupy)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Pokaż tekst zastrzeżenia na stronie przesyłania linków publicznych (wyświetlane tylko wtedy, gdy lista plików jest ukryta)",
"This text will be shown on the public link upload page when the file list is hidden." : "Ten tekst zostanie wyświetlony na stronie przesyłania linków publicznych, gdy lista plików jest ukryta.",
@@ -426,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Jeśli używasz aplikacji innych firm do łączenia się z Nextcloud, upewnij się, że utworzyłeś i skonfigurowałeś hasło aplikacji dla każdej przed włączeniem uwierzytelniania dwuskładnikowego.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Wystąpił błąd. Proszę wysłać certyfikat PEM w kodowaniu ASCII.",
"Valid until {date}" : "Ważny do {date}",
- "Local" : "Lokalny",
"Only visible to local users" : "Widoczne tylko dla użytkowników lokalnych",
"Only visible to you" : "Widoczne tylko dla Ciebie",
"Contacts" : "Kontakty",
"Visible to local users and to trusted servers" : "Widoczne dla lokalnych użytkowników i zaufanych serwerów",
+ "Public" : "Publiczny",
"Will be synced to a global and public address book" : "Synchronizacja z globalną i publiczną książką adresową",
"by" : "przez",
"SSL Root Certificates" : "Certyfikaty główne SSL",
@@ -445,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika w oknie dialogowym udostępniania. Przy wyłączonej opcji wymagać będzie podania pełnej nazwy użytkownika lub adres e-mail.",
"Restrict username autocompletion to users within the same groups" : "Ogranicz automatyczne uzupełnianie nazwy użytkownika dla użytkowników w tych samych grupach",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Pokaż tekst zastrzeżenia na stronie przesyłania linków publicznych. (Wyświetlane tylko, gdy lista plików jest ukryta).",
+ "Don't synchronize to servers" : "Nie synchronizuj z serwerami",
+ "Trusted" : "Zaufany",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Zezwalaj na automatyczne uzupełnianie nazwy użytkownika w oknie udostępniania (jeśli ta opcja będzie wyłączona, wymagane będzie wprowadzanie pełnej nazwy użytkownika lub adres e-mail)"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/pt_BR.js b/apps/settings/l10n/pt_BR.js
index dbbd324ea66..27bcca18b3e 100644
--- a/apps/settings/l10n/pt_BR.js
+++ b/apps/settings/l10n/pt_BR.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "Enviando...",
"Email sent" : "E-mail enviado",
"Private" : "Privado",
- "Don't synchronize to servers" : "Não sincronize com servidores",
- "Trusted" : "Confiável",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Visível apenas por pessoas que correspondem à integração do número de telefone através do Talk no celular",
+ "Local" : "Local",
+ "Only visible to people on this instance and guests" : "Visível apenas por pessoas desta instância ou convidados",
+ "Federated" : "Federado",
"Only synchronize to trusted servers" : "Sincronize apenas com servidores confiáveis",
- "Public" : "Público",
+ "Published" : "Publicado",
"Synchronize to trusted servers and the global and public address book" : "Sincronize com servidores confiáveis e catálogo de endereços global e público",
"Verify" : "Verificar",
"Verifying …" : "Verificando...",
@@ -124,11 +126,11 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"Verifying" : "Verificando",
"A background job is pending that checks for user imported SSL certificates. Please check back later." : "Um trabalho em segundo plano está pendente que verifica se há certificados SSL importados pelo usuário. Por favor, volte mais tarde.",
- "There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Existem alguns certificados SSL importados pelo usuário presentes, que não são mais usados com o Nextcloud 21. Eles podem ser importados na linha de comando através do comando \"occ security: certificates: import\". Seus caminhos dentro do diretório de dados são mostrados abaixo.",
+ "There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Existem alguns certificados SSL importados pelo usuário presentes, que não são mais usados com o Nextcloud 21. Eles podem ser importados na linha de comando através do comando \"occ security:certificates:import\". Seus caminhos dentro do diretório de dados são mostrados abaixo.",
"The old server-side-encryption format is enabled. We recommend disabling this." : "O antigo formato de criptografia do lado do servidor está ativado. Recomendamos desativar isso.",
- "MariaDB version \"%s\" is used. Nextcloud 21 will no longer support this version and requires MariaDB 10.2 or higher." : "Versão MariaDB \"%s\" é usado. Nextcloud 21 não suportará mais esta versão e requer MariaDB 10.2 ou superior. ",
- "MySQL version \"%s\" is used. Nextcloud 21 will no longer support this version and requires MySQL 8 or higher." : "Versão MySQL \"%s\" é usado. Nextcloud 21 não suportará mais esta versão e requer MySQL 8 ou superior. ",
- "PostgreSQL version \"%s\" is used. Nextcloud 21 will no longer support this version and requires PostgreSQL 9.6 or higher." : "A versão \"%s\" do PostgreSQL é usada. Nextcloud 21 não suportará mais esta versão e requer PostgreSQL 9.6 ou superior. ",
+ "MariaDB version \"%s\" is used. Nextcloud 21 will no longer support this version and requires MariaDB 10.2 or higher." : "Está em uso o MariaDB versão \"%s\". O Nextcloud 21 terá mais suporte para essa versão e requer MariaDB 10.2 ou posterior.",
+ "MySQL version \"%s\" is used. Nextcloud 21 will no longer support this version and requires MySQL 8 or higher." : "Está em uso o MySQL versão \"%s\". O Nextcloud 21 não terá mais suporte para essa versão e requer MySQL 8 ou posterior.",
+ "PostgreSQL version \"%s\" is used. Nextcloud 21 will no longer support this version and requires PostgreSQL 9.6 or higher." : "Está em uso o PostgreSQL \"%s\". O Nextcloud 21 não terá mais suporte para essa versão e requer PostgreSQL 9.6 ou posterior.",
"Nextcloud settings" : "Configurações Nextcloud",
"Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system." : "A autenticação de dois fatores pode ser imposta a todos os usuários e grupos específicos. Se eles não tiverem um provedor de dois fatores configurado, não poderão fazer login no sistema.",
"Enforce two-factor authentication" : "Aplicar autenticação de dois fatores",
@@ -258,7 +260,7 @@ OC.L10N.register(
"Server error while trying to add WebAuthn device" : "Erro no servidor ao adicionar o dispositivo WebAuthn",
"Server error while trying to complete WebAuthn device registration" : "Erro no servidor ao finalizar o registro do dispositivo WebAuthn",
"Unnamed device" : "Dispositivo sem nome",
- "Passwordless Authentication" : "Autenticação sem Senha",
+ "Passwordless Authentication" : "Autenticação sem senha",
"Set up your account for passwordless authentication following the FIDO2 standard." : "Configure sua conta para autenticação sem senha, seguindo o padrão FIDO2.",
"No devices configured." : "Nenhum dispositivo configurado.",
"The following devices are configured for your account:" : "Os seguintes dispositivos estão configurados para sua conta:",
@@ -373,18 +375,18 @@ OC.L10N.register(
"Allow users to share via link and emails" : "Permitir que os usuários compartilhem via link e e-mails",
"Allow public uploads" : "Permitir envio público",
"Always ask for a password" : "Sempre pedir a senha",
- "Enforce password protection" : "Reforce a proteção por senha",
+ "Enforce password protection" : "Aplicar proteção por senha",
"Set default expiration date" : "Definir data de expiração padrão",
"Allow resharing" : "Permitir o recompartilhamento",
"Allow sharing with groups" : "Permitir o compartilhamento com grupos",
- "Restrict users to only share with users in their groups" : "Restringir os usuários a compartilhar somente com os usuários em seus grupos",
+ "Restrict users to only share with users in their groups" : "Restringir os usuários para compartilhar apenas com usuários em seus grupos",
"Exclude groups from sharing" : "Excluir grupos do compartilhamento",
"These groups will still be able to receive shares, but not to initiate them." : "Esses grupos ainda serão capazes de receber compartilhamentos, mas não iniciá-los.",
"Allow username autocompletion in share dialog" : "Permitir a complementação automática do nome de usuário na caixa de diálogo de compartilhamento",
"Allow username autocompletion to users within the same groups" : "Permitir a complementação automática do nome de usuário aos usuários dentro dos mesmos grupos",
- "Allow username autocompletion to users based on phonebook matches" : "Permitir a execução automática do nome de usuário aos usuários com base em correspondências de livros telefônicos",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Se a autocompleção \"mesmo grupo\" e \"correspondências de lista telefônica\" forem habilitadas, uma correspondência em ambos será suficiente para mostrar ao usuário.",
- "Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir a complementação automática do nome de usuário ao inserir o nome completo ou endereço de e-mail (ignorando a correspondência da lista telefônica desaparecida e estando no mesmo grupo)",
+ "Allow username autocompletion to users based on phone number integration" : "Permitir complementação automática do nome do usuário com base na integração do número de telefone",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se a complementação automática \"mesmo grupo\" e \"integração do número de telefone\" estiverem ativas, uma combinação em qualquer um dos dois é suficiente para mostrar o usuário.",
+ "Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir a complementação automática do nome de usuário ao inserir o nome completo ou endereço de e-mail (ignorando se está na lista de telefones ou no mesmo grupo)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Exibir o texto de aviso na página de envio do link público (somente mostrado quando a lista de arquivos está oculta).",
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto será mostrado na página de envio do link público quando a lista de arquivos está oculta.",
"Default share permissions" : "Permissões padrão de compartilhamento",
@@ -413,7 +415,7 @@ OC.L10N.register(
"Phone number" : "Número de telefone",
"Your phone number" : "Seu número de telefone",
"Address" : "Endereço",
- "Your postal address" : "Seu endereço postal",
+ "Your postal address" : "Seu endereço de correspondência",
"Website" : "Website",
"It can take up to 24 hours before the account is displayed as verified." : "Pode levar até 24 horas para que a conta seja mostrada como verificada.",
"Link https://…" : "Link https://…",
@@ -428,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Se usar aplicativos de terceiros para se conectar ao Nextcloud, certifique-se de criar e configurar uma senha para cada aplicativo antes de habilitar a autenticação em duas etapas.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ocorreu um erro. Por favor envie um certificado ASCII-encoded PEM",
"Valid until {date}" : "Válido até {date}",
- "Local" : "Local",
"Only visible to local users" : "Visível somente para usuários locais",
"Only visible to you" : "Visível somente para você",
"Contacts" : "Contatos",
"Visible to local users and to trusted servers" : "Visível para usuários locais e servidores confiáveis",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado com livro de endereços público e global",
"by" : "por",
"SSL Root Certificates" : "Certificados Raiz SSL",
@@ -443,10 +445,12 @@ OC.L10N.register(
"Import root certificate" : "Importar certificado raiz",
"Execute one task with each page loaded" : "Execute uma tarefa com cada página carregada",
"Allow users to share via link" : "Permitir que os usuários compartilhem por link",
- "Set default expiration date for link shares" : "Definir uma data de validade padrão para compartilhamentos de link",
+ "Set default expiration date for link shares" : "Definir data de validade padrão para compartilhamentos por link",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permitir autocompletar o nome do usuário na tela de compartilhamento. Se desabilitado, o nome completo ou e-mail deverá ser digitado.",
"Restrict username autocompletion to users within the same groups" : "Restringir o preenchimento automático de nome de usuário para usuários dentro dos mesmos grupos",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Exibir o texto de aviso na página pública do link de envio (só é mostrado quando a lista de arquivos está oculta).",
+ "Don't synchronize to servers" : "Não sincronize com servidores",
+ "Trusted" : "Confiável",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Permitir autocompletar o nome do usuário na tela de compartilhamento (se desabilitado, o nome completo ou e-mail deverá ser digitado)"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/settings/l10n/pt_BR.json b/apps/settings/l10n/pt_BR.json
index 64ab5f19184..000714c375f 100644
--- a/apps/settings/l10n/pt_BR.json
+++ b/apps/settings/l10n/pt_BR.json
@@ -6,10 +6,12 @@
"Sending…" : "Enviando...",
"Email sent" : "E-mail enviado",
"Private" : "Privado",
- "Don't synchronize to servers" : "Não sincronize com servidores",
- "Trusted" : "Confiável",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Visível apenas por pessoas que correspondem à integração do número de telefone através do Talk no celular",
+ "Local" : "Local",
+ "Only visible to people on this instance and guests" : "Visível apenas por pessoas desta instância ou convidados",
+ "Federated" : "Federado",
"Only synchronize to trusted servers" : "Sincronize apenas com servidores confiáveis",
- "Public" : "Público",
+ "Published" : "Publicado",
"Synchronize to trusted servers and the global and public address book" : "Sincronize com servidores confiáveis e catálogo de endereços global e público",
"Verify" : "Verificar",
"Verifying …" : "Verificando...",
@@ -122,11 +124,11 @@
"Unlimited" : "Ilimitado",
"Verifying" : "Verificando",
"A background job is pending that checks for user imported SSL certificates. Please check back later." : "Um trabalho em segundo plano está pendente que verifica se há certificados SSL importados pelo usuário. Por favor, volte mais tarde.",
- "There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Existem alguns certificados SSL importados pelo usuário presentes, que não são mais usados com o Nextcloud 21. Eles podem ser importados na linha de comando através do comando \"occ security: certificates: import\". Seus caminhos dentro do diretório de dados são mostrados abaixo.",
+ "There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Existem alguns certificados SSL importados pelo usuário presentes, que não são mais usados com o Nextcloud 21. Eles podem ser importados na linha de comando através do comando \"occ security:certificates:import\". Seus caminhos dentro do diretório de dados são mostrados abaixo.",
"The old server-side-encryption format is enabled. We recommend disabling this." : "O antigo formato de criptografia do lado do servidor está ativado. Recomendamos desativar isso.",
- "MariaDB version \"%s\" is used. Nextcloud 21 will no longer support this version and requires MariaDB 10.2 or higher." : "Versão MariaDB \"%s\" é usado. Nextcloud 21 não suportará mais esta versão e requer MariaDB 10.2 ou superior. ",
- "MySQL version \"%s\" is used. Nextcloud 21 will no longer support this version and requires MySQL 8 or higher." : "Versão MySQL \"%s\" é usado. Nextcloud 21 não suportará mais esta versão e requer MySQL 8 ou superior. ",
- "PostgreSQL version \"%s\" is used. Nextcloud 21 will no longer support this version and requires PostgreSQL 9.6 or higher." : "A versão \"%s\" do PostgreSQL é usada. Nextcloud 21 não suportará mais esta versão e requer PostgreSQL 9.6 ou superior. ",
+ "MariaDB version \"%s\" is used. Nextcloud 21 will no longer support this version and requires MariaDB 10.2 or higher." : "Está em uso o MariaDB versão \"%s\". O Nextcloud 21 terá mais suporte para essa versão e requer MariaDB 10.2 ou posterior.",
+ "MySQL version \"%s\" is used. Nextcloud 21 will no longer support this version and requires MySQL 8 or higher." : "Está em uso o MySQL versão \"%s\". O Nextcloud 21 não terá mais suporte para essa versão e requer MySQL 8 ou posterior.",
+ "PostgreSQL version \"%s\" is used. Nextcloud 21 will no longer support this version and requires PostgreSQL 9.6 or higher." : "Está em uso o PostgreSQL \"%s\". O Nextcloud 21 não terá mais suporte para essa versão e requer PostgreSQL 9.6 ou posterior.",
"Nextcloud settings" : "Configurações Nextcloud",
"Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system." : "A autenticação de dois fatores pode ser imposta a todos os usuários e grupos específicos. Se eles não tiverem um provedor de dois fatores configurado, não poderão fazer login no sistema.",
"Enforce two-factor authentication" : "Aplicar autenticação de dois fatores",
@@ -256,7 +258,7 @@
"Server error while trying to add WebAuthn device" : "Erro no servidor ao adicionar o dispositivo WebAuthn",
"Server error while trying to complete WebAuthn device registration" : "Erro no servidor ao finalizar o registro do dispositivo WebAuthn",
"Unnamed device" : "Dispositivo sem nome",
- "Passwordless Authentication" : "Autenticação sem Senha",
+ "Passwordless Authentication" : "Autenticação sem senha",
"Set up your account for passwordless authentication following the FIDO2 standard." : "Configure sua conta para autenticação sem senha, seguindo o padrão FIDO2.",
"No devices configured." : "Nenhum dispositivo configurado.",
"The following devices are configured for your account:" : "Os seguintes dispositivos estão configurados para sua conta:",
@@ -371,18 +373,18 @@
"Allow users to share via link and emails" : "Permitir que os usuários compartilhem via link e e-mails",
"Allow public uploads" : "Permitir envio público",
"Always ask for a password" : "Sempre pedir a senha",
- "Enforce password protection" : "Reforce a proteção por senha",
+ "Enforce password protection" : "Aplicar proteção por senha",
"Set default expiration date" : "Definir data de expiração padrão",
"Allow resharing" : "Permitir o recompartilhamento",
"Allow sharing with groups" : "Permitir o compartilhamento com grupos",
- "Restrict users to only share with users in their groups" : "Restringir os usuários a compartilhar somente com os usuários em seus grupos",
+ "Restrict users to only share with users in their groups" : "Restringir os usuários para compartilhar apenas com usuários em seus grupos",
"Exclude groups from sharing" : "Excluir grupos do compartilhamento",
"These groups will still be able to receive shares, but not to initiate them." : "Esses grupos ainda serão capazes de receber compartilhamentos, mas não iniciá-los.",
"Allow username autocompletion in share dialog" : "Permitir a complementação automática do nome de usuário na caixa de diálogo de compartilhamento",
"Allow username autocompletion to users within the same groups" : "Permitir a complementação automática do nome de usuário aos usuários dentro dos mesmos grupos",
- "Allow username autocompletion to users based on phonebook matches" : "Permitir a execução automática do nome de usuário aos usuários com base em correspondências de livros telefônicos",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Se a autocompleção \"mesmo grupo\" e \"correspondências de lista telefônica\" forem habilitadas, uma correspondência em ambos será suficiente para mostrar ao usuário.",
- "Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir a complementação automática do nome de usuário ao inserir o nome completo ou endereço de e-mail (ignorando a correspondência da lista telefônica desaparecida e estando no mesmo grupo)",
+ "Allow username autocompletion to users based on phone number integration" : "Permitir complementação automática do nome do usuário com base na integração do número de telefone",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se a complementação automática \"mesmo grupo\" e \"integração do número de telefone\" estiverem ativas, uma combinação em qualquer um dos dois é suficiente para mostrar o usuário.",
+ "Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir a complementação automática do nome de usuário ao inserir o nome completo ou endereço de e-mail (ignorando se está na lista de telefones ou no mesmo grupo)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Exibir o texto de aviso na página de envio do link público (somente mostrado quando a lista de arquivos está oculta).",
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto será mostrado na página de envio do link público quando a lista de arquivos está oculta.",
"Default share permissions" : "Permissões padrão de compartilhamento",
@@ -411,7 +413,7 @@
"Phone number" : "Número de telefone",
"Your phone number" : "Seu número de telefone",
"Address" : "Endereço",
- "Your postal address" : "Seu endereço postal",
+ "Your postal address" : "Seu endereço de correspondência",
"Website" : "Website",
"It can take up to 24 hours before the account is displayed as verified." : "Pode levar até 24 horas para que a conta seja mostrada como verificada.",
"Link https://…" : "Link https://…",
@@ -426,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Se usar aplicativos de terceiros para se conectar ao Nextcloud, certifique-se de criar e configurar uma senha para cada aplicativo antes de habilitar a autenticação em duas etapas.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ocorreu um erro. Por favor envie um certificado ASCII-encoded PEM",
"Valid until {date}" : "Válido até {date}",
- "Local" : "Local",
"Only visible to local users" : "Visível somente para usuários locais",
"Only visible to you" : "Visível somente para você",
"Contacts" : "Contatos",
"Visible to local users and to trusted servers" : "Visível para usuários locais e servidores confiáveis",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado com livro de endereços público e global",
"by" : "por",
"SSL Root Certificates" : "Certificados Raiz SSL",
@@ -441,10 +443,12 @@
"Import root certificate" : "Importar certificado raiz",
"Execute one task with each page loaded" : "Execute uma tarefa com cada página carregada",
"Allow users to share via link" : "Permitir que os usuários compartilhem por link",
- "Set default expiration date for link shares" : "Definir uma data de validade padrão para compartilhamentos de link",
+ "Set default expiration date for link shares" : "Definir data de validade padrão para compartilhamentos por link",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permitir autocompletar o nome do usuário na tela de compartilhamento. Se desabilitado, o nome completo ou e-mail deverá ser digitado.",
"Restrict username autocompletion to users within the same groups" : "Restringir o preenchimento automático de nome de usuário para usuários dentro dos mesmos grupos",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Exibir o texto de aviso na página pública do link de envio (só é mostrado quando a lista de arquivos está oculta).",
+ "Don't synchronize to servers" : "Não sincronize com servidores",
+ "Trusted" : "Confiável",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Permitir autocompletar o nome do usuário na tela de compartilhamento (se desabilitado, o nome completo ou e-mail deverá ser digitado)"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/pt_PT.js b/apps/settings/l10n/pt_PT.js
index e5310c81a6a..8b7cead20d5 100644
--- a/apps/settings/l10n/pt_PT.js
+++ b/apps/settings/l10n/pt_PT.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "A enviar...",
"Email sent" : "Mensagem de correio eletrónico enviada",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "A verificar...",
"Unable to change password" : "Não é possível alterar a sua palavra-passe ",
@@ -263,11 +263,11 @@ OC.L10N.register(
"Change password" : "Alterar palavra-passe",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ocorreu um erro. Por favor, envie um certificado PEM codificado em ASCII.",
"Valid until {date}" : "Válida até {date}",
- "Local" : "Local",
"Only visible to local users" : "Apenas visível para utilizadores locais",
"Only visible to you" : "Apenas visível por si",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visível por utilizadores locais e servidores confiáveis",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado com um livro de endereços público e global",
"by" : "por",
"SSL Root Certificates" : "Certificados SSL Root",
diff --git a/apps/settings/l10n/pt_PT.json b/apps/settings/l10n/pt_PT.json
index 290698290f2..528f05719e6 100644
--- a/apps/settings/l10n/pt_PT.json
+++ b/apps/settings/l10n/pt_PT.json
@@ -6,7 +6,7 @@
"Sending…" : "A enviar...",
"Email sent" : "Mensagem de correio eletrónico enviada",
"Private" : "Privado",
- "Public" : "Público",
+ "Local" : "Local",
"Verify" : "Verificar",
"Verifying …" : "A verificar...",
"Unable to change password" : "Não é possível alterar a sua palavra-passe ",
@@ -261,11 +261,11 @@
"Change password" : "Alterar palavra-passe",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ocorreu um erro. Por favor, envie um certificado PEM codificado em ASCII.",
"Valid until {date}" : "Válida até {date}",
- "Local" : "Local",
"Only visible to local users" : "Apenas visível para utilizadores locais",
"Only visible to you" : "Apenas visível por si",
"Contacts" : "Contactos",
"Visible to local users and to trusted servers" : "Visível por utilizadores locais e servidores confiáveis",
+ "Public" : "Público",
"Will be synced to a global and public address book" : "Será sincronizado com um livro de endereços público e global",
"by" : "por",
"SSL Root Certificates" : "Certificados SSL Root",
diff --git a/apps/settings/l10n/ro.js b/apps/settings/l10n/ro.js
index b55eb63476c..104e36c2402 100644
--- a/apps/settings/l10n/ro.js
+++ b/apps/settings/l10n/ro.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "Se trimite...",
"Email sent" : "Mesajul a fost expediat",
"Private" : "Privat",
- "Public" : "Public",
+ "Local" : "Local",
"Verify" : "Verifică",
"Verifying …" : "Se verifică ...",
"Unable to change password" : "Imposibil de schimbat parola",
@@ -232,11 +232,11 @@ OC.L10N.register(
"Change password" : "Schimbă parola",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "A apărut o eroare. Te rugăm să uploadezi un certificat PEM în format ASCII.",
"Valid until {date}" : "Valabil până la {date}",
- "Local" : "Local",
"Only visible to local users" : "Vizibil userilor locali",
"Only visible to you" : "Vizibil doar pentru tine",
"Contacts" : "Contacte",
"Visible to local users and to trusted servers" : "Vizibil userilor locali si serverelor de încredere",
+ "Public" : "Public",
"Will be synced to a global and public address book" : "Va fi sincronizat cu o agendă de adrese publice și globale",
"by" : "de",
"SSL Root Certificates" : "Certificate SSL rădăcină",
diff --git a/apps/settings/l10n/ro.json b/apps/settings/l10n/ro.json
index cd0dc581596..f0d659bc22b 100644
--- a/apps/settings/l10n/ro.json
+++ b/apps/settings/l10n/ro.json
@@ -6,7 +6,7 @@
"Sending…" : "Se trimite...",
"Email sent" : "Mesajul a fost expediat",
"Private" : "Privat",
- "Public" : "Public",
+ "Local" : "Local",
"Verify" : "Verifică",
"Verifying …" : "Se verifică ...",
"Unable to change password" : "Imposibil de schimbat parola",
@@ -230,11 +230,11 @@
"Change password" : "Schimbă parola",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "A apărut o eroare. Te rugăm să uploadezi un certificat PEM în format ASCII.",
"Valid until {date}" : "Valabil până la {date}",
- "Local" : "Local",
"Only visible to local users" : "Vizibil userilor locali",
"Only visible to you" : "Vizibil doar pentru tine",
"Contacts" : "Contacte",
"Visible to local users and to trusted servers" : "Vizibil userilor locali si serverelor de încredere",
+ "Public" : "Public",
"Will be synced to a global and public address book" : "Va fi sincronizat cu o agendă de adrese publice și globale",
"by" : "de",
"SSL Root Certificates" : "Certificate SSL rădăcină",
diff --git a/apps/settings/l10n/ru.js b/apps/settings/l10n/ru.js
index 507aa15baf4..25197c2cced 100644
--- a/apps/settings/l10n/ru.js
+++ b/apps/settings/l10n/ru.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Отправка…",
"Email sent" : "Письмо отправлено",
"Private" : "Закрытый",
- "Don't synchronize to servers" : "Не выполнять синхронизацию с серверами",
- "Trusted" : "Доверенный",
+ "Local" : "Локально",
"Only synchronize to trusted servers" : "Выполнять синхронизацию только с доверенными серверами",
- "Public" : "Открытый",
"Synchronize to trusted servers and the global and public address book" : "Выполнять синхронизацию с доверенными серверами и глобальной и открытой адресной книгой",
"Verify" : "Проверить",
"Verifying …" : "Выполняется проверка…",
@@ -420,11 +418,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Если вы используете сторонние приложения для подключения к Nextcloud, убедитесь что для них созданы и настроены пароли приложений, перед тем как активировать двухфакторную авторизацию.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Произошла ошибка. Загрузите сертификат PEM в кодировке ASCII .",
"Valid until {date}" : "Дата истечения: {date}",
- "Local" : "Локально",
"Only visible to local users" : "Виден только локальным пользователям",
"Only visible to you" : "Виден только вам",
"Contacts" : "Контакты",
"Visible to local users and to trusted servers" : "Виден локальным пользователям и доверенным серверам",
+ "Public" : "Открытый",
"Will be synced to a global and public address book" : "Будет синхронизирован с глобальной и открытой адресной книгой",
"by" : "автор",
"SSL Root Certificates" : "Корневые сертификаты SSL",
@@ -439,6 +437,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Включить автоматическое завершение имён пользователей в диалоге предоставления общего доступа. Если отключено, то необходимо вводить полное имя или адрес эл. почты.",
"Restrict username autocompletion to users within the same groups" : "Запретить автоматическое дополнение имён пользователей из других групп",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Показывать текст об отказе от ответственности на странице доступа по открытой ссылке. Текст виден только при скрытом списке файлов.",
+ "Don't synchronize to servers" : "Не выполнять синхронизацию с серверами",
+ "Trusted" : "Доверенный",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Разрешить автоматическое завершение имён при предоставлении доступа ( если его отключить, то имя пользователя или адрес email надо будет вводить вручную полностью)"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/settings/l10n/ru.json b/apps/settings/l10n/ru.json
index 8e02dbcdf7e..d676404c4ab 100644
--- a/apps/settings/l10n/ru.json
+++ b/apps/settings/l10n/ru.json
@@ -6,10 +6,8 @@
"Sending…" : "Отправка…",
"Email sent" : "Письмо отправлено",
"Private" : "Закрытый",
- "Don't synchronize to servers" : "Не выполнять синхронизацию с серверами",
- "Trusted" : "Доверенный",
+ "Local" : "Локально",
"Only synchronize to trusted servers" : "Выполнять синхронизацию только с доверенными серверами",
- "Public" : "Открытый",
"Synchronize to trusted servers and the global and public address book" : "Выполнять синхронизацию с доверенными серверами и глобальной и открытой адресной книгой",
"Verify" : "Проверить",
"Verifying …" : "Выполняется проверка…",
@@ -418,11 +416,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Если вы используете сторонние приложения для подключения к Nextcloud, убедитесь что для них созданы и настроены пароли приложений, перед тем как активировать двухфакторную авторизацию.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Произошла ошибка. Загрузите сертификат PEM в кодировке ASCII .",
"Valid until {date}" : "Дата истечения: {date}",
- "Local" : "Локально",
"Only visible to local users" : "Виден только локальным пользователям",
"Only visible to you" : "Виден только вам",
"Contacts" : "Контакты",
"Visible to local users and to trusted servers" : "Виден локальным пользователям и доверенным серверам",
+ "Public" : "Открытый",
"Will be synced to a global and public address book" : "Будет синхронизирован с глобальной и открытой адресной книгой",
"by" : "автор",
"SSL Root Certificates" : "Корневые сертификаты SSL",
@@ -437,6 +435,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Включить автоматическое завершение имён пользователей в диалоге предоставления общего доступа. Если отключено, то необходимо вводить полное имя или адрес эл. почты.",
"Restrict username autocompletion to users within the same groups" : "Запретить автоматическое дополнение имён пользователей из других групп",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Показывать текст об отказе от ответственности на странице доступа по открытой ссылке. Текст виден только при скрытом списке файлов.",
+ "Don't synchronize to servers" : "Не выполнять синхронизацию с серверами",
+ "Trusted" : "Доверенный",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Разрешить автоматическое завершение имён при предоставлении доступа ( если его отключить, то имя пользователя или адрес email надо будет вводить вручную полностью)"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/sk.js b/apps/settings/l10n/sk.js
index b817f9cb713..c857a1e6c13 100644
--- a/apps/settings/l10n/sk.js
+++ b/apps/settings/l10n/sk.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Odosielam...",
"Email sent" : "Email odoslaný",
"Private" : "Súkromný",
- "Don't synchronize to servers" : "Nesynchronizovať so servermi",
- "Trusted" : "Dôveryhodné",
+ "Local" : "Lokálny",
"Only synchronize to trusted servers" : "Synchronizovať iba s dôveryhodnými servermi",
- "Public" : "Verejné",
"Synchronize to trusted servers and the global and public address book" : "Synchronizovať s dôveryhodnými servermi a globálnym a verejným adresárom",
"Verify" : "Overiť",
"Verifying …" : "Overovanie ...",
@@ -414,11 +412,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Ak na pripojenie k NextCloudu používate aplikácie tretích strán, pred povolením dvojstupňového overovania totožnosti, nezabudnite pre každú z nich vytvoriť a nastaviť heslo aplikácie.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Vyskytla sa chyba. Nahrajte prosím PEM certifikát v ASCII kódovaní.",
"Valid until {date}" : "Platný do {date}",
- "Local" : "Lokálny",
"Only visible to local users" : "Viditeľné iba pre lokálnych používateľov",
"Only visible to you" : "Viditeľné iba pre seba",
"Contacts" : "Kontakty",
"Visible to local users and to trusted servers" : "Viditeľné pre lokálnych používateľov a dôveryhodné servery",
+ "Public" : "Verejné",
"Will be synced to a global and public address book" : "Bude synchronizované s globálnym a verejným adresárom",
"by" : "od",
"SSL Root Certificates" : "Koreňové certifikáty SSL",
@@ -433,6 +431,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Umožni automatické dopĺňanie používateľského mena pri sprístupňovaní. Ak je vypnuté, musí byť zadané celé meno alebo emailová adresa používateľa.",
"Restrict username autocompletion to users within the same groups" : "Obmedziť automatické dopĺňanie používateľského mena na používateľov v rámci rovnakých skupín",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zobraziť text upozornenia na stránke pre nahrávanie verejného odkazu (zobraziť len ak je zoznam súborov skrytý).",
+ "Don't synchronize to servers" : "Nesynchronizovať so servermi",
+ "Trusted" : "Dôveryhodné",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Umožni automatické dopĺňanie používateľského mena pri sprístupňovaní (ak je vypnuté, musí byť zadané celé meno alebo emailová adresa používateľa)"
},
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");
diff --git a/apps/settings/l10n/sk.json b/apps/settings/l10n/sk.json
index e4f6f1186f2..9848316dcac 100644
--- a/apps/settings/l10n/sk.json
+++ b/apps/settings/l10n/sk.json
@@ -6,10 +6,8 @@
"Sending…" : "Odosielam...",
"Email sent" : "Email odoslaný",
"Private" : "Súkromný",
- "Don't synchronize to servers" : "Nesynchronizovať so servermi",
- "Trusted" : "Dôveryhodné",
+ "Local" : "Lokálny",
"Only synchronize to trusted servers" : "Synchronizovať iba s dôveryhodnými servermi",
- "Public" : "Verejné",
"Synchronize to trusted servers and the global and public address book" : "Synchronizovať s dôveryhodnými servermi a globálnym a verejným adresárom",
"Verify" : "Overiť",
"Verifying …" : "Overovanie ...",
@@ -412,11 +410,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Ak na pripojenie k NextCloudu používate aplikácie tretích strán, pred povolením dvojstupňového overovania totožnosti, nezabudnite pre každú z nich vytvoriť a nastaviť heslo aplikácie.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Vyskytla sa chyba. Nahrajte prosím PEM certifikát v ASCII kódovaní.",
"Valid until {date}" : "Platný do {date}",
- "Local" : "Lokálny",
"Only visible to local users" : "Viditeľné iba pre lokálnych používateľov",
"Only visible to you" : "Viditeľné iba pre seba",
"Contacts" : "Kontakty",
"Visible to local users and to trusted servers" : "Viditeľné pre lokálnych používateľov a dôveryhodné servery",
+ "Public" : "Verejné",
"Will be synced to a global and public address book" : "Bude synchronizované s globálnym a verejným adresárom",
"by" : "od",
"SSL Root Certificates" : "Koreňové certifikáty SSL",
@@ -431,6 +429,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Umožni automatické dopĺňanie používateľského mena pri sprístupňovaní. Ak je vypnuté, musí byť zadané celé meno alebo emailová adresa používateľa.",
"Restrict username autocompletion to users within the same groups" : "Obmedziť automatické dopĺňanie používateľského mena na používateľov v rámci rovnakých skupín",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zobraziť text upozornenia na stránke pre nahrávanie verejného odkazu (zobraziť len ak je zoznam súborov skrytý).",
+ "Don't synchronize to servers" : "Nesynchronizovať so servermi",
+ "Trusted" : "Dôveryhodné",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Umožni automatické dopĺňanie používateľského mena pri sprístupňovaní (ak je vypnuté, musí byť zadané celé meno alebo emailová adresa používateľa)"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/sl.js b/apps/settings/l10n/sl.js
index b543583fbda..9c2e55c20a8 100644
--- a/apps/settings/l10n/sl.js
+++ b/apps/settings/l10n/sl.js
@@ -8,10 +8,10 @@ OC.L10N.register(
"Sending…" : "Poteka pošiljanje ...",
"Email sent" : "Elektronsko sporočilo je poslano",
"Private" : "Zasebno",
- "Don't synchronize to servers" : "Ne usklajuj s strežniki",
- "Trusted" : "Varni strežniki",
+ "Local" : "Krajevno",
+ "Federated" : "Zvezno",
"Only synchronize to trusted servers" : "Usklajuj le z zaupanja vrednimi strežniki",
- "Public" : "Javno",
+ "Published" : "Objavljeno",
"Synchronize to trusted servers and the global and public address book" : "Usklajuj z varnimi strežniki in splošnimi in javnimi imeniki",
"Verify" : "Overi",
"Verifying …" : "Poteka overjanje ...",
@@ -369,9 +369,11 @@ OC.L10N.register(
"Expire after " : "Povezava naj preteče po",
"days" : "dneh.",
"Enforce expiration date" : "Vsili datum preteka",
+ "Allow users to share via link and emails" : "Uporabnikom dovoli omogočanje souporabe s povezavami in elektronskimi sporočili",
"Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak",
"Always ask for a password" : "Vedno zahtevaj geslo",
"Enforce password protection" : "Vsili zaščito z geslom",
+ "Set default expiration date" : "Nastavi privzeti datum poteka",
"Allow resharing" : "Dovoli nadaljnje omogočanje souporabe",
"Allow sharing with groups" : "Dovoli souporabo s skupinami",
"Restrict users to only share with users in their groups" : "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine",
@@ -379,8 +381,7 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, nimajo pa dovoljenja za omogočanje souporabe.",
"Allow username autocompletion in share dialog" : "Dovoli samodejno dopolnjevanje uporabniških imen v oknu omogočanja souporabe",
"Allow username autocompletion to users within the same groups" : "Dovoli samodejno dopolnjevanje uporabniških imen znotraj iste skupine",
- "Allow username autocompletion to users based on phonebook matches" : "Dovoli samodejno dopolnjevanje uporabniških imen glede na zadetke telefonskega imenika",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Če je omogočeno samodejno dopolnjevanje »v isti skupini« ali pa »po telefonskem imeniku«, se zadetek pokaže, če je uporabnik v katerikoli od teh zbirk.",
+ "Allow username autocompletion to users based on phone number integration" : "Dovoli samodejno dopolnjevanje uporabniških imen po telefonskih številkah",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Dovoli samodejno dokončanje uporabniškega imena pri vpisu polnega imena ali elektronskega naslova (prezrta je zahteva telefonskega imenika in iste skupine).",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Pokaži izjavo o omejitvi odgovornosti pri uporabi javnih povezav za pošiljanje (če je onemogočen prikaz seznama datotek).",
"This text will be shown on the public link upload page when the file list is hidden." : "Besedilo izjave o omejitvi odgovornosti, ki bo izpisano v oknu za pošiljanje, ko je možnost prikaza seznama datotek onemogočena.",
@@ -425,11 +426,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Če uporabljate za povezavo z oblakom Nextcloud programe tretjih oseb, najprej ustvarite in nastavite gesla za vsak program, preden omogočite dvostopenjsko overitev.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Prišlo je do napake. Uvoziti je treba ustrezno ASCII kodirano potrdilo PEM.",
"Valid until {date}" : "Veljavno do {date}",
- "Local" : "Krajevno",
"Only visible to local users" : "Vidno le krajevnim uporabnikom",
"Only visible to you" : "Vidno le vam",
"Contacts" : "Stiki",
"Visible to local users and to trusted servers" : "Vidno le krajevnim uporabnikom in odobrenim strežnikom",
+ "Public" : "Javno",
"Will be synced to a global and public address book" : "Podatki bodo usklajeni s splošnimi in javnimi imeniki",
"by" : "s strani",
"SSL Root Certificates" : "Korenska potrdila SSL",
@@ -444,6 +445,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Dovoli samodejno dokončanje uporabniškega imena v pogovornem oknu souporabe. Pri onemogočeni možnosti je treba za prikaz vpisati celotno uporabniško ime oziroma elektronski naslov.",
"Restrict username autocompletion to users within the same groups" : "Omeji samodejno dokončanje uporabniškega imena na uporabnike znotraj iste skupine",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Pokaži besedilo izjave o omejitvi odgovornosti pri uporabi javnih povezav za pošiljanje (če je onemogočen prikaz seznama datotek).",
+ "Don't synchronize to servers" : "Ne usklajuj s strežniki",
+ "Trusted" : "Varni strežniki",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Dovoli samodejno dokončanje uporabniškega imena pri določanju souporabe (sicer je treba vpisati celotno ime ali elektronski naslov)."
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/settings/l10n/sl.json b/apps/settings/l10n/sl.json
index 5f27b67d321..00c929e2432 100644
--- a/apps/settings/l10n/sl.json
+++ b/apps/settings/l10n/sl.json
@@ -6,10 +6,10 @@
"Sending…" : "Poteka pošiljanje ...",
"Email sent" : "Elektronsko sporočilo je poslano",
"Private" : "Zasebno",
- "Don't synchronize to servers" : "Ne usklajuj s strežniki",
- "Trusted" : "Varni strežniki",
+ "Local" : "Krajevno",
+ "Federated" : "Zvezno",
"Only synchronize to trusted servers" : "Usklajuj le z zaupanja vrednimi strežniki",
- "Public" : "Javno",
+ "Published" : "Objavljeno",
"Synchronize to trusted servers and the global and public address book" : "Usklajuj z varnimi strežniki in splošnimi in javnimi imeniki",
"Verify" : "Overi",
"Verifying …" : "Poteka overjanje ...",
@@ -367,9 +367,11 @@
"Expire after " : "Povezava naj preteče po",
"days" : "dneh.",
"Enforce expiration date" : "Vsili datum preteka",
+ "Allow users to share via link and emails" : "Uporabnikom dovoli omogočanje souporabe s povezavami in elektronskimi sporočili",
"Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak",
"Always ask for a password" : "Vedno zahtevaj geslo",
"Enforce password protection" : "Vsili zaščito z geslom",
+ "Set default expiration date" : "Nastavi privzeti datum poteka",
"Allow resharing" : "Dovoli nadaljnje omogočanje souporabe",
"Allow sharing with groups" : "Dovoli souporabo s skupinami",
"Restrict users to only share with users in their groups" : "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine",
@@ -377,8 +379,7 @@
"These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, nimajo pa dovoljenja za omogočanje souporabe.",
"Allow username autocompletion in share dialog" : "Dovoli samodejno dopolnjevanje uporabniških imen v oknu omogočanja souporabe",
"Allow username autocompletion to users within the same groups" : "Dovoli samodejno dopolnjevanje uporabniških imen znotraj iste skupine",
- "Allow username autocompletion to users based on phonebook matches" : "Dovoli samodejno dopolnjevanje uporabniških imen glede na zadetke telefonskega imenika",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "Če je omogočeno samodejno dopolnjevanje »v isti skupini« ali pa »po telefonskem imeniku«, se zadetek pokaže, če je uporabnik v katerikoli od teh zbirk.",
+ "Allow username autocompletion to users based on phone number integration" : "Dovoli samodejno dopolnjevanje uporabniških imen po telefonskih številkah",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Dovoli samodejno dokončanje uporabniškega imena pri vpisu polnega imena ali elektronskega naslova (prezrta je zahteva telefonskega imenika in iste skupine).",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Pokaži izjavo o omejitvi odgovornosti pri uporabi javnih povezav za pošiljanje (če je onemogočen prikaz seznama datotek).",
"This text will be shown on the public link upload page when the file list is hidden." : "Besedilo izjave o omejitvi odgovornosti, ki bo izpisano v oknu za pošiljanje, ko je možnost prikaza seznama datotek onemogočena.",
@@ -423,11 +424,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Če uporabljate za povezavo z oblakom Nextcloud programe tretjih oseb, najprej ustvarite in nastavite gesla za vsak program, preden omogočite dvostopenjsko overitev.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Prišlo je do napake. Uvoziti je treba ustrezno ASCII kodirano potrdilo PEM.",
"Valid until {date}" : "Veljavno do {date}",
- "Local" : "Krajevno",
"Only visible to local users" : "Vidno le krajevnim uporabnikom",
"Only visible to you" : "Vidno le vam",
"Contacts" : "Stiki",
"Visible to local users and to trusted servers" : "Vidno le krajevnim uporabnikom in odobrenim strežnikom",
+ "Public" : "Javno",
"Will be synced to a global and public address book" : "Podatki bodo usklajeni s splošnimi in javnimi imeniki",
"by" : "s strani",
"SSL Root Certificates" : "Korenska potrdila SSL",
@@ -442,6 +443,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Dovoli samodejno dokončanje uporabniškega imena v pogovornem oknu souporabe. Pri onemogočeni možnosti je treba za prikaz vpisati celotno uporabniško ime oziroma elektronski naslov.",
"Restrict username autocompletion to users within the same groups" : "Omeji samodejno dokončanje uporabniškega imena na uporabnike znotraj iste skupine",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Pokaži besedilo izjave o omejitvi odgovornosti pri uporabi javnih povezav za pošiljanje (če je onemogočen prikaz seznama datotek).",
+ "Don't synchronize to servers" : "Ne usklajuj s strežniki",
+ "Trusted" : "Varni strežniki",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Dovoli samodejno dokončanje uporabniškega imena pri določanju souporabe (sicer je treba vpisati celotno ime ali elektronski naslov)."
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/sq.js b/apps/settings/l10n/sq.js
index eb28222d31e..b526f87be9e 100644
--- a/apps/settings/l10n/sq.js
+++ b/apps/settings/l10n/sq.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Sending…" : "dërgim",
"Email sent" : "Email-i u dërgua",
"Private" : "Private",
- "Public" : "Publiku",
+ "Local" : "Lokale",
"Verify" : "Verifiko",
"Verifying …" : "Duke verifikuar ...",
"Unable to change password" : "S’arrin të ndryshojë fjalëkalimin",
@@ -264,11 +264,11 @@ OC.L10N.register(
"Change password" : "Ndrysho fjalëkalimin",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ndodhi një gabim. Ju lutemi, ngarkoni një dëshmi PEM të koduar me ASCII.",
"Valid until {date}" : "E vlefshme deri më {date}",
- "Local" : "Lokale",
"Only visible to local users" : "E dukshme vetëm për përdoruesit lokal",
"Only visible to you" : "E dukshme vetëm për ju",
"Contacts" : "Kontaktet",
"Visible to local users and to trusted servers" : "E dukshme për përdoruesit lokal dhe serverat e besuar",
+ "Public" : "Publiku",
"Will be synced to a global and public address book" : "Do të sinkronizohet te një libër adresash publik dhe global",
"by" : "nga",
"SSL Root Certificates" : "Dëshmi SSL Rrënjë",
diff --git a/apps/settings/l10n/sq.json b/apps/settings/l10n/sq.json
index 3061293c963..b9b8cc611d1 100644
--- a/apps/settings/l10n/sq.json
+++ b/apps/settings/l10n/sq.json
@@ -6,7 +6,7 @@
"Sending…" : "dërgim",
"Email sent" : "Email-i u dërgua",
"Private" : "Private",
- "Public" : "Publiku",
+ "Local" : "Lokale",
"Verify" : "Verifiko",
"Verifying …" : "Duke verifikuar ...",
"Unable to change password" : "S’arrin të ndryshojë fjalëkalimin",
@@ -262,11 +262,11 @@
"Change password" : "Ndrysho fjalëkalimin",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ndodhi një gabim. Ju lutemi, ngarkoni një dëshmi PEM të koduar me ASCII.",
"Valid until {date}" : "E vlefshme deri më {date}",
- "Local" : "Lokale",
"Only visible to local users" : "E dukshme vetëm për përdoruesit lokal",
"Only visible to you" : "E dukshme vetëm për ju",
"Contacts" : "Kontaktet",
"Visible to local users and to trusted servers" : "E dukshme për përdoruesit lokal dhe serverat e besuar",
+ "Public" : "Publiku",
"Will be synced to a global and public address book" : "Do të sinkronizohet te një libër adresash publik dhe global",
"by" : "nga",
"SSL Root Certificates" : "Dëshmi SSL Rrënjë",
diff --git a/apps/settings/l10n/sr.js b/apps/settings/l10n/sr.js
index c0ad5f56887..d60687c5680 100644
--- a/apps/settings/l10n/sr.js
+++ b/apps/settings/l10n/sr.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Шаљем…",
"Email sent" : "Порука је послата",
"Private" : "Приватно",
- "Don't synchronize to servers" : "Не синхронизуј са сервером",
- "Trusted" : "Од поверења",
+ "Local" : "Локално",
"Only synchronize to trusted servers" : "Само синхронизује са серверима од поверења",
- "Public" : "Јавно",
"Synchronize to trusted servers and the global and public address book" : "Синхронизуј на сервере од поверења и глобалне и јавне адресаре",
"Verify" : "Провери",
"Verifying …" : "Проверавам …",
@@ -411,11 +409,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Поред лозинке, користите и други фактор да повећате безбедност Вашег налога.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Дошло је до грешке. Отпремите ASCII кодирани PEM сертификат.",
"Valid until {date}" : "Важи до {date}",
- "Local" : "Локално",
"Only visible to local users" : "Видљиво само локалним корисницима",
"Only visible to you" : "Видљиво само Вама",
"Contacts" : "Контакти",
"Visible to local users and to trusted servers" : "Видљиво локалним корисницима и серверима од поверења",
+ "Public" : "Јавно",
"Will be synced to a global and public address book" : "Биће синхронизовано на глобални и јавни адресар",
"by" : "од",
"SSL Root Certificates" : "SSL корени сертификат",
@@ -430,6 +428,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Дозволи самодовршавање корисничких имена у дијалогу за дељење. Ако је ово искључено, корисник ће морати да унесе пуно корисничко име или адресу е-поште.",
"Restrict username autocompletion to users within the same groups" : "Ограничи ауто-довршавање корисничких имена само за кориснике из исте групе",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Прикажи текст о ограђивању на јавној страни за отпремање (приказан је само када је сакривена листа фајлова)",
+ "Don't synchronize to servers" : "Не синхронизуј са сервером",
+ "Trusted" : "Од поверења",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Дозволи самодовршавање корисничких имена у дијалогу за дељење (ако је ово искључено, корисник ће морати да унесе пуно корисничко име или адресу е-поште)"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/settings/l10n/sr.json b/apps/settings/l10n/sr.json
index cc5770121b0..bed78d93ba5 100644
--- a/apps/settings/l10n/sr.json
+++ b/apps/settings/l10n/sr.json
@@ -6,10 +6,8 @@
"Sending…" : "Шаљем…",
"Email sent" : "Порука је послата",
"Private" : "Приватно",
- "Don't synchronize to servers" : "Не синхронизуј са сервером",
- "Trusted" : "Од поверења",
+ "Local" : "Локално",
"Only synchronize to trusted servers" : "Само синхронизује са серверима од поверења",
- "Public" : "Јавно",
"Synchronize to trusted servers and the global and public address book" : "Синхронизуј на сервере од поверења и глобалне и јавне адресаре",
"Verify" : "Провери",
"Verifying …" : "Проверавам …",
@@ -409,11 +407,11 @@
"Use a second factor besides your password to increase security for your account." : "Поред лозинке, користите и други фактор да повећате безбедност Вашег налога.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Дошло је до грешке. Отпремите ASCII кодирани PEM сертификат.",
"Valid until {date}" : "Важи до {date}",
- "Local" : "Локално",
"Only visible to local users" : "Видљиво само локалним корисницима",
"Only visible to you" : "Видљиво само Вама",
"Contacts" : "Контакти",
"Visible to local users and to trusted servers" : "Видљиво локалним корисницима и серверима од поверења",
+ "Public" : "Јавно",
"Will be synced to a global and public address book" : "Биће синхронизовано на глобални и јавни адресар",
"by" : "од",
"SSL Root Certificates" : "SSL корени сертификат",
@@ -428,6 +426,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Дозволи самодовршавање корисничких имена у дијалогу за дељење. Ако је ово искључено, корисник ће морати да унесе пуно корисничко име или адресу е-поште.",
"Restrict username autocompletion to users within the same groups" : "Ограничи ауто-довршавање корисничких имена само за кориснике из исте групе",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Прикажи текст о ограђивању на јавној страни за отпремање (приказан је само када је сакривена листа фајлова)",
+ "Don't synchronize to servers" : "Не синхронизуј са сервером",
+ "Trusted" : "Од поверења",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Дозволи самодовршавање корисничких имена у дијалогу за дељење (ако је ово искључено, корисник ће морати да унесе пуно корисничко име или адресу е-поште)"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/sv.js b/apps/settings/l10n/sv.js
index 1c5d2252147..c910b027575 100644
--- a/apps/settings/l10n/sv.js
+++ b/apps/settings/l10n/sv.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Skickar...",
"Email sent" : "E-post skickad",
"Private" : "Privat",
- "Don't synchronize to servers" : "Synkronisera inte till servrar",
- "Trusted" : "Betrodd",
+ "Local" : "Lokal",
"Only synchronize to trusted servers" : "Synkronisera endast med betrodda servrar",
- "Public" : "Offentlig",
"Synchronize to trusted servers and the global and public address book" : "Synkronisera med betrodda servrar och den globala och offentliga adressboken",
"Verify" : "Verifiera",
"Verifying …" : "Verifierar ...",
@@ -409,11 +407,11 @@ OC.L10N.register(
"Use a second factor besides your password to increase security for your account." : "Använd en andra faktor förutom ditt lösenord för att öka säkerheten för ditt konto.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ett fel uppstod. Vänligen ladda upp ett ASCII-kodad PEM-certifikat.",
"Valid until {date}" : "Giltig t.o.m. {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Endast synlig för lokala användare",
"Only visible to you" : "Endast synlig för dig",
"Contacts" : "Kontakter",
"Visible to local users and to trusted servers" : "Synlig för lokala användare och tillförlitliga servrar",
+ "Public" : "Offentlig",
"Will be synced to a global and public address book" : "Kommer att synkroniseras till global och offentlig adressbok",
"by" : "av",
"SSL Root Certificates" : "SSL Root certifikat",
@@ -427,6 +425,8 @@ OC.L10N.register(
"Set default expiration date for link shares" : "Ställ in standardutgångsdatum för länkade delningar",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Tillåt autokomplettering av användarnamn i delningsdialogen. Om detta är inaktiverat måste fullständigt användarnamn och epostadress anges.",
"Restrict username autocompletion to users within the same groups" : "Begränsa prediktion av användarnamn till användare inom samma grupper.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Visa friskrivningstext på offentliga uppladdningssidan. (Visas endast när fil-listan är gömd.)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Visa friskrivningstext på offentliga uppladdningssidan. (Visas endast när fil-listan är gömd.)",
+ "Don't synchronize to servers" : "Synkronisera inte till servrar",
+ "Trusted" : "Betrodd"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/settings/l10n/sv.json b/apps/settings/l10n/sv.json
index 5649e0d0511..b34f46207a9 100644
--- a/apps/settings/l10n/sv.json
+++ b/apps/settings/l10n/sv.json
@@ -6,10 +6,8 @@
"Sending…" : "Skickar...",
"Email sent" : "E-post skickad",
"Private" : "Privat",
- "Don't synchronize to servers" : "Synkronisera inte till servrar",
- "Trusted" : "Betrodd",
+ "Local" : "Lokal",
"Only synchronize to trusted servers" : "Synkronisera endast med betrodda servrar",
- "Public" : "Offentlig",
"Synchronize to trusted servers and the global and public address book" : "Synkronisera med betrodda servrar och den globala och offentliga adressboken",
"Verify" : "Verifiera",
"Verifying …" : "Verifierar ...",
@@ -407,11 +405,11 @@
"Use a second factor besides your password to increase security for your account." : "Använd en andra faktor förutom ditt lösenord för att öka säkerheten för ditt konto.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ett fel uppstod. Vänligen ladda upp ett ASCII-kodad PEM-certifikat.",
"Valid until {date}" : "Giltig t.o.m. {date}",
- "Local" : "Lokal",
"Only visible to local users" : "Endast synlig för lokala användare",
"Only visible to you" : "Endast synlig för dig",
"Contacts" : "Kontakter",
"Visible to local users and to trusted servers" : "Synlig för lokala användare och tillförlitliga servrar",
+ "Public" : "Offentlig",
"Will be synced to a global and public address book" : "Kommer att synkroniseras till global och offentlig adressbok",
"by" : "av",
"SSL Root Certificates" : "SSL Root certifikat",
@@ -425,6 +423,8 @@
"Set default expiration date for link shares" : "Ställ in standardutgångsdatum för länkade delningar",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Tillåt autokomplettering av användarnamn i delningsdialogen. Om detta är inaktiverat måste fullständigt användarnamn och epostadress anges.",
"Restrict username autocompletion to users within the same groups" : "Begränsa prediktion av användarnamn till användare inom samma grupper.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Visa friskrivningstext på offentliga uppladdningssidan. (Visas endast när fil-listan är gömd.)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Visa friskrivningstext på offentliga uppladdningssidan. (Visas endast när fil-listan är gömd.)",
+ "Don't synchronize to servers" : "Synkronisera inte till servrar",
+ "Trusted" : "Betrodd"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/th.js b/apps/settings/l10n/th.js
index e580c3a1b1f..4e54de25c90 100644
--- a/apps/settings/l10n/th.js
+++ b/apps/settings/l10n/th.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Saved" : "บันทึกแล้ว",
"Sending…" : "กำลังส่ง....",
"Email sent" : "ส่งอีเมลแล้ว",
+ "Local" : "ต้นทาง",
"Unable to change password" : "ไม่สามารถเปลี่ยนรหัสผ่าน",
"Very weak password" : "รหัสผ่านระดับต่ำมาก",
"Weak password" : "รหัสผ่านระดับต่ำ",
@@ -137,7 +138,6 @@ OC.L10N.register(
"Change password" : "เปลี่ยนรหัสผ่าน",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "เกิดข้อผิดพลาด กรุณาอัพโหลดใบรับรองเข้ารหัส ASCII PEM",
"Valid until {date}" : "ใช้ได้จนถึงวันที่ {date}",
- "Local" : "ต้นทาง",
"Contacts" : "ข้อมูลผู้ติดต่อ",
"by" : "โดย",
"SSL Root Certificates" : "ใบรับรอง SSL",
diff --git a/apps/settings/l10n/th.json b/apps/settings/l10n/th.json
index bdeb4abc570..f03e5998637 100644
--- a/apps/settings/l10n/th.json
+++ b/apps/settings/l10n/th.json
@@ -4,6 +4,7 @@
"Saved" : "บันทึกแล้ว",
"Sending…" : "กำลังส่ง....",
"Email sent" : "ส่งอีเมลแล้ว",
+ "Local" : "ต้นทาง",
"Unable to change password" : "ไม่สามารถเปลี่ยนรหัสผ่าน",
"Very weak password" : "รหัสผ่านระดับต่ำมาก",
"Weak password" : "รหัสผ่านระดับต่ำ",
@@ -135,7 +136,6 @@
"Change password" : "เปลี่ยนรหัสผ่าน",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "เกิดข้อผิดพลาด กรุณาอัพโหลดใบรับรองเข้ารหัส ASCII PEM",
"Valid until {date}" : "ใช้ได้จนถึงวันที่ {date}",
- "Local" : "ต้นทาง",
"Contacts" : "ข้อมูลผู้ติดต่อ",
"by" : "โดย",
"SSL Root Certificates" : "ใบรับรอง SSL",
diff --git a/apps/settings/l10n/tr.js b/apps/settings/l10n/tr.js
index da29c23f1d5..79b9209fd67 100644
--- a/apps/settings/l10n/tr.js
+++ b/apps/settings/l10n/tr.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "Gönderiliyor …",
"Email sent" : "E-posta gönderildi",
"Private" : "Özel",
- "Don't synchronize to servers" : "Sunucular ile eşitlenmesin",
- "Trusted" : "Güvenilen",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Yalnız mobil aygıt üzerinde Talk telefon numarası bütünleştirmesi ile eşleşen kişiler görebilir",
+ "Local" : "Yerel",
+ "Only visible to people on this instance and guests" : "Yalnız bu kopyadaki kişiler ve konuklar görebilir",
+ "Federated" : "Birleşik",
"Only synchronize to trusted servers" : "Yalnız güvenilen sunucular ile eşitlensin",
- "Public" : "Herkese açık",
+ "Published" : "Yayınlanmış",
"Synchronize to trusted servers and the global and public address book" : "Genel ve herkese açık adres defteri ile ve güvenilen sunucularla eşitlenir",
"Verify" : "Doğrula",
"Verifying …" : "Doğrulanıyor …",
@@ -382,8 +384,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Bu gruplar paylaşımları alabilir ancak başlatamaz.",
"Allow username autocompletion in share dialog" : "Paylaşım penceresinde kullanıcı adı otomatik olarak tamamlanabilsin",
"Allow username autocompletion to users within the same groups" : "Aynı gruplardaki kullanıcıların kullanıcı adları otomatik olarak tamamlanabilsin",
- "Allow username autocompletion to users based on phonebook matches" : "Telefon defterindeki eşleşmelere göre kullanıcı adları otomatik olarak tamamlanabilsin",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "\"Aynı grup\" ve \"telefon defteri eşleşmeleri\" etkinleştirilmiş ise. Kullanıcının görüntülenmesi için ikisinden birinde eşleşme olması yeterlidir.",
+ "Allow username autocompletion to users based on phone number integration" : "Telefon numarası bütünleştirmesi eşleşmelerine göre kullanıcı adları otomatik olarak tamamlanabilsin",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "\"Aynı grup\" ve \"telefon numarası bütünleştirmesi\" etkinleştirilmiş ise. Kullanıcının görüntülenmesi için ikisinden birinde eşleşme olması yeterlidir.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Tam ad ya da e-posta adresi yazılırken kullanıcı adı otomatik olarak tamamlanabilsin (aynı grupta olma ya da telefon defteri eşleşmesi yok sayılarak)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Herkese açık bağlantı yükleme sayfasındaki sorumluluk reddi bildirim metni (yalnız dosya listesi gizli iken görüntülenir)",
"This text will be shown on the public link upload page when the file list is hidden." : "Dosya listesi gizli iken herkese açık bağlantı yükleme sayfasında görüntülenecek sorumluluk reddi bildirimi metni.",
@@ -428,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Nextcloud bağlantısı kurmak için üçüncü taraf uygulamaları kullanıyorsanız, lütfen iki aşamalı kimlik doğrulamasını etkinleştirmeden önce her biri için bir uygulama parolası oluşturduğunuzdan ve yapılandırdığınızdan emin olun.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Bir sorun çıktı. Lütfen ASCII olarak kodlanmış PEM sertifikasını yükleyin.",
"Valid until {date}" : "{date} tarihine kadar geçerli",
- "Local" : "Yerel",
"Only visible to local users" : "Yalnız yerel kullanıcılar görebilir",
"Only visible to you" : "Yalnız siz görebilirsiniz",
"Contacts" : "Kişiler",
"Visible to local users and to trusted servers" : "Yerel kullanıcı ve güvenilen sunucular görebilir",
+ "Public" : "Herkese açık",
"Will be synced to a global and public address book" : "Genel ve herkese açık bir adres defteri ile eşitlenir",
"by" : "Kişi:",
"SSL Root Certificates" : "SSL Kök Sertifikaları",
@@ -447,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Bu seçenek etkinleştirildiğinde, paylaşma penceresindeki kullanıcı adı otomatik olarak tamamlanır. Devre dışı bırakıldığında tam kullanıcı adının ya da e-posta adresinin yazılması gerekir.",
"Restrict username autocompletion to users within the same groups" : "Aynı gruplardaki kullanıcıların kullanıcı adlarının otomatik tamamlanması kısıtlansın",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Herkese açık bağlantı yükleme sayfasındaki sorumluluk reddi bildirim metni (yalnız dosya listesi gizli iken görüntülenir).",
+ "Don't synchronize to servers" : "Sunucular ile eşitlenmesin",
+ "Trusted" : "Güvenilen",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Bu seçenek etkinleştirildiğinde, paylaşma penceresindeki kullanıcı adı otomatik olarak tamamlanır (devre dışı bırakıldığında tam kullanıcı adının ya da e-posta adresinin yazılması gerekir)"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/settings/l10n/tr.json b/apps/settings/l10n/tr.json
index 18f1910aa39..4e32320253f 100644
--- a/apps/settings/l10n/tr.json
+++ b/apps/settings/l10n/tr.json
@@ -6,10 +6,12 @@
"Sending…" : "Gönderiliyor …",
"Email sent" : "E-posta gönderildi",
"Private" : "Özel",
- "Don't synchronize to servers" : "Sunucular ile eşitlenmesin",
- "Trusted" : "Güvenilen",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "Yalnız mobil aygıt üzerinde Talk telefon numarası bütünleştirmesi ile eşleşen kişiler görebilir",
+ "Local" : "Yerel",
+ "Only visible to people on this instance and guests" : "Yalnız bu kopyadaki kişiler ve konuklar görebilir",
+ "Federated" : "Birleşik",
"Only synchronize to trusted servers" : "Yalnız güvenilen sunucular ile eşitlensin",
- "Public" : "Herkese açık",
+ "Published" : "Yayınlanmış",
"Synchronize to trusted servers and the global and public address book" : "Genel ve herkese açık adres defteri ile ve güvenilen sunucularla eşitlenir",
"Verify" : "Doğrula",
"Verifying …" : "Doğrulanıyor …",
@@ -380,8 +382,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Bu gruplar paylaşımları alabilir ancak başlatamaz.",
"Allow username autocompletion in share dialog" : "Paylaşım penceresinde kullanıcı adı otomatik olarak tamamlanabilsin",
"Allow username autocompletion to users within the same groups" : "Aynı gruplardaki kullanıcıların kullanıcı adları otomatik olarak tamamlanabilsin",
- "Allow username autocompletion to users based on phonebook matches" : "Telefon defterindeki eşleşmelere göre kullanıcı adları otomatik olarak tamamlanabilsin",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "\"Aynı grup\" ve \"telefon defteri eşleşmeleri\" etkinleştirilmiş ise. Kullanıcının görüntülenmesi için ikisinden birinde eşleşme olması yeterlidir.",
+ "Allow username autocompletion to users based on phone number integration" : "Telefon numarası bütünleştirmesi eşleşmelerine göre kullanıcı adları otomatik olarak tamamlanabilsin",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "\"Aynı grup\" ve \"telefon numarası bütünleştirmesi\" etkinleştirilmiş ise. Kullanıcının görüntülenmesi için ikisinden birinde eşleşme olması yeterlidir.",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Tam ad ya da e-posta adresi yazılırken kullanıcı adı otomatik olarak tamamlanabilsin (aynı grupta olma ya da telefon defteri eşleşmesi yok sayılarak)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Herkese açık bağlantı yükleme sayfasındaki sorumluluk reddi bildirim metni (yalnız dosya listesi gizli iken görüntülenir)",
"This text will be shown on the public link upload page when the file list is hidden." : "Dosya listesi gizli iken herkese açık bağlantı yükleme sayfasında görüntülenecek sorumluluk reddi bildirimi metni.",
@@ -426,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Nextcloud bağlantısı kurmak için üçüncü taraf uygulamaları kullanıyorsanız, lütfen iki aşamalı kimlik doğrulamasını etkinleştirmeden önce her biri için bir uygulama parolası oluşturduğunuzdan ve yapılandırdığınızdan emin olun.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Bir sorun çıktı. Lütfen ASCII olarak kodlanmış PEM sertifikasını yükleyin.",
"Valid until {date}" : "{date} tarihine kadar geçerli",
- "Local" : "Yerel",
"Only visible to local users" : "Yalnız yerel kullanıcılar görebilir",
"Only visible to you" : "Yalnız siz görebilirsiniz",
"Contacts" : "Kişiler",
"Visible to local users and to trusted servers" : "Yerel kullanıcı ve güvenilen sunucular görebilir",
+ "Public" : "Herkese açık",
"Will be synced to a global and public address book" : "Genel ve herkese açık bir adres defteri ile eşitlenir",
"by" : "Kişi:",
"SSL Root Certificates" : "SSL Kök Sertifikaları",
@@ -445,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Bu seçenek etkinleştirildiğinde, paylaşma penceresindeki kullanıcı adı otomatik olarak tamamlanır. Devre dışı bırakıldığında tam kullanıcı adının ya da e-posta adresinin yazılması gerekir.",
"Restrict username autocompletion to users within the same groups" : "Aynı gruplardaki kullanıcıların kullanıcı adlarının otomatik tamamlanması kısıtlansın",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Herkese açık bağlantı yükleme sayfasındaki sorumluluk reddi bildirim metni (yalnız dosya listesi gizli iken görüntülenir).",
+ "Don't synchronize to servers" : "Sunucular ile eşitlenmesin",
+ "Trusted" : "Güvenilen",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "Bu seçenek etkinleştirildiğinde, paylaşma penceresindeki kullanıcı adı otomatik olarak tamamlanır (devre dışı bırakıldığında tam kullanıcı adının ya da e-posta adresinin yazılması gerekir)"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/uk.js b/apps/settings/l10n/uk.js
index f9855cb5ee5..25e0cb76899 100644
--- a/apps/settings/l10n/uk.js
+++ b/apps/settings/l10n/uk.js
@@ -8,10 +8,8 @@ OC.L10N.register(
"Sending…" : "Відправка...",
"Email sent" : "Лист надіслано",
"Private" : "Закритий",
- "Don't synchronize to servers" : "Не синхронізовувати з серверами",
- "Trusted" : "Довіряємо",
+ "Local" : "Локально",
"Only synchronize to trusted servers" : "Синхронізовувати лише з серверами, яким довіряємо",
- "Public" : "Відкритий",
"Verify" : "Перевірити",
"Verifying …" : "Перевірка ...",
"Unable to change password" : "Неможливо змінити пароль",
@@ -345,11 +343,11 @@ OC.L10N.register(
"Change password" : "Змінити пароль",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Виникла помилка. Будь ласка вивантажте PEM сертифікат в ASCII-кодуванні.",
"Valid until {date}" : "Дійсно до {date}",
- "Local" : "Локально",
"Only visible to local users" : "Видимий тільки для локальних користувачів",
"Only visible to you" : "Видимий тільки вам",
"Contacts" : "Контакти",
"Visible to local users and to trusted servers" : "Видимий тільки локальним користувачам і довіреним серверам",
+ "Public" : "Відкритий",
"Will be synced to a global and public address book" : "Буде синхронізовано з системною та публічною адресною книгою",
"by" : "від",
"SSL Root Certificates" : "Кореневі сертифікати SSL",
@@ -361,6 +359,8 @@ OC.L10N.register(
"Execute one task with each page loaded" : "Виконати одне завдання для кожної завантаженої сторінки ",
"Allow users to share via link" : "Дозволити користувачам ділитися через посилання",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Дозволити автоматичне доповнення користувача в діалозі обміну. Якщо вимкнено, потрібно ввести ім'я користувача чи електронну адресу повністю.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Показати текст відмови від відповідальності на сторінці завантаження загальнодоступного посилання. (Показується лише тоді, коли список файлів приховано.)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Показати текст відмови від відповідальності на сторінці завантаження загальнодоступного посилання. (Показується лише тоді, коли список файлів приховано.)",
+ "Don't synchronize to servers" : "Не синхронізовувати з серверами",
+ "Trusted" : "Довіряємо"
},
"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/settings/l10n/uk.json b/apps/settings/l10n/uk.json
index 5a370e0f44f..3971cb4d08c 100644
--- a/apps/settings/l10n/uk.json
+++ b/apps/settings/l10n/uk.json
@@ -6,10 +6,8 @@
"Sending…" : "Відправка...",
"Email sent" : "Лист надіслано",
"Private" : "Закритий",
- "Don't synchronize to servers" : "Не синхронізовувати з серверами",
- "Trusted" : "Довіряємо",
+ "Local" : "Локально",
"Only synchronize to trusted servers" : "Синхронізовувати лише з серверами, яким довіряємо",
- "Public" : "Відкритий",
"Verify" : "Перевірити",
"Verifying …" : "Перевірка ...",
"Unable to change password" : "Неможливо змінити пароль",
@@ -343,11 +341,11 @@
"Change password" : "Змінити пароль",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Виникла помилка. Будь ласка вивантажте PEM сертифікат в ASCII-кодуванні.",
"Valid until {date}" : "Дійсно до {date}",
- "Local" : "Локально",
"Only visible to local users" : "Видимий тільки для локальних користувачів",
"Only visible to you" : "Видимий тільки вам",
"Contacts" : "Контакти",
"Visible to local users and to trusted servers" : "Видимий тільки локальним користувачам і довіреним серверам",
+ "Public" : "Відкритий",
"Will be synced to a global and public address book" : "Буде синхронізовано з системною та публічною адресною книгою",
"by" : "від",
"SSL Root Certificates" : "Кореневі сертифікати SSL",
@@ -359,6 +357,8 @@
"Execute one task with each page loaded" : "Виконати одне завдання для кожної завантаженої сторінки ",
"Allow users to share via link" : "Дозволити користувачам ділитися через посилання",
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Дозволити автоматичне доповнення користувача в діалозі обміну. Якщо вимкнено, потрібно ввести ім'я користувача чи електронну адресу повністю.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Показати текст відмови від відповідальності на сторінці завантаження загальнодоступного посилання. (Показується лише тоді, коли список файлів приховано.)"
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Показати текст відмови від відповідальності на сторінці завантаження загальнодоступного посилання. (Показується лише тоді, коли список файлів приховано.)",
+ "Don't synchronize to servers" : "Не синхронізовувати з серверами",
+ "Trusted" : "Довіряємо"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/settings/l10n/vi.js b/apps/settings/l10n/vi.js
index f0a627db9d7..85eacbed925 100644
--- a/apps/settings/l10n/vi.js
+++ b/apps/settings/l10n/vi.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Sending…" : "Đang gửi...",
"Email sent" : "Email đã được gửi",
"Private" : "Riêng tư",
- "Public" : "Công khai",
"Verify" : "Xác minh",
"Verifying …" : "Đang xác minh ...",
"Unable to change password" : "Không thể thay đổi mật khẩu",
@@ -261,6 +260,7 @@ OC.L10N.register(
"Only visible to you" : "Chỉ hiển thị với tôi",
"Contacts" : "Liên hệ",
"Visible to local users and to trusted servers" : "Hiển thị với local users và trusted servers",
+ "Public" : "Công khai",
"Will be synced to a global and public address book" : "Sẽ được đồng bộ hóa với công cộng và một sổ địa chỉ công khai",
"by" : "bởi",
"Common Name" : "Tên thông dụng",
diff --git a/apps/settings/l10n/vi.json b/apps/settings/l10n/vi.json
index 42c45479107..291a2015b08 100644
--- a/apps/settings/l10n/vi.json
+++ b/apps/settings/l10n/vi.json
@@ -6,7 +6,6 @@
"Sending…" : "Đang gửi...",
"Email sent" : "Email đã được gửi",
"Private" : "Riêng tư",
- "Public" : "Công khai",
"Verify" : "Xác minh",
"Verifying …" : "Đang xác minh ...",
"Unable to change password" : "Không thể thay đổi mật khẩu",
@@ -259,6 +258,7 @@
"Only visible to you" : "Chỉ hiển thị với tôi",
"Contacts" : "Liên hệ",
"Visible to local users and to trusted servers" : "Hiển thị với local users và trusted servers",
+ "Public" : "Công khai",
"Will be synced to a global and public address book" : "Sẽ được đồng bộ hóa với công cộng và một sổ địa chỉ công khai",
"by" : "bởi",
"Common Name" : "Tên thông dụng",
diff --git a/apps/settings/l10n/zh_CN.js b/apps/settings/l10n/zh_CN.js
index 9e52561e228..87d5f5b2bd3 100644
--- a/apps/settings/l10n/zh_CN.js
+++ b/apps/settings/l10n/zh_CN.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "正在发送…",
"Email sent" : "邮件已发送",
"Private" : "私有",
- "Don't synchronize to servers" : "不要同步到服务器",
- "Trusted" : "受信任",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "只对通过手机上 Talk 应用的电话号码整合功能匹配的人可见",
+ "Local" : "本地",
+ "Only visible to people on this instance and guests" : "仅对该实例上的人及来宾可见",
+ "Federated" : "联合云",
"Only synchronize to trusted servers" : "仅同步到受信任的服务器",
- "Public" : "公开",
+ "Published" : "已发布",
"Synchronize to trusted servers and the global and public address book" : "同步到受信任的服务器以及全局和公共地址簿",
"Verify" : "验证",
"Verifying …" : "正在验证...",
@@ -382,8 +384,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取共享,但无法向他人共享。",
"Allow username autocompletion in share dialog" : "在分享对话框中允许用户名自动完成",
"Allow username autocompletion to users within the same groups" : "允许自动完成同一组内的用户的用户名",
- "Allow username autocompletion to users based on phonebook matches" : "允许基于通讯录匹配自动完成用户的用户名",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "如果启用了“同组”自动完成和“通讯录匹配”,则匹配两者中的任何一个都足以显示用户。",
+ "Allow username autocompletion to users based on phone number integration" : "允许基于手机号码集成自动完成用户的用户名",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "如果启用了“同组”自动完成和“手机号码集成”,则匹配两者中的任何一个都足以显示用户",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "在输入全名或电子邮件地址时允许用户名自动完成 (忽略丢失的电话簿匹配和同属一个小组的匹配)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "在公开链接上传页中显示免责声明。(仅当文件列表隐藏时显示。)",
"This text will be shown on the public link upload page when the file list is hidden." : "这些内容将在公开链接上传页中当文件列表隐藏时显示。",
@@ -428,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "如果您使用第三方应用程序连接到 Nextcloud,请确保在启用第二因素身份验证之前为每个应用程序创建和配置应用程序密码。",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "发生错误。请上传 ASCII 编码的 PEM 证书。",
"Valid until {date}" : "有效期至 {date}",
- "Local" : "本地",
"Only visible to local users" : "仅对本地用户可见",
"Only visible to you" : "仅您自己可见",
"Contacts" : "联系人",
"Visible to local users and to trusted servers" : "仅对本地用户和信任的服务器可见",
+ "Public" : "公开",
"Will be synced to a global and public address book" : "将同步到全局和公开地址簿中",
"by" : "由",
"SSL Root Certificates" : "SSL 根证书",
@@ -447,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "在共享对话框中允许用户名自动完成。 如果被禁用,则需要输入完整的用户名或电子邮件地址。",
"Restrict username autocompletion to users within the same groups" : "将用户名自动补全限制为相同组中的用户",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "在公开链接上传页中显示免责声明。(仅当文件列表隐藏时显示。)",
+ "Don't synchronize to servers" : "不要同步到服务器",
+ "Trusted" : "受信任",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "允许在共享对话框中自动补全用户名。(如果被禁用,则需要输入完整的用户名或电子邮件地址。)"
},
"nplurals=1; plural=0;");
diff --git a/apps/settings/l10n/zh_CN.json b/apps/settings/l10n/zh_CN.json
index 85a227d606e..67dce394ddd 100644
--- a/apps/settings/l10n/zh_CN.json
+++ b/apps/settings/l10n/zh_CN.json
@@ -6,10 +6,12 @@
"Sending…" : "正在发送…",
"Email sent" : "邮件已发送",
"Private" : "私有",
- "Don't synchronize to servers" : "不要同步到服务器",
- "Trusted" : "受信任",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "只对通过手机上 Talk 应用的电话号码整合功能匹配的人可见",
+ "Local" : "本地",
+ "Only visible to people on this instance and guests" : "仅对该实例上的人及来宾可见",
+ "Federated" : "联合云",
"Only synchronize to trusted servers" : "仅同步到受信任的服务器",
- "Public" : "公开",
+ "Published" : "已发布",
"Synchronize to trusted servers and the global and public address book" : "同步到受信任的服务器以及全局和公共地址簿",
"Verify" : "验证",
"Verifying …" : "正在验证...",
@@ -380,8 +382,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取共享,但无法向他人共享。",
"Allow username autocompletion in share dialog" : "在分享对话框中允许用户名自动完成",
"Allow username autocompletion to users within the same groups" : "允许自动完成同一组内的用户的用户名",
- "Allow username autocompletion to users based on phonebook matches" : "允许基于通讯录匹配自动完成用户的用户名",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "如果启用了“同组”自动完成和“通讯录匹配”,则匹配两者中的任何一个都足以显示用户。",
+ "Allow username autocompletion to users based on phone number integration" : "允许基于手机号码集成自动完成用户的用户名",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "如果启用了“同组”自动完成和“手机号码集成”,则匹配两者中的任何一个都足以显示用户",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "在输入全名或电子邮件地址时允许用户名自动完成 (忽略丢失的电话簿匹配和同属一个小组的匹配)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "在公开链接上传页中显示免责声明。(仅当文件列表隐藏时显示。)",
"This text will be shown on the public link upload page when the file list is hidden." : "这些内容将在公开链接上传页中当文件列表隐藏时显示。",
@@ -426,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "如果您使用第三方应用程序连接到 Nextcloud,请确保在启用第二因素身份验证之前为每个应用程序创建和配置应用程序密码。",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "发生错误。请上传 ASCII 编码的 PEM 证书。",
"Valid until {date}" : "有效期至 {date}",
- "Local" : "本地",
"Only visible to local users" : "仅对本地用户可见",
"Only visible to you" : "仅您自己可见",
"Contacts" : "联系人",
"Visible to local users and to trusted servers" : "仅对本地用户和信任的服务器可见",
+ "Public" : "公开",
"Will be synced to a global and public address book" : "将同步到全局和公开地址簿中",
"by" : "由",
"SSL Root Certificates" : "SSL 根证书",
@@ -445,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "在共享对话框中允许用户名自动完成。 如果被禁用,则需要输入完整的用户名或电子邮件地址。",
"Restrict username autocompletion to users within the same groups" : "将用户名自动补全限制为相同组中的用户",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "在公开链接上传页中显示免责声明。(仅当文件列表隐藏时显示。)",
+ "Don't synchronize to servers" : "不要同步到服务器",
+ "Trusted" : "受信任",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "允许在共享对话框中自动补全用户名。(如果被禁用,则需要输入完整的用户名或电子邮件地址。)"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/settings/l10n/zh_HK.js b/apps/settings/l10n/zh_HK.js
index 5546a0c4384..e4ea9548d65 100644
--- a/apps/settings/l10n/zh_HK.js
+++ b/apps/settings/l10n/zh_HK.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "正在傳送……",
"Email sent" : "電子郵件已寄出",
"Private" : "私人",
- "Don't synchronize to servers" : "不要同步至伺服器",
- "Trusted" : "受信任",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "僅對透過 Talk 在手提電話上通過電話號碼整合進行匹配的人可見",
+ "Local" : "本地",
+ "Only visible to people on this instance and guests" : "僅對此安裝的人和來賓可見",
+ "Federated" : "已聯盟",
"Only synchronize to trusted servers" : "僅同步至受信任的伺服器",
- "Public" : "公開",
+ "Published" : "已發佈",
"Synchronize to trusted servers and the global and public address book" : "同步到受信任的伺服器以及全域與公開的通訊錄",
"Verify" : "驗證",
"Verifying …" : "正在驗證……",
@@ -382,8 +384,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "這些群組仍然能接受其他人的分享,但是沒有辦法發起分享。",
"Allow username autocompletion in share dialog" : "在共享對話框中允許用戶名自動完成",
"Allow username autocompletion to users within the same groups" : "允許對同一群組中的用戶自動完成用戶名",
- "Allow username autocompletion to users based on phonebook matches" : "允許根據電話簿匹配向用戶自動完成用戶名",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "如果啟用了自動完成功能“相同的群組”和“電話簿匹配”,則任何一個匹配都足以向用戶顯示。",
+ "Allow username autocompletion to users based on phone number integration" : "允許基於電話號碼整合的用戶自動完成用戶名",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "如果啟用了自動完成功能“相同的群組”和“電話號碼整合”,則任何一個匹配都足以向用戶顯示。",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "輸入全名或電郵地址時,允許用戶名自動完成(忽略缺少的電話簿匹配項,並且位於同一群組中)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "在公開的檔案連結和上傳頁面顯示免責聲明(僅在檔案列表隱藏的時候才會顯示)",
"This text will be shown on the public link upload page when the file list is hidden." : "這段文字會在公開檔案上傳頁面檔案列表被隱藏的時候顯示。",
@@ -428,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "如果您使用第三方應用程式來連線到 Nextcloud,請確保在啟用雙重認證前為每個應用程式設定應用程式密碼。",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "發生錯誤。請您上傳 ASCII 編碼的 PEM 證書。",
"Valid until {date}" : "{date} 前有效",
- "Local" : "本地",
"Only visible to local users" : "僅本地用戶可見",
"Only visible to you" : "僅對您可見",
"Contacts" : "聯絡人",
"Visible to local users and to trusted servers" : "僅本地用戶與信任的伺服器可見",
+ "Public" : "公開",
"Will be synced to a global and public address book" : "將會同步到全域公開的通訊錄",
"by" : "由",
"SSL Root Certificates" : "SSL 根憑證",
@@ -447,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "在分享對話框中允許用戶名自動完成。如果禁用此選項,則需要輸入完整的用戶名或電郵地址。",
"Restrict username autocompletion to users within the same groups" : "將使用戶名稱限制為僅相同群組的用戶可使用",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "在公開的檔案連結和上傳頁面顯示免責聲明。(只有在檔案清單隱藏的時候才會顯示。)",
+ "Don't synchronize to servers" : "不要同步至伺服器",
+ "Trusted" : "受信任",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "在分享對話框中允許用戶名稱自動完成(如果停用此選項,則必須輸入完整的用戶名稱或電郵地址)"
},
"nplurals=1; plural=0;");
diff --git a/apps/settings/l10n/zh_HK.json b/apps/settings/l10n/zh_HK.json
index 8ac68b7a0c3..144f2342394 100644
--- a/apps/settings/l10n/zh_HK.json
+++ b/apps/settings/l10n/zh_HK.json
@@ -6,10 +6,12 @@
"Sending…" : "正在傳送……",
"Email sent" : "電子郵件已寄出",
"Private" : "私人",
- "Don't synchronize to servers" : "不要同步至伺服器",
- "Trusted" : "受信任",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "僅對透過 Talk 在手提電話上通過電話號碼整合進行匹配的人可見",
+ "Local" : "本地",
+ "Only visible to people on this instance and guests" : "僅對此安裝的人和來賓可見",
+ "Federated" : "已聯盟",
"Only synchronize to trusted servers" : "僅同步至受信任的伺服器",
- "Public" : "公開",
+ "Published" : "已發佈",
"Synchronize to trusted servers and the global and public address book" : "同步到受信任的伺服器以及全域與公開的通訊錄",
"Verify" : "驗證",
"Verifying …" : "正在驗證……",
@@ -380,8 +382,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "這些群組仍然能接受其他人的分享,但是沒有辦法發起分享。",
"Allow username autocompletion in share dialog" : "在共享對話框中允許用戶名自動完成",
"Allow username autocompletion to users within the same groups" : "允許對同一群組中的用戶自動完成用戶名",
- "Allow username autocompletion to users based on phonebook matches" : "允許根據電話簿匹配向用戶自動完成用戶名",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "如果啟用了自動完成功能“相同的群組”和“電話簿匹配”,則任何一個匹配都足以向用戶顯示。",
+ "Allow username autocompletion to users based on phone number integration" : "允許基於電話號碼整合的用戶自動完成用戶名",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "如果啟用了自動完成功能“相同的群組”和“電話號碼整合”,則任何一個匹配都足以向用戶顯示。",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "輸入全名或電郵地址時,允許用戶名自動完成(忽略缺少的電話簿匹配項,並且位於同一群組中)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "在公開的檔案連結和上傳頁面顯示免責聲明(僅在檔案列表隱藏的時候才會顯示)",
"This text will be shown on the public link upload page when the file list is hidden." : "這段文字會在公開檔案上傳頁面檔案列表被隱藏的時候顯示。",
@@ -426,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "如果您使用第三方應用程式來連線到 Nextcloud,請確保在啟用雙重認證前為每個應用程式設定應用程式密碼。",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "發生錯誤。請您上傳 ASCII 編碼的 PEM 證書。",
"Valid until {date}" : "{date} 前有效",
- "Local" : "本地",
"Only visible to local users" : "僅本地用戶可見",
"Only visible to you" : "僅對您可見",
"Contacts" : "聯絡人",
"Visible to local users and to trusted servers" : "僅本地用戶與信任的伺服器可見",
+ "Public" : "公開",
"Will be synced to a global and public address book" : "將會同步到全域公開的通訊錄",
"by" : "由",
"SSL Root Certificates" : "SSL 根憑證",
@@ -445,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "在分享對話框中允許用戶名自動完成。如果禁用此選項,則需要輸入完整的用戶名或電郵地址。",
"Restrict username autocompletion to users within the same groups" : "將使用戶名稱限制為僅相同群組的用戶可使用",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "在公開的檔案連結和上傳頁面顯示免責聲明。(只有在檔案清單隱藏的時候才會顯示。)",
+ "Don't synchronize to servers" : "不要同步至伺服器",
+ "Trusted" : "受信任",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "在分享對話框中允許用戶名稱自動完成(如果停用此選項,則必須輸入完整的用戶名稱或電郵地址)"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/settings/l10n/zh_TW.js b/apps/settings/l10n/zh_TW.js
index 3086d610074..3c2b5b56d22 100644
--- a/apps/settings/l10n/zh_TW.js
+++ b/apps/settings/l10n/zh_TW.js
@@ -8,10 +8,12 @@ OC.L10N.register(
"Sending…" : "正在傳送……",
"Email sent" : "電子郵件已寄出",
"Private" : "私人",
- "Don't synchronize to servers" : "不要同步至伺服器",
- "Trusted" : "受信任",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "僅對在手機上的 Talk 透過電話號碼整合符合的人們可見",
+ "Local" : "本地",
+ "Only visible to people on this instance and guests" : "僅對此站台上的人們與訪客可見",
+ "Federated" : "已聯盟",
"Only synchronize to trusted servers" : "僅同步至受信任的伺服器",
- "Public" : "公開",
+ "Published" : "已發佈",
"Synchronize to trusted servers and the global and public address book" : "同步到受信任的伺服器以及全域與公開的通訊錄",
"Verify" : "驗證",
"Verifying …" : "正在驗證……",
@@ -370,9 +372,11 @@ OC.L10N.register(
"Expire after " : "在什麼時候過期",
"days" : "天",
"Enforce expiration date" : "強制設定到期日",
+ "Allow users to share via link and emails" : "允許使用者透過連結與電子郵件分享",
"Allow public uploads" : "允許公開上傳",
"Always ask for a password" : "總是詢問密碼",
"Enforce password protection" : "強制密碼保護",
+ "Set default expiration date" : "設定預設的過期日",
"Allow resharing" : "允許轉分享",
"Allow sharing with groups" : "允許與群組分享",
"Restrict users to only share with users in their groups" : "限制使用者僅能與他們群組中的其他使用者分享",
@@ -380,8 +384,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "這些群組仍然能接受其他人的分享,但是沒有辦法發起分享。",
"Allow username autocompletion in share dialog" : "在分享對話框中允許使用者名稱自動完成",
"Allow username autocompletion to users within the same groups" : "允許使用者自動完成在同一個群組中的使用者",
- "Allow username autocompletion to users based on phonebook matches" : "允許根據通訊錄的自動完成使用者名稱",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "若同時啟用「同一個群組」與「通訊錄相符」的自動完成,則符合其中一項條件就會顯示使用者。",
+ "Allow username autocompletion to users based on phone number integration" : "允許以電話號碼整合為基礎的使用者名稱自動完成",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "若同時啟用「同一個群組」與「電話號碼整合」的自動完成,則符合其中一項條件就會顯示使用者。",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "輸入全名或電子郵件地址時,允許使用者名稱自動完成(忽略缺少的通訊錄相符,以及在同一個群組中的)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "在公開的檔案連結和上傳頁面顯示免責聲明(僅在檔案列表隱藏的時候才會顯示)",
"This text will be shown on the public link upload page when the file list is hidden." : "這段文字會在公開檔案上傳頁面檔案列表被隱藏的時候顯示。",
@@ -426,11 +430,11 @@ OC.L10N.register(
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "如果您使用第三方應用程式來連線到 Nextcloud,請確保在啟用雙因素驗證前為每個應用程式設定應用程式密碼。",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "發生錯誤。請您上傳 ASCII 編碼的 PEM 證書。",
"Valid until {date}" : "{date} 前有效",
- "Local" : "本地",
"Only visible to local users" : "僅本地使用者可見",
"Only visible to you" : "僅對您可見",
"Contacts" : "聯絡人",
"Visible to local users and to trusted servers" : "僅本地使用者與信任的伺服器可見",
+ "Public" : "公開",
"Will be synced to a global and public address book" : "將會同步到全域公開的通訊錄",
"by" : "由",
"SSL Root Certificates" : "SSL 根憑證",
@@ -445,6 +449,8 @@ OC.L10N.register(
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "允許使用者名稱自動完成在分享對話框,如果停用這個功能,必須輸入完整的使用者名稱或電子郵件地址。",
"Restrict username autocompletion to users within the same groups" : "將使用者名稱限制為僅相同群組的使用者可使用",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "在公開的檔案連結和上傳頁面顯示免責聲明。(只有在檔案清單隱藏的時候才會顯示。)",
+ "Don't synchronize to servers" : "不要同步至伺服器",
+ "Trusted" : "受信任",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "在分享對話框中允許使用者名稱自動完成(如果停用此選項,則必須輸入完整的使用者名稱或電子郵件地址)"
},
"nplurals=1; plural=0;");
diff --git a/apps/settings/l10n/zh_TW.json b/apps/settings/l10n/zh_TW.json
index 0d3368e22d9..335d3746823 100644
--- a/apps/settings/l10n/zh_TW.json
+++ b/apps/settings/l10n/zh_TW.json
@@ -6,10 +6,12 @@
"Sending…" : "正在傳送……",
"Email sent" : "電子郵件已寄出",
"Private" : "私人",
- "Don't synchronize to servers" : "不要同步至伺服器",
- "Trusted" : "受信任",
+ "Only visible to people matched via phone number integration through Talk on mobile" : "僅對在手機上的 Talk 透過電話號碼整合符合的人們可見",
+ "Local" : "本地",
+ "Only visible to people on this instance and guests" : "僅對此站台上的人們與訪客可見",
+ "Federated" : "已聯盟",
"Only synchronize to trusted servers" : "僅同步至受信任的伺服器",
- "Public" : "公開",
+ "Published" : "已發佈",
"Synchronize to trusted servers and the global and public address book" : "同步到受信任的伺服器以及全域與公開的通訊錄",
"Verify" : "驗證",
"Verifying …" : "正在驗證……",
@@ -368,9 +370,11 @@
"Expire after " : "在什麼時候過期",
"days" : "天",
"Enforce expiration date" : "強制設定到期日",
+ "Allow users to share via link and emails" : "允許使用者透過連結與電子郵件分享",
"Allow public uploads" : "允許公開上傳",
"Always ask for a password" : "總是詢問密碼",
"Enforce password protection" : "強制密碼保護",
+ "Set default expiration date" : "設定預設的過期日",
"Allow resharing" : "允許轉分享",
"Allow sharing with groups" : "允許與群組分享",
"Restrict users to only share with users in their groups" : "限制使用者僅能與他們群組中的其他使用者分享",
@@ -378,8 +382,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "這些群組仍然能接受其他人的分享,但是沒有辦法發起分享。",
"Allow username autocompletion in share dialog" : "在分享對話框中允許使用者名稱自動完成",
"Allow username autocompletion to users within the same groups" : "允許使用者自動完成在同一個群組中的使用者",
- "Allow username autocompletion to users based on phonebook matches" : "允許根據通訊錄的自動完成使用者名稱",
- "If autocompletion \"same group\" and \"phonebook matches\" are enabled a match in either is enough to show the user." : "若同時啟用「同一個群組」與「通訊錄相符」的自動完成,則符合其中一項條件就會顯示使用者。",
+ "Allow username autocompletion to users based on phone number integration" : "允許以電話號碼整合為基礎的使用者名稱自動完成",
+ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "若同時啟用「同一個群組」與「電話號碼整合」的自動完成,則符合其中一項條件就會顯示使用者。",
"Allow username autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "輸入全名或電子郵件地址時,允許使用者名稱自動完成(忽略缺少的通訊錄相符,以及在同一個群組中的)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "在公開的檔案連結和上傳頁面顯示免責聲明(僅在檔案列表隱藏的時候才會顯示)",
"This text will be shown on the public link upload page when the file list is hidden." : "這段文字會在公開檔案上傳頁面檔案列表被隱藏的時候顯示。",
@@ -424,11 +428,11 @@
"If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "如果您使用第三方應用程式來連線到 Nextcloud,請確保在啟用雙因素驗證前為每個應用程式設定應用程式密碼。",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "發生錯誤。請您上傳 ASCII 編碼的 PEM 證書。",
"Valid until {date}" : "{date} 前有效",
- "Local" : "本地",
"Only visible to local users" : "僅本地使用者可見",
"Only visible to you" : "僅對您可見",
"Contacts" : "聯絡人",
"Visible to local users and to trusted servers" : "僅本地使用者與信任的伺服器可見",
+ "Public" : "公開",
"Will be synced to a global and public address book" : "將會同步到全域公開的通訊錄",
"by" : "由",
"SSL Root Certificates" : "SSL 根憑證",
@@ -443,6 +447,8 @@
"Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "允許使用者名稱自動完成在分享對話框,如果停用這個功能,必須輸入完整的使用者名稱或電子郵件地址。",
"Restrict username autocompletion to users within the same groups" : "將使用者名稱限制為僅相同群組的使用者可使用",
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "在公開的檔案連結和上傳頁面顯示免責聲明。(只有在檔案清單隱藏的時候才會顯示。)",
+ "Don't synchronize to servers" : "不要同步至伺服器",
+ "Trusted" : "受信任",
"Allow username autocompletion in share dialog (if this is disabled the full username or email address needs to be entered)" : "在分享對話框中允許使用者名稱自動完成(如果停用此選項,則必須輸入完整的使用者名稱或電子郵件地址)"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/settings/lib/Controller/UsersController.php b/apps/settings/lib/Controller/UsersController.php
index 02a0cda139e..c59c16666f2 100644
--- a/apps/settings/lib/Controller/UsersController.php
+++ b/apps/settings/lib/Controller/UsersController.php
@@ -46,7 +46,6 @@ use OC\KnownUser\KnownUserService;
use OC\L10N\Factory;
use OC\Security\IdentityProof\Manager;
use OC\User\Manager as UserManager;
-use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\Settings\BackgroundJobs\VerifyUserData;
use OCA\Settings\Events\BeforeTemplateRenderedEvent;
use OCA\User_LDAP\User_Proxy;
@@ -401,15 +400,11 @@ class UsersController extends Controller {
$data[IAccountManager::PROPERTY_DISPLAYNAME] = ['value' => $displayname, 'scope' => $displaynameScope];
$data[IAccountManager::PROPERTY_EMAIL] = ['value' => $email, 'scope' => $emailScope];
}
- if ($this->appManager->isEnabledForUser('federatedfilesharing')) {
- $shareProvider = \OC::$server->query(FederatedShareProvider::class);
- if ($shareProvider->isLookupServerUploadEnabled()) {
- $data[IAccountManager::PROPERTY_WEBSITE] = ['value' => $website, 'scope' => $websiteScope];
- $data[IAccountManager::PROPERTY_ADDRESS] = ['value' => $address, 'scope' => $addressScope];
- $data[IAccountManager::PROPERTY_PHONE] = ['value' => $phone, 'scope' => $phoneScope];
- $data[IAccountManager::PROPERTY_TWITTER] = ['value' => $twitter, 'scope' => $twitterScope];
- }
- }
+ $data[IAccountManager::PROPERTY_WEBSITE] = ['value' => $website, 'scope' => $websiteScope];
+ $data[IAccountManager::PROPERTY_ADDRESS] = ['value' => $address, 'scope' => $addressScope];
+ $data[IAccountManager::PROPERTY_PHONE] = ['value' => $phone, 'scope' => $phoneScope];
+ $data[IAccountManager::PROPERTY_TWITTER] = ['value' => $twitter, 'scope' => $twitterScope];
+
try {
$data = $this->saveUserSettings($user, $data);
if ($beforeData[IAccountManager::PROPERTY_PHONE]['value'] !== $data[IAccountManager::PROPERTY_PHONE]['value']) {
diff --git a/apps/settings/lib/Settings/Personal/PersonalInfo.php b/apps/settings/lib/Settings/Personal/PersonalInfo.php
index a853846fadd..7a0253d2be4 100644
--- a/apps/settings/lib/Settings/Personal/PersonalInfo.php
+++ b/apps/settings/lib/Settings/Personal/PersonalInfo.php
@@ -37,6 +37,7 @@ namespace OCA\Settings\Settings\Personal;
use OC\Accounts\AccountManager;
use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCP\Accounts\IAccount;
use OCP\Accounts\IAccountManager;
use OCP\App\IAppManager;
use OCP\AppFramework\Http\TemplateResponse;
@@ -96,7 +97,7 @@ class PersonalInfo implements ISettings {
$uid = \OC_User::getUser();
$user = $this->userManager->get($uid);
- $userData = $this->accountManager->getUser($user);
+ $account = $this->accountManager->getAccount($user);
// make sure FS is setup before querying storage related stuff...
\OC_Util::setupFS($user->getUID());
@@ -110,7 +111,7 @@ class PersonalInfo implements ISettings {
$languageParameters = $this->getLanguages($user);
$localeParameters = $this->getLocales($user);
- $messageParameters = $this->getMessageParameters($userData);
+ $messageParameters = $this->getMessageParameters($account);
$parameters = [
'total_space' => $totalSpace,
@@ -119,23 +120,23 @@ class PersonalInfo implements ISettings {
'quota' => $storageInfo['quota'],
'avatarChangeSupported' => $user->canChangeAvatar(),
'lookupServerUploadEnabled' => $lookupServerUploadEnabled,
- 'avatarScope' => $userData[IAccountManager::PROPERTY_AVATAR]['scope'],
+ 'avatarScope' => $account->getProperty(IAccountManager::PROPERTY_AVATAR)->getScope(),
'displayNameChangeSupported' => $user->canChangeDisplayName(),
- 'displayName' => $userData[IAccountManager::PROPERTY_DISPLAYNAME]['value'],
- 'displayNameScope' => $userData[IAccountManager::PROPERTY_DISPLAYNAME]['scope'],
- 'email' => $userData[IAccountManager::PROPERTY_EMAIL]['value'],
- 'emailScope' => $userData[IAccountManager::PROPERTY_EMAIL]['scope'],
- 'emailVerification' => $userData[IAccountManager::PROPERTY_EMAIL]['verified'],
- 'phone' => $userData[IAccountManager::PROPERTY_PHONE]['value'],
- 'phoneScope' => $userData[IAccountManager::PROPERTY_PHONE]['scope'],
- 'address' => $userData[IAccountManager::PROPERTY_ADDRESS]['value'],
- 'addressScope' => $userData[IAccountManager::PROPERTY_ADDRESS]['scope'],
- 'website' => $userData[IAccountManager::PROPERTY_WEBSITE]['value'],
- 'websiteScope' => $userData[IAccountManager::PROPERTY_WEBSITE]['scope'],
- 'websiteVerification' => $userData[IAccountManager::PROPERTY_WEBSITE]['verified'],
- 'twitter' => $userData[IAccountManager::PROPERTY_TWITTER]['value'],
- 'twitterScope' => $userData[IAccountManager::PROPERTY_TWITTER]['scope'],
- 'twitterVerification' => $userData[IAccountManager::PROPERTY_TWITTER]['verified'],
+ 'displayName' => $account->getProperty(IAccountManager::PROPERTY_DISPLAYNAME)->getValue(),
+ 'displayNameScope' => $account->getProperty(IAccountManager::PROPERTY_DISPLAYNAME)->getScope(),
+ 'email' => $account->getProperty(IAccountManager::PROPERTY_EMAIL)->getValue(),
+ 'emailScope' => $account->getProperty(IAccountManager::PROPERTY_EMAIL)->getScope(),
+ 'emailVerification' => $account->getProperty(IAccountManager::PROPERTY_EMAIL)->getVerified(),
+ 'phone' => $account->getProperty(IAccountManager::PROPERTY_PHONE)->getValue(),
+ 'phoneScope' => $account->getProperty(IAccountManager::PROPERTY_PHONE)->getScope(),
+ 'address' => $account->getProperty(IAccountManager::PROPERTY_ADDRESS)->getValue(),
+ 'addressScope' => $account->getProperty(IAccountManager::PROPERTY_ADDRESS)->getScope(),
+ 'website' => $account->getProperty(IAccountManager::PROPERTY_WEBSITE)->getValue(),
+ 'websiteScope' => $account->getProperty(IAccountManager::PROPERTY_WEBSITE)->getScope(),
+ 'websiteVerification' => $account->getProperty(IAccountManager::PROPERTY_WEBSITE)->getVerified(),
+ 'twitter' => $account->getProperty(IAccountManager::PROPERTY_TWITTER)->getValue(),
+ 'twitterScope' => $account->getProperty(IAccountManager::PROPERTY_TWITTER)->getScope(),
+ 'twitterVerification' => $account->getProperty(IAccountManager::PROPERTY_TWITTER)->getVerified(),
'groups' => $this->getGroups($user),
] + $messageParameters + $languageParameters + $localeParameters;
@@ -263,14 +264,14 @@ class PersonalInfo implements ISettings {
}
/**
- * @param array $userData
+ * @param IAccount $account
* @return array
*/
- private function getMessageParameters(array $userData): array {
+ private function getMessageParameters(IAccount $account): array {
$needVerifyMessage = [IAccountManager::PROPERTY_EMAIL, IAccountManager::PROPERTY_WEBSITE, IAccountManager::PROPERTY_TWITTER];
$messageParameters = [];
foreach ($needVerifyMessage as $property) {
- switch ($userData[$property]['verified']) {
+ switch ($account->getProperty($property)->getVerified()) {
case AccountManager::VERIFIED:
$message = $this->l->t('Verifying');
break;
diff --git a/apps/settings/templates/settings/admin/sharing.php b/apps/settings/templates/settings/admin/sharing.php
index 65e84d29120..3fc3f2a5c1e 100644
--- a/apps/settings/templates/settings/admin/sharing.php
+++ b/apps/settings/templates/settings/admin/sharing.php
@@ -183,12 +183,12 @@
<?php if ($_['restrictUserEnumerationToPhone'] === 'yes') {
print_unescaped('checked="checked"');
} ?> />
- <label for="shareapi_restrict_user_enumeration_to_phone"><?php p($l->t('Allow username autocompletion to users based on phonebook matches'));?></label><br />
+ <label for="shareapi_restrict_user_enumeration_to_phone"><?php p($l->t('Allow username autocompletion to users based on phone number integration'));?></label><br />
</p>
<p id="shareapi_restrict_user_enumeration_combinewarning_setting" class="indent <?php if ($_['shareAPIEnabled'] === 'no' || $_['allowShareDialogUserEnumeration'] === 'no') {
p('hidden');
}?>">
- <em><?php p($l->t('If autocompletion "same group" and "phonebook matches" are enabled a match in either is enough to show the user.'));?></em><br />
+ <em><?php p($l->t('If autocompletion "same group" and "phone number integration" are enabled a match in either is enough to show the user.'));?></em><br />
</p>
<p id="shareapi_restrict_user_enumeration_full_match_setting" class="indent <?php if ($_['shareAPIEnabled'] === 'no') {
p('hidden');
diff --git a/apps/settings/templates/settings/personal/personal.info.php b/apps/settings/templates/settings/personal/personal.info.php
index 84198b3c0c4..f2e3a51aad7 100644
--- a/apps/settings/templates/settings/personal/personal.info.php
+++ b/apps/settings/templates/settings/personal/personal.info.php
@@ -34,8 +34,8 @@ script('settings', [
]);
?>
-<div id="personal-settings">
- <div id="personal-settings-avatar-container" class="personal-settings-container">
+<div id="personal-settings" data-lookup-server-upload-enabled="<?php p($_['lookupServerUploadEnabled'] ? 'true' : 'false') ?>">
+<div id="personal-settings-avatar-container" class="personal-settings-container">
<div>
<form id="avatarform" class="section" method="post" action="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.postAvatar')); ?>">
<h3>
@@ -68,9 +68,7 @@ script('settings', [
</div>
<span class="icon-checkmark hidden"></span>
<span class="icon-error hidden" ></span>
- <?php if ($_['lookupServerUploadEnabled']) { ?>
<input type="hidden" id="avatarscope" value="<?php p($_['avatarScope']) ?>">
- <?php } ?>
</form>
</div>
<div class="personal-settings-setting-box personal-settings-group-box section">
@@ -125,7 +123,7 @@ script('settings', [
<span class="icon-checkmark hidden"></span>
<span class="icon-error hidden" ></span>
<?php if ($_['lookupServerUploadEnabled']) { ?>
- <input type="hidden" id="displaynamescope" value="<?php p($_['displayNameScope']) ?>">
+ <input type="hidden" id="displaynamescope" value="<?php p($_['displayNameScope']) ?>">
<?php } ?>
</form>
</div>
@@ -179,7 +177,6 @@ script('settings', [
<?php } ?>
</form>
</div>
- <?php if (!empty($_['phone']) || $_['lookupServerUploadEnabled']) { ?>
<div class="personal-settings-setting-box">
<form id="phoneform" class="section">
<h3>
@@ -190,21 +187,15 @@ script('settings', [
</span>
</div>
</h3>
- <input type="tel" id="phone" name="phone" <?php if (!$_['lookupServerUploadEnabled']) {
- print_unescaped('disabled="1"');
- } ?>
+ <input type="tel" id="phone" name="phone"
value="<?php p($_['phone']) ?>"
placeholder="<?php p($l->t('Your phone number')); ?>"
autocomplete="on" autocapitalize="none" autocorrect="off" />
<span class="icon-checkmark hidden"></span>
<span class="icon-error hidden" ></span>
- <?php if ($_['lookupServerUploadEnabled']) { ?>
<input type="hidden" id="phonescope" value="<?php p($_['phoneScope']) ?>">
- <?php } ?>
</form>
</div>
- <?php } ?>
- <?php if (!empty($_['address']) || $_['lookupServerUploadEnabled']) { ?>
<div class="personal-settings-setting-box">
<form id="addressform" class="section">
<h3>
@@ -215,21 +206,15 @@ script('settings', [
</span>
</div>
</h3>
- <input type="text" id="address" name="address" <?php if (!$_['lookupServerUploadEnabled']) {
- print_unescaped('disabled="1"');
- } ?>
+ <input type="text" id="address" name="address"
placeholder="<?php p($l->t('Your postal address')); ?>"
value="<?php p($_['address']) ?>"
autocomplete="on" autocapitalize="none" autocorrect="off" />
<span class="icon-checkmark hidden"></span>
<span class="icon-error hidden" ></span>
- <?php if ($_['lookupServerUploadEnabled']) { ?>
<input type="hidden" id="addressscope" value="<?php p($_['addressScope']) ?>">
- <?php } ?>
</form>
</div>
- <?php } ?>
- <?php if (!empty($_['website']) || $_['lookupServerUploadEnabled']) { ?>
<div class="personal-settings-setting-box">
<form id="websiteform" class="section">
<h3>
@@ -273,19 +258,12 @@ script('settings', [
<input type="url" name="website" id="website" value="<?php p($_['website']); ?>"
placeholder="<?php p($l->t('Link https://…')); ?>"
autocomplete="on" autocapitalize="none" autocorrect="off"
- <?php if (!$_['lookupServerUploadEnabled']) {
- print_unescaped('disabled="1"');
- } ?>
/>
<span class="icon-checkmark hidden"></span>
<span class="icon-error hidden" ></span>
- <?php if ($_['lookupServerUploadEnabled']) { ?>
<input type="hidden" id="websitescope" value="<?php p($_['websiteScope']) ?>">
- <?php } ?>
</form>
</div>
- <?php } ?>
- <?php if (!empty($_['twitter']) || $_['lookupServerUploadEnabled']) { ?>
<div class="personal-settings-setting-box">
<form id="twitterform" class="section">
<h3>
@@ -329,18 +307,12 @@ script('settings', [
<input type="text" name="twitter" id="twitter" value="<?php p($_['twitter']); ?>"
placeholder="<?php p($l->t('Twitter handle @…')); ?>"
autocomplete="on" autocapitalize="none" autocorrect="off"
- <?php if (!$_['lookupServerUploadEnabled']) {
- print_unescaped('disabled="1"');
- } ?>
/>
<span class="icon-checkmark hidden"></span>
<span class="icon-error hidden" ></span>
- <?php if ($_['lookupServerUploadEnabled']) { ?>
<input type="hidden" id="twitterscope" value="<?php p($_['twitterScope']) ?>">
- <?php } ?>
</form>
</div>
- <?php } ?>
</div>
<div class="profile-settings-container">
diff --git a/apps/settings/tests/Controller/UsersControllerTest.php b/apps/settings/tests/Controller/UsersControllerTest.php
index b14e8d00d60..f9652053de8 100644
--- a/apps/settings/tests/Controller/UsersControllerTest.php
+++ b/apps/settings/tests/Controller/UsersControllerTest.php
@@ -190,6 +190,7 @@ class UsersControllerTest extends \Test\TestCase {
public function testSetUserSettings($email, $validEmail, $expectedStatus) {
$controller = $this->getController(false, ['saveUserSettings']);
$user = $this->createMock(IUser::class);
+ $user->method('getUID')->willReturn('johndoe');
$this->userSession->method('getUser')->willReturn($user);
@@ -208,41 +209,41 @@ class UsersControllerTest extends \Test\TestCase {
IAccountManager::PROPERTY_DISPLAYNAME =>
[
'value' => 'Display name',
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => AccountManager::SCOPE_FEDERATED,
'verified' => AccountManager::NOT_VERIFIED,
],
IAccountManager::PROPERTY_ADDRESS =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
'verified' => AccountManager::NOT_VERIFIED,
],
IAccountManager::PROPERTY_WEBSITE =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
'verified' => AccountManager::NOT_VERIFIED,
],
IAccountManager::PROPERTY_EMAIL =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => AccountManager::SCOPE_FEDERATED,
'verified' => AccountManager::NOT_VERIFIED,
],
IAccountManager::PROPERTY_AVATAR =>
[
- 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY
+ 'scope' => AccountManager::SCOPE_FEDERATED
],
IAccountManager::PROPERTY_PHONE =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
'verified' => AccountManager::NOT_VERIFIED,
],
IAccountManager::PROPERTY_TWITTER =>
[
'value' => '',
- 'scope' => AccountManager::VISIBILITY_PRIVATE,
+ 'scope' => AccountManager::SCOPE_LOCAL,
'verified' => AccountManager::NOT_VERIFIED,
],
]);
@@ -255,19 +256,19 @@ class UsersControllerTest extends \Test\TestCase {
}
$result = $controller->setUserSettings(//
- AccountManager::VISIBILITY_CONTACTS_ONLY,
+ AccountManager::SCOPE_FEDERATED,
'displayName',
- AccountManager::VISIBILITY_CONTACTS_ONLY,
+ AccountManager::SCOPE_FEDERATED,
'47658468',
- AccountManager::VISIBILITY_CONTACTS_ONLY,
+ AccountManager::SCOPE_FEDERATED,
$email,
- AccountManager::VISIBILITY_CONTACTS_ONLY,
+ AccountManager::SCOPE_FEDERATED,
'nextcloud.com',
- AccountManager::VISIBILITY_CONTACTS_ONLY,
+ AccountManager::SCOPE_FEDERATED,
'street and city',
- AccountManager::VISIBILITY_CONTACTS_ONLY,
+ AccountManager::SCOPE_FEDERATED,
'@nextclouders',
- AccountManager::VISIBILITY_CONTACTS_ONLY
+ AccountManager::SCOPE_FEDERATED
);
$this->assertSame($expectedStatus, $result->getStatus());
diff --git a/apps/sharebymail/l10n/cs.js b/apps/sharebymail/l10n/cs.js
index 45a3aee8666..4eea5e47357 100644
--- a/apps/sharebymail/l10n/cs.js
+++ b/apps/sharebymail/l10n/cs.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"%1$s shared »%2$s« with you and wants to add" : "%1$s sdílí „%2$s“ a dodává",
"»%s« added a note to a file shared with you" : "„%s“ dodává poznámku k nasdílenému souboru",
"You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Právě jste s „%1$s“ nasdílel(a) %2$s. Sdílení bylo již příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %3$s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset ručně přeposlat.",
- "Password to access »%1$s« shared by you with %2$s" : "Heslo pro přístup k „%1$s“ sdílené vámi s %2$s",
+ "Password to access »%1$s« shared by you with %2$s" : "Heslo pro přístup k „%1$s“ nasdílenému vámi pro %2$s",
"This is the password:" : "Toto je heslo:",
"You can choose a different password at any time in the share dialog." : "V dialogu sdílení můžete kdykoliv vybrat jiné heslo.",
"Could not find share" : "Sdílení se nedaří nalézt",
diff --git a/apps/sharebymail/l10n/cs.json b/apps/sharebymail/l10n/cs.json
index f0574d8ba4e..d29dcab483a 100644
--- a/apps/sharebymail/l10n/cs.json
+++ b/apps/sharebymail/l10n/cs.json
@@ -39,7 +39,7 @@
"%1$s shared »%2$s« with you and wants to add" : "%1$s sdílí „%2$s“ a dodává",
"»%s« added a note to a file shared with you" : "„%s“ dodává poznámku k nasdílenému souboru",
"You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Právě jste s „%1$s“ nasdílel(a) %2$s. Sdílení bylo již příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %3$s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset ručně přeposlat.",
- "Password to access »%1$s« shared by you with %2$s" : "Heslo pro přístup k „%1$s“ sdílené vámi s %2$s",
+ "Password to access »%1$s« shared by you with %2$s" : "Heslo pro přístup k „%1$s“ nasdílenému vámi pro %2$s",
"This is the password:" : "Toto je heslo:",
"You can choose a different password at any time in the share dialog." : "V dialogu sdílení můžete kdykoliv vybrat jiné heslo.",
"Could not find share" : "Sdílení se nedaří nalézt",
diff --git a/apps/sharebymail/l10n/de.js b/apps/sharebymail/l10n/de.js
index 9eb2fdcf75a..f7ed2b1b692 100644
--- a/apps/sharebymail/l10n/de.js
+++ b/apps/sharebymail/l10n/de.js
@@ -24,6 +24,7 @@ OC.L10N.register(
"Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ",
"Password to access %1$s was sent to you" : " Passwort für den Zugriff auf %1$s wurde an Dich versandt ",
"Password to access {file} was sent to you" : " Passwort für den Zugriff auf {file} wurde an Dich versandt ",
+ "Sharing %1$s failed, because this item is already shared with user %2$s" : "Freigabe von %1$s fehlgeschlagen, da dieses Element bereits für den Benutzer freigegeben ist %2$s",
"We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte gebe in Deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.",
"Failed to send share by email" : "Fehler beim Senden der Freigabe per E-Mail",
"%1$s shared »%2$s« with you" : "%1$s hat »%2$s« mit Dir geteilt",
diff --git a/apps/sharebymail/l10n/de.json b/apps/sharebymail/l10n/de.json
index 315febd3118..6c9e2d1a99e 100644
--- a/apps/sharebymail/l10n/de.json
+++ b/apps/sharebymail/l10n/de.json
@@ -22,6 +22,7 @@
"Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ",
"Password to access %1$s was sent to you" : " Passwort für den Zugriff auf %1$s wurde an Dich versandt ",
"Password to access {file} was sent to you" : " Passwort für den Zugriff auf {file} wurde an Dich versandt ",
+ "Sharing %1$s failed, because this item is already shared with user %2$s" : "Freigabe von %1$s fehlgeschlagen, da dieses Element bereits für den Benutzer freigegeben ist %2$s",
"We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte gebe in Deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.",
"Failed to send share by email" : "Fehler beim Senden der Freigabe per E-Mail",
"%1$s shared »%2$s« with you" : "%1$s hat »%2$s« mit Dir geteilt",
diff --git a/apps/sharebymail/l10n/it.js b/apps/sharebymail/l10n/it.js
index caf4b91838d..cfddc5dd049 100644
--- a/apps/sharebymail/l10n/it.js
+++ b/apps/sharebymail/l10n/it.js
@@ -24,6 +24,7 @@ OC.L10N.register(
"Password to access {file} was sent to {email}" : "La password per accedere a {file} ti è stata inviata a {email}",
"Password to access %1$s was sent to you" : "La password per accedere a %1$s ti è stata inviata",
"Password to access {file} was sent to you" : "La password per accedere a {file} ti è stata inviata",
+ "Sharing %1$s failed, because this item is already shared with user %2$s" : "Condivisione di %1$s non riuscita, poiché l'oggetto è già condiviso con l'utente %2$s",
"We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non possiamo inviarti la password generata automaticamente. Imposta un indirizzo di posta valido nelle impostazioni personali e prova ancora.",
"Failed to send share by email" : "Invio non riuscito della condivisione tramite email",
"%1$s shared »%2$s« with you" : "%1$s ha condiviso «%2$s» con te",
diff --git a/apps/sharebymail/l10n/it.json b/apps/sharebymail/l10n/it.json
index c154c913cfc..ec16a249cb3 100644
--- a/apps/sharebymail/l10n/it.json
+++ b/apps/sharebymail/l10n/it.json
@@ -22,6 +22,7 @@
"Password to access {file} was sent to {email}" : "La password per accedere a {file} ti è stata inviata a {email}",
"Password to access %1$s was sent to you" : "La password per accedere a %1$s ti è stata inviata",
"Password to access {file} was sent to you" : "La password per accedere a {file} ti è stata inviata",
+ "Sharing %1$s failed, because this item is already shared with user %2$s" : "Condivisione di %1$s non riuscita, poiché l'oggetto è già condiviso con l'utente %2$s",
"We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non possiamo inviarti la password generata automaticamente. Imposta un indirizzo di posta valido nelle impostazioni personali e prova ancora.",
"Failed to send share by email" : "Invio non riuscito della condivisione tramite email",
"%1$s shared »%2$s« with you" : "%1$s ha condiviso «%2$s» con te",
diff --git a/apps/sharebymail/l10n/pt_BR.js b/apps/sharebymail/l10n/pt_BR.js
index 5dedbeca3df..b866e99ccff 100644
--- a/apps/sharebymail/l10n/pt_BR.js
+++ b/apps/sharebymail/l10n/pt_BR.js
@@ -50,6 +50,6 @@ OC.L10N.register(
"Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite que os usuários compartilhem um link personalizado para um arquivo ou pasta, inserindo um endereço de e-mail.",
"Send password by mail" : "Enviar senha por e-mail",
"Reply to initiator" : "Responder ao iniciador",
- "Enforce password protection" : "Reforce a proteção por senha"
+ "Enforce password protection" : "Aplicar proteção por senha"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/sharebymail/l10n/pt_BR.json b/apps/sharebymail/l10n/pt_BR.json
index 35c10d33953..aba1ec34056 100644
--- a/apps/sharebymail/l10n/pt_BR.json
+++ b/apps/sharebymail/l10n/pt_BR.json
@@ -48,6 +48,6 @@
"Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite que os usuários compartilhem um link personalizado para um arquivo ou pasta, inserindo um endereço de e-mail.",
"Send password by mail" : "Enviar senha por e-mail",
"Reply to initiator" : "Responder ao iniciador",
- "Enforce password protection" : "Reforce a proteção por senha"
+ "Enforce password protection" : "Aplicar proteção por senha"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/cs.js b/apps/updatenotification/l10n/cs.js
index 9d1d877ad74..90b47b2a4d9 100644
--- a/apps/updatenotification/l10n/cs.js
+++ b/apps/updatenotification/l10n/cs.js
@@ -18,7 +18,7 @@ OC.L10N.register(
"Apps with compatible version" : "Aplikace, které existují v kompatibilní verzi",
"Open updater" : "Otevřít nástroj pro aktualizaci",
"Download now" : "Stáhnout nyní",
- "Please use the command line updater to update." : "Aktualizujte přes příkazový řádek.",
+ "Please use the command line updater to update." : "Aktualizaci proveďte nástrojem z příkazového řádku.",
"What's new?" : "Co je nového?",
"The update check is not yet finished. Please refresh the page." : "Kontrola aktualizací ještě neskončila. Načtěte stránku znovu.",
"Your version is up to date." : "Používáte nejnovější verzi.",
@@ -38,7 +38,7 @@ OC.L10N.register(
"<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všechny</strong> aplikace mají k dispozici kompatibilní verzi s verzí tohoto Nextcloudu",
"View changelog" : "Zobrazit souhrn změn",
"Enterprise" : "Podnikové",
- "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pro podnikové nasazení. Poskytuje vždy nejnovější opravy, ale nebude hned aktualizováno na další hlavní vydání. K tomu dojde až Nextcloud GmbH dokončí další zodolnění a testování pro velká a kritická nasazení. Tento kanál je k dispozici pouze zákazníkům a poskytuje balíček Nextcloud Enterprise.",
+ "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pro podnikové nasazení. Poskytuje vždy nejnovější opravy, ale nebude hned aktualizováno na další hlavní vydání. K tomu dochází až když Nextcloud GmbH dokončí další zodolnění a testování pro rozsáhlá a kritická nasazení. Tento kanál je k dispozici pouze zákazníkům a poskytuje balíček Nextcloud Enterprise.",
"Stable" : "Stabilní",
"The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Nejnovější stabilní verze. Je vhodná pro běžné používání a vždy ji lze aktualizovat na nejnovější hlavní verzi",
"Beta" : "Vývojové",
diff --git a/apps/updatenotification/l10n/cs.json b/apps/updatenotification/l10n/cs.json
index 0ffca7e75dd..a1e6efa4ff2 100644
--- a/apps/updatenotification/l10n/cs.json
+++ b/apps/updatenotification/l10n/cs.json
@@ -16,7 +16,7 @@
"Apps with compatible version" : "Aplikace, které existují v kompatibilní verzi",
"Open updater" : "Otevřít nástroj pro aktualizaci",
"Download now" : "Stáhnout nyní",
- "Please use the command line updater to update." : "Aktualizujte přes příkazový řádek.",
+ "Please use the command line updater to update." : "Aktualizaci proveďte nástrojem z příkazového řádku.",
"What's new?" : "Co je nového?",
"The update check is not yet finished. Please refresh the page." : "Kontrola aktualizací ještě neskončila. Načtěte stránku znovu.",
"Your version is up to date." : "Používáte nejnovější verzi.",
@@ -36,7 +36,7 @@
"<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všechny</strong> aplikace mají k dispozici kompatibilní verzi s verzí tohoto Nextcloudu",
"View changelog" : "Zobrazit souhrn změn",
"Enterprise" : "Podnikové",
- "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pro podnikové nasazení. Poskytuje vždy nejnovější opravy, ale nebude hned aktualizováno na další hlavní vydání. K tomu dojde až Nextcloud GmbH dokončí další zodolnění a testování pro velká a kritická nasazení. Tento kanál je k dispozici pouze zákazníkům a poskytuje balíček Nextcloud Enterprise.",
+ "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pro podnikové nasazení. Poskytuje vždy nejnovější opravy, ale nebude hned aktualizováno na další hlavní vydání. K tomu dochází až když Nextcloud GmbH dokončí další zodolnění a testování pro rozsáhlá a kritická nasazení. Tento kanál je k dispozici pouze zákazníkům a poskytuje balíček Nextcloud Enterprise.",
"Stable" : "Stabilní",
"The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Nejnovější stabilní verze. Je vhodná pro běžné používání a vždy ji lze aktualizovat na nejnovější hlavní verzi",
"Beta" : "Vývojové",
diff --git a/apps/updatenotification/l10n/it.js b/apps/updatenotification/l10n/it.js
index 198d4d9a25f..c162380b2de 100644
--- a/apps/updatenotification/l10n/it.js
+++ b/apps/updatenotification/l10n/it.js
@@ -13,7 +13,9 @@ OC.L10N.register(
"Update notification" : "Notifica di aggiornamento",
"Displays update notifications for Nextcloud and provides the SSO for the updater." : "Visualizza le notifiche degli aggiornamenti per Nextcloud e fornisce il SSO per lo strumento di aggiornamento.",
"The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible." : "La versione che stai eseguendo non è più mantenuta. Assicurati di aggiornare a una versione supportata non appena possibile.",
+ "Apps missing compatible version" : "Applicazioni senza versione compatibile",
"View in store" : "Visualizza nel negozio",
+ "Apps with compatible version" : "Applicazioni con versione compatibile",
"Open updater" : "Apri strumento di aggiornamento",
"Download now" : "Scarica ora",
"Please use the command line updater to update." : "Usa lo strumento di aggiornamento da riga di comando per aggiornare.",
@@ -30,8 +32,10 @@ OC.L10N.register(
"A new version is available: <strong>{newVersionString}</strong>" : "Una nuova versione è disponibile: <strong>{newVersionString}</strong>",
"Note that after a new release the update only shows up after the first minor release or later. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found. Learn more about updates and release channels at {link}" : "Nota che, dopo una nuova versione, l'aggiornamento viene visualizzato solo dopo la prima versione minore o successivamente. Rilasciamo nel tempo nuove versioni ai nostri utenti e, a volte, saltiamo una versione, se troviamo dei problemi. Ulteriori informazioni sugli aggiornamenti e sui canali di rilascio su {link} ",
"Checked on {lastCheckedDate}" : "Controllato il {lastCheckedDate}",
+ "Checking apps for compatible versions" : "Controllo di applicazioni con versioni compatibili",
"Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Assicurati che il tuo config.php non abbia <samp>appstoreenabled</samp> impostata a false.",
"Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Impossibile connettersi al negozio delle applicazioni o il negozio delle applicazioni non ha restituito alcun aggiornamento. Cerca manualmente gli aggiornamenti o assicurati che il server abbia accesso a Internet e possa collegarsi al negozio delle applicazioni.",
+ "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tutte</strong> le applicazioni hanno una versione compatibile disponibile per questa versione di Nextcloud",
"View changelog" : "Visualizza le novità",
"Enterprise" : "Enterprise",
"For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Per utilizzo aziendale. Fornisce sempre l'ultimo livello di patch, ma non sarà aggiornato immediatamente all'ultima versione principale. Tale aggiornamento sarà disponibile nel momento in cui Nextcloud GmbH avrà apportato miglioramenti della sicurezza, test su larga scala e installazioni in ambienti di importanza rilevante. Questo canale è disponibile solo per i clienti e fornisce il pacchetto Nextcloud Enterprise.",
@@ -39,6 +43,7 @@ OC.L10N.register(
"The most recent stable version. It is suited for regular use and will always update to the latest major version." : "La versione stabile più recente. È appropriata per l'utilizzo di tutti i giorni e sarà sempre aggiornata all'ultima versione principale.",
"Beta" : "Beta",
"A pre-release version only for testing new features, not for production environments." : "Una versione pre-rilascio solo per provare le nuove funzionalità, non per ambienti di produzione.",
+ "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app non ha una versione compatibile disponibile per questa versione di Nextcloud","<strong>%n</strong> app non hanno una versione compatibile disponibile per questa versione di Nextcloud"],
"Apps missing updates" : "Applicazioni non aggiornate",
"Apps with available updates" : "Applicazioni con aggiornamenti disponibili",
"Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota che, dopo una nuova versione, potrebbe essere necessario del tempo prima che sia mostrato qui. Rilasciamo nel tempo nuove versioni ai nostri utenti e, a volte, saltiamo una versione, se troviamo dei problemi.",
diff --git a/apps/updatenotification/l10n/it.json b/apps/updatenotification/l10n/it.json
index 5eb0cd8cbaa..08866795b9b 100644
--- a/apps/updatenotification/l10n/it.json
+++ b/apps/updatenotification/l10n/it.json
@@ -11,7 +11,9 @@
"Update notification" : "Notifica di aggiornamento",
"Displays update notifications for Nextcloud and provides the SSO for the updater." : "Visualizza le notifiche degli aggiornamenti per Nextcloud e fornisce il SSO per lo strumento di aggiornamento.",
"The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible." : "La versione che stai eseguendo non è più mantenuta. Assicurati di aggiornare a una versione supportata non appena possibile.",
+ "Apps missing compatible version" : "Applicazioni senza versione compatibile",
"View in store" : "Visualizza nel negozio",
+ "Apps with compatible version" : "Applicazioni con versione compatibile",
"Open updater" : "Apri strumento di aggiornamento",
"Download now" : "Scarica ora",
"Please use the command line updater to update." : "Usa lo strumento di aggiornamento da riga di comando per aggiornare.",
@@ -28,8 +30,10 @@
"A new version is available: <strong>{newVersionString}</strong>" : "Una nuova versione è disponibile: <strong>{newVersionString}</strong>",
"Note that after a new release the update only shows up after the first minor release or later. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found. Learn more about updates and release channels at {link}" : "Nota che, dopo una nuova versione, l'aggiornamento viene visualizzato solo dopo la prima versione minore o successivamente. Rilasciamo nel tempo nuove versioni ai nostri utenti e, a volte, saltiamo una versione, se troviamo dei problemi. Ulteriori informazioni sugli aggiornamenti e sui canali di rilascio su {link} ",
"Checked on {lastCheckedDate}" : "Controllato il {lastCheckedDate}",
+ "Checking apps for compatible versions" : "Controllo di applicazioni con versioni compatibili",
"Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Assicurati che il tuo config.php non abbia <samp>appstoreenabled</samp> impostata a false.",
"Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Impossibile connettersi al negozio delle applicazioni o il negozio delle applicazioni non ha restituito alcun aggiornamento. Cerca manualmente gli aggiornamenti o assicurati che il server abbia accesso a Internet e possa collegarsi al negozio delle applicazioni.",
+ "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tutte</strong> le applicazioni hanno una versione compatibile disponibile per questa versione di Nextcloud",
"View changelog" : "Visualizza le novità",
"Enterprise" : "Enterprise",
"For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Per utilizzo aziendale. Fornisce sempre l'ultimo livello di patch, ma non sarà aggiornato immediatamente all'ultima versione principale. Tale aggiornamento sarà disponibile nel momento in cui Nextcloud GmbH avrà apportato miglioramenti della sicurezza, test su larga scala e installazioni in ambienti di importanza rilevante. Questo canale è disponibile solo per i clienti e fornisce il pacchetto Nextcloud Enterprise.",
@@ -37,6 +41,7 @@
"The most recent stable version. It is suited for regular use and will always update to the latest major version." : "La versione stabile più recente. È appropriata per l'utilizzo di tutti i giorni e sarà sempre aggiornata all'ultima versione principale.",
"Beta" : "Beta",
"A pre-release version only for testing new features, not for production environments." : "Una versione pre-rilascio solo per provare le nuove funzionalità, non per ambienti di produzione.",
+ "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app non ha una versione compatibile disponibile per questa versione di Nextcloud","<strong>%n</strong> app non hanno una versione compatibile disponibile per questa versione di Nextcloud"],
"Apps missing updates" : "Applicazioni non aggiornate",
"Apps with available updates" : "Applicazioni con aggiornamenti disponibili",
"Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota che, dopo una nuova versione, potrebbe essere necessario del tempo prima che sia mostrato qui. Rilasciamo nel tempo nuove versioni ai nostri utenti e, a volte, saltiamo una versione, se troviamo dei problemi.",
diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js
index 5d979cd9c2b..0e2642a8d7d 100644
--- a/apps/user_ldap/l10n/de_DE.js
+++ b/apps/user_ldap/l10n/de_DE.js
@@ -56,9 +56,9 @@ OC.L10N.register(
"Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:",
"Please login with the new password" : "Bitte mit dem neuen Passwort anmelden",
"LDAP User backend" : "LDAP Benutzer-Backend",
- "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab",
- "Your password will expire today." : "Ihr Passwort läuft heute ab",
- "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tage ab","Ihr Passwort läuft in %n Tagen ab"],
+ "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab.",
+ "Your password will expire today." : "Ihr Passwort läuft heute ab.",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tag ab.","Ihr Passwort läuft in %n Tagen ab."],
"LDAP / AD integration" : "LDAP/AD-Integration",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
@@ -120,7 +120,7 @@ OC.L10N.register(
"Please try again or contact your administrator." : "Bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator.",
"Current password" : "Aktuelles Passwort",
"New password" : "Neues Passwort",
- "Renew password" : "Bitte erneuern Sie Ihr Passwort",
+ "Renew password" : "Passwort erneuern",
"Wrong password." : "Falsches Passwort.",
"Cancel" : "Abbrechen",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json
index c38fff0c180..7dd3d04b10d 100644
--- a/apps/user_ldap/l10n/de_DE.json
+++ b/apps/user_ldap/l10n/de_DE.json
@@ -54,9 +54,9 @@
"Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:",
"Please login with the new password" : "Bitte mit dem neuen Passwort anmelden",
"LDAP User backend" : "LDAP Benutzer-Backend",
- "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab",
- "Your password will expire today." : "Ihr Passwort läuft heute ab",
- "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tage ab","Ihr Passwort läuft in %n Tagen ab"],
+ "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab.",
+ "Your password will expire today." : "Ihr Passwort läuft heute ab.",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tag ab.","Ihr Passwort läuft in %n Tagen ab."],
"LDAP / AD integration" : "LDAP/AD-Integration",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
@@ -118,7 +118,7 @@
"Please try again or contact your administrator." : "Bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator.",
"Current password" : "Aktuelles Passwort",
"New password" : "Neues Passwort",
- "Renew password" : "Bitte erneuern Sie Ihr Passwort",
+ "Renew password" : "Passwort erneuern",
"Wrong password." : "Falsches Passwort.",
"Cancel" : "Abbrechen",
"Server" : "Server",
diff --git a/apps/workflowengine/l10n/hu.js b/apps/workflowengine/l10n/hu.js
index 3770834ee3c..1a1d14842a2 100644
--- a/apps/workflowengine/l10n/hu.js
+++ b/apps/workflowengine/l10n/hu.js
@@ -13,31 +13,81 @@ OC.L10N.register(
"The given end time is invalid" : "A megadott vég idő nem érvényes",
"The given group does not exist" : "A megadott csoport nem létezik",
"File" : "Fájl",
+ "File created" : "Fájl létrehozva",
+ "File updated" : "A fájl frissítve",
+ "File renamed" : "A fájl átnevezve",
+ "File deleted" : "A fájl törölve",
+ "File accessed" : "Hozzáférés a fájlhoz",
+ "File copied" : "A fájl másolva",
+ "Tag assigned" : "Címke hozzárendelve",
+ "Someone" : "Valaki",
+ "%s created %s" : "%s létrehozta a következőt: %s",
+ "%s modified %s" : "%s módosított a következőt: %s",
+ "%s deleted %s" : "%s módosította a következőt: %s",
+ "%s accessed %s" : "%s hozzáfért a következőhöz: %s",
+ "%s renamed %s" : "%s átnevezte a következőt: %s",
+ "%s copied %s" : "%s átmásolta a következőt: %s",
+ "%s assigned %s to %s" : "%s hozzárendelte a következőt: %s hozzá: %s",
"Operation #%s does not exist" : "#%s művelet nem létezik",
+ "Entity %s does not exist" : "%s entitás nem létezik",
+ "Entity %s is invalid" : "%s entitás érvénytelen",
+ "No events are chosen." : "Nincs kiválasztva esemény.",
+ "Entity %s has no event %s" : "%s entitásnak nincs eseménye %s",
"Operation %s does not exist" : "%s művelet nem létezik",
"Operation %s is invalid" : "#%s művelet érvénytelen",
+ "At least one check needs to be provided" : "Legalább egy ellenőrzést meg kell adni",
+ "The provided operation data is too long" : "A megadott műveleti adatok túl hosszúak",
+ "Invalid check provided" : "Érvénytelen ellenőrzést adott meg",
"Check %s does not exist" : "%s nem létezik, ellenőrizd",
"Check %s is invalid" : "%s érvénytelen, ellenőrizd",
+ "Check %s is not allowed with this entity" : "%s ellenőrzés nem engedélyezett ezzel az entitással",
+ "The provided check value is too long" : "A megadott ellenőrzési érték túl hosszú",
"Check #%s does not exist" : "#%s nem létezik, ellenőrizd",
"Check %s is invalid or does not exist" : "%s érvénytelen vagy nem létezik, ellenőrizd",
"Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud munkafolyamat motor",
+ "Select a filter" : "Válasszon egy szűrőt",
+ "Select a comparator" : "Válasszon összehasonlítót",
+ "Select a file type" : "Válasszon egy fájltípust",
+ "e.g. httpd/unix-directory" : "például. httpd/unix-directory",
"Folder" : "Mappa",
"Images" : "Képek",
+ "Office documents" : "Office dokumentumok",
+ "PDF documents" : "PDF dokumentumok",
+ "Custom mimetype" : "Egyéni mime típus",
+ "Select a tag" : "Válasszon ki egy címkét",
"No results" : "Nincs találat",
"%s (invisible)" : "%s (láthatatlan)",
"%s (restricted)" : "%s (korlátozott)",
+ "Please enter a valid time span" : "Kérjük, adjon meg érvényes időtartamot",
+ "Select a request URL" : "Válassza ki a kérelem URL-jét",
"Predefined URLs" : "Elődefiniált URL-ek",
"Files WebDAV" : "WebDAV fálok",
"Others" : "Egyebek",
+ "Custom URL" : "Egyéni URL",
+ "Select a user agent" : "Válasszon felhasználói ügynököt",
"Android client" : "Android kliens",
"iOS client" : "iOS klens",
"Desktop client" : "Asztali kliens",
"Thunderbird & Outlook addons" : "Thunderbird és Outlook bővítmények",
+ "Custom user agent" : "Egyéni felhasználói ügynök",
+ "At least one event must be selected" : "Legalább egy eseményt ki kell választani",
+ "Add new flow" : "Új folyamat hozzáadása",
+ "When" : "Mikor",
+ "and" : "és",
"Cancel" : "Mégse",
"Delete" : "Törlés",
+ "The configuration is invalid" : "A konfiguráció érvénytelen",
"Active" : "Aktív",
"Save" : "Mentés",
+ "Available flows" : "Rendelkezésre álló munkafolyamatok",
+ "For details on how to write your own flow, check out the development documentation." : "A saját folyamatának megírásának részleteiért, lásd a fejlesztési dokumentációt.",
+ "More flows" : "Több munkafolyamat",
"Browse the app store" : "Alkalmazás bolt böngészése",
+ "Show less" : "Kevesebbet megjelenítése",
+ "Show more" : "Több megjelenítése",
+ "Configured flows" : "Beállított folyamatok",
+ "Your flows" : "Az Ön folyamatai",
"matches" : "egyezik",
"does not match" : "nem egyezik",
"is" : "ez",
diff --git a/apps/workflowengine/l10n/hu.json b/apps/workflowengine/l10n/hu.json
index f39a9e7f2e1..1d72f2b2fba 100644
--- a/apps/workflowengine/l10n/hu.json
+++ b/apps/workflowengine/l10n/hu.json
@@ -11,31 +11,81 @@
"The given end time is invalid" : "A megadott vég idő nem érvényes",
"The given group does not exist" : "A megadott csoport nem létezik",
"File" : "Fájl",
+ "File created" : "Fájl létrehozva",
+ "File updated" : "A fájl frissítve",
+ "File renamed" : "A fájl átnevezve",
+ "File deleted" : "A fájl törölve",
+ "File accessed" : "Hozzáférés a fájlhoz",
+ "File copied" : "A fájl másolva",
+ "Tag assigned" : "Címke hozzárendelve",
+ "Someone" : "Valaki",
+ "%s created %s" : "%s létrehozta a következőt: %s",
+ "%s modified %s" : "%s módosított a következőt: %s",
+ "%s deleted %s" : "%s módosította a következőt: %s",
+ "%s accessed %s" : "%s hozzáfért a következőhöz: %s",
+ "%s renamed %s" : "%s átnevezte a következőt: %s",
+ "%s copied %s" : "%s átmásolta a következőt: %s",
+ "%s assigned %s to %s" : "%s hozzárendelte a következőt: %s hozzá: %s",
"Operation #%s does not exist" : "#%s művelet nem létezik",
+ "Entity %s does not exist" : "%s entitás nem létezik",
+ "Entity %s is invalid" : "%s entitás érvénytelen",
+ "No events are chosen." : "Nincs kiválasztva esemény.",
+ "Entity %s has no event %s" : "%s entitásnak nincs eseménye %s",
"Operation %s does not exist" : "%s művelet nem létezik",
"Operation %s is invalid" : "#%s művelet érvénytelen",
+ "At least one check needs to be provided" : "Legalább egy ellenőrzést meg kell adni",
+ "The provided operation data is too long" : "A megadott műveleti adatok túl hosszúak",
+ "Invalid check provided" : "Érvénytelen ellenőrzést adott meg",
"Check %s does not exist" : "%s nem létezik, ellenőrizd",
"Check %s is invalid" : "%s érvénytelen, ellenőrizd",
+ "Check %s is not allowed with this entity" : "%s ellenőrzés nem engedélyezett ezzel az entitással",
+ "The provided check value is too long" : "A megadott ellenőrzési érték túl hosszú",
"Check #%s does not exist" : "#%s nem létezik, ellenőrizd",
"Check %s is invalid or does not exist" : "%s érvénytelen vagy nem létezik, ellenőrizd",
"Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud munkafolyamat motor",
+ "Select a filter" : "Válasszon egy szűrőt",
+ "Select a comparator" : "Válasszon összehasonlítót",
+ "Select a file type" : "Válasszon egy fájltípust",
+ "e.g. httpd/unix-directory" : "például. httpd/unix-directory",
"Folder" : "Mappa",
"Images" : "Képek",
+ "Office documents" : "Office dokumentumok",
+ "PDF documents" : "PDF dokumentumok",
+ "Custom mimetype" : "Egyéni mime típus",
+ "Select a tag" : "Válasszon ki egy címkét",
"No results" : "Nincs találat",
"%s (invisible)" : "%s (láthatatlan)",
"%s (restricted)" : "%s (korlátozott)",
+ "Please enter a valid time span" : "Kérjük, adjon meg érvényes időtartamot",
+ "Select a request URL" : "Válassza ki a kérelem URL-jét",
"Predefined URLs" : "Elődefiniált URL-ek",
"Files WebDAV" : "WebDAV fálok",
"Others" : "Egyebek",
+ "Custom URL" : "Egyéni URL",
+ "Select a user agent" : "Válasszon felhasználói ügynököt",
"Android client" : "Android kliens",
"iOS client" : "iOS klens",
"Desktop client" : "Asztali kliens",
"Thunderbird & Outlook addons" : "Thunderbird és Outlook bővítmények",
+ "Custom user agent" : "Egyéni felhasználói ügynök",
+ "At least one event must be selected" : "Legalább egy eseményt ki kell választani",
+ "Add new flow" : "Új folyamat hozzáadása",
+ "When" : "Mikor",
+ "and" : "és",
"Cancel" : "Mégse",
"Delete" : "Törlés",
+ "The configuration is invalid" : "A konfiguráció érvénytelen",
"Active" : "Aktív",
"Save" : "Mentés",
+ "Available flows" : "Rendelkezésre álló munkafolyamatok",
+ "For details on how to write your own flow, check out the development documentation." : "A saját folyamatának megírásának részleteiért, lásd a fejlesztési dokumentációt.",
+ "More flows" : "Több munkafolyamat",
"Browse the app store" : "Alkalmazás bolt böngészése",
+ "Show less" : "Kevesebbet megjelenítése",
+ "Show more" : "Több megjelenítése",
+ "Configured flows" : "Beállított folyamatok",
+ "Your flows" : "Az Ön folyamatai",
"matches" : "egyezik",
"does not match" : "nem egyezik",
"is" : "ez",
diff --git a/build/integration/features/bootstrap/Provisioning.php b/build/integration/features/bootstrap/Provisioning.php
index 0ec19f27c60..cbe11403ba8 100644
--- a/build/integration/features/bootstrap/Provisioning.php
+++ b/build/integration/features/bootstrap/Provisioning.php
@@ -157,7 +157,11 @@ trait Provisioning {
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user";
$client = new Client();
$options = [];
- $options['auth'] = $this->adminUser;
+ if ($this->currentUser === 'admin') {
+ $options['auth'] = $this->adminUser;
+ } else {
+ $options['auth'] = [$this->currentUser, $this->regularUser];
+ }
$options['headers'] = [
'OCS-APIREQUEST' => 'true',
];
diff --git a/build/integration/features/provisioning-v1.feature b/build/integration/features/provisioning-v1.feature
index 717aa04e4bd..03aaad4b857 100644
--- a/build/integration/features/provisioning-v1.feature
+++ b/build/integration/features/provisioning-v1.feature
@@ -103,6 +103,82 @@ Feature: provisioning
| website | https://nextcloud.com |
| twitter | Nextcloud |
+ Scenario: Edit a user account properties scopes
+ Given user "brand-new-user" exists
+ And As an "brand-new-user"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | phoneScope |
+ | value | v2-private |
+ Then the OCS status code should be "100"
+ And the HTTP status code should be "200"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | twitterScope |
+ | value | v2-local |
+ Then the OCS status code should be "100"
+ And the HTTP status code should be "200"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | addressScope |
+ | value | v2-federated |
+ Then the OCS status code should be "100"
+ And the HTTP status code should be "200"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | emailScope |
+ | value | v2-published |
+ Then the OCS status code should be "100"
+ And the HTTP status code should be "200"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | websiteScope |
+ | value | public |
+ Then the OCS status code should be "100"
+ And the HTTP status code should be "200"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | displaynameScope |
+ | value | contacts |
+ Then the OCS status code should be "100"
+ And the HTTP status code should be "200"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | avatarScope |
+ | value | private |
+ Then the OCS status code should be "100"
+ And the HTTP status code should be "200"
+ Then user "brand-new-user" has
+ | id | brand-new-user |
+ | phoneScope | v2-private |
+ | twitterScope | v2-local |
+ | addressScope | v2-federated |
+ | emailScope | v2-published |
+ | websiteScope | v2-published |
+ | displaynameScope | v2-federated |
+ | avatarScope | v2-local |
+
+ Scenario: Edit a user account properties scopes with invalid or unsupported value
+ Given user "brand-new-user" exists
+ And As an "brand-new-user"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | phoneScope |
+ | value | invalid |
+ Then the OCS status code should be "102"
+ And the HTTP status code should be "200"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | displaynameScope |
+ | value | v2-private |
+ Then the OCS status code should be "102"
+ And the HTTP status code should be "200"
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | emailScope |
+ | value | v2-private |
+ Then the OCS status code should be "102"
+ And the HTTP status code should be "200"
+
+ Scenario: An admin cannot edit user account property scopes
+ Given As an "admin"
+ And user "brand-new-user" exists
+ When sending "PUT" to "/cloud/users/brand-new-user" with
+ | key | phoneScope |
+ | value | v2-private |
+ Then the OCS status code should be "997"
+ And the HTTP status code should be "401"
+
Scenario: Search by phone number
Given As an "admin"
And user "phone-user" exists
@@ -612,4 +688,3 @@ Feature: provisioning
And As an "user0"
When sending "GET" with exact url to "/index.php/apps/files"
And the HTTP status code should be "403"
-
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index de3c0e83cc7..65a317495b3 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -3155,6 +3155,14 @@
<code>InMemoryFile</code>
</ImplementedReturnTypeMismatch>
</file>
+ <file src="lib/private/Avatar/PlaceholderAvatar.php">
+ <ImplementedReturnTypeMismatch occurrences="1">
+ <code>ISimpleFile</code>
+ </ImplementedReturnTypeMismatch>
+ <InvalidScalarArgument occurrences="1">
+ <code>$data</code>
+ </InvalidScalarArgument>
+ </file>
<file src="lib/private/Avatar/UserAvatar.php">
<ImplementedReturnTypeMismatch occurrences="1">
<code>ISimpleFile</code>
diff --git a/config/config.sample.php b/config/config.sample.php
index 5792381e4d7..6a1ca06ef0c 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -1615,10 +1615,15 @@ $CONFIG = [
'theme' => '',
/**
- * The default cipher for encrypting files. Currently AES-128-CFB and
- * AES-256-CFB are supported.
+ * The default cipher for encrypting files. Currently supported are:
+ * - AES-256-CTR
+ * - AES-128-CTR
+ * - AES-256-CFB
+ * - AES-128-CFB
+ *
+ * Defaults to ``AES-256-CTR``
*/
-'cipher' => 'AES-256-CFB',
+'cipher' => 'AES-256-CTR',
/**
* The minimum Nextcloud desktop client version that will be allowed to sync with
diff --git a/core/Application.php b/core/Application.php
index c3cb6f02ed5..93032e53d42 100644
--- a/core/Application.php
+++ b/core/Application.php
@@ -112,6 +112,10 @@ class Application extends App {
if (!$table->hasIndex('fs_size')) {
$subject->addHintForMissingSubject($table->getName(), 'fs_size');
}
+
+ if (!$table->hasIndex('fs_path_prefix')) {
+ $subject->addHintForMissingSubject($table->getName(), 'fs_path_prefix');
+ }
}
if ($schema->hasTable('twofactor_providers')) {
diff --git a/core/Command/Db/AddMissingIndices.php b/core/Command/Db/AddMissingIndices.php
index 1acff55fa40..a4f59184537 100644
--- a/core/Command/Db/AddMissingIndices.php
+++ b/core/Command/Db/AddMissingIndices.php
@@ -144,6 +144,13 @@ class AddMissingIndices extends Command {
$updated = true;
$output->writeln('<info>Filecache table updated successfully.</info>');
}
+ if (!$table->hasIndex('fs_path_prefix')) {
+ $output->writeln('<info>Adding additional path index to the filecache table, this can take some time...</info>');
+ $table->addIndex(['size'], 'fs_path_prefix', [], ["lengths" => [128]]);
+ $this->connection->migrateToSchema($schema->getWrappedSchema());
+ $updated = true;
+ $output->writeln('<info>Filecache table updated successfully.</info>');
+ }
}
$output->writeln('<info>Check indices of the twofactor_providers table.</info>');
diff --git a/core/Controller/SearchController.php b/core/Controller/SearchController.php
index 42439e9ceb9..72633630dad 100644
--- a/core/Controller/SearchController.php
+++ b/core/Controller/SearchController.php
@@ -55,7 +55,6 @@ class SearchController extends Controller {
/**
* @NoAdminRequired
- * @NoCSRFRequired
*/
public function search(string $query, array $inApps = [], int $page = 1, int $size = 30): JSONResponse {
$results = $this->searcher->searchPaged($query, $inApps, $page, $size);
diff --git a/core/Migrations/Version13000Date20170718121200.php b/core/Migrations/Version13000Date20170718121200.php
index 4912bef8857..2a9636336a6 100644
--- a/core/Migrations/Version13000Date20170718121200.php
+++ b/core/Migrations/Version13000Date20170718121200.php
@@ -262,6 +262,7 @@ class Version13000Date20170718121200 extends SimpleMigrationStep {
$table->addIndex(['storage', 'size', 'fileid'], 'fs_storage_size');
$table->addIndex(['mtime'], 'fs_mtime');
$table->addIndex(['size'], 'fs_size');
+ $table->addIndex(['path'], 'fs_path_prefix', [], ["lengths" => [128]]);
}
if (!$schema->hasTable('group_user')) {
diff --git a/core/img/caldav/attendees.png b/core/img/caldav/attendees.png
new file mode 100755
index 00000000000..2e0baa49443
--- /dev/null
+++ b/core/img/caldav/attendees.png
Binary files differ
diff --git a/core/img/caldav/description.png b/core/img/caldav/description.png
new file mode 100755
index 00000000000..55e3f2cf64d
--- /dev/null
+++ b/core/img/caldav/description.png
Binary files differ
diff --git a/core/img/caldav/link.png b/core/img/caldav/link.png
new file mode 100755
index 00000000000..c59d0e34acc
--- /dev/null
+++ b/core/img/caldav/link.png
Binary files differ
diff --git a/core/img/caldav/location.png b/core/img/caldav/location.png
new file mode 100755
index 00000000000..0992c348d10
--- /dev/null
+++ b/core/img/caldav/location.png
Binary files differ
diff --git a/core/img/caldav/organizer.png b/core/img/caldav/organizer.png
new file mode 100755
index 00000000000..19e08065e61
--- /dev/null
+++ b/core/img/caldav/organizer.png
Binary files differ
diff --git a/core/img/caldav/time.png b/core/img/caldav/time.png
new file mode 100755
index 00000000000..059a95abce3
--- /dev/null
+++ b/core/img/caldav/time.png
Binary files differ
diff --git a/core/img/caldav/title.png b/core/img/caldav/title.png
new file mode 100755
index 00000000000..b312250ef08
--- /dev/null
+++ b/core/img/caldav/title.png
Binary files differ
diff --git a/core/l10n/ar.js b/core/l10n/ar.js
index bcc131159b0..f0f31be99e9 100644
--- a/core/l10n/ar.js
+++ b/core/l10n/ar.js
@@ -16,10 +16,10 @@ OC.L10N.register(
"Crop is not square" : "القص ليس مربعا",
"State token does not match" : "حالة Token غير مطابقة",
"Invalid app password" : "كلمة المرور للتطبيق غير صحيحه",
- "Could not complete login" : "لا يمكن اكمال عملية تسجيل الدخول",
- "Your login token is invalid or has expired" : "معلومات الجلسة غير صالحة او منتهية",
+ "Could not complete login" : "لا يمكن إكمال عملية تسجيل الدخول",
+ "Your login token is invalid or has expired" : "معلومات الجلسة غير صالحة أو منتهية",
"Password reset is disabled" : "تم تعطيل إعادة تعيين كلمة المرور",
- "Couldn't reset password because the token is invalid" : "لا يمكن اعادة تعيين كلمة المرور بسبب خطأ في تكوين الجلسة",
+ "Couldn't reset password because the token is invalid" : "لا يمكن إعادة تعيين كلمة المرور بسبب خطأ في تكوين الجلسة",
"Couldn't reset password because the token is expired" : "لا يمكن إعادة تعيين كلمة المرور بسبب انتهاء صلاحية الجلسة.",
"%s password reset" : "%s إعادة تعيين كلمة مرور ",
"Password reset" : "إعادة تعيين كلمة مرور",
@@ -47,7 +47,7 @@ OC.L10N.register(
"Checking for update of app \"%s\" in appstore" : "التحقق من تحديثات التطبيقات \"%s\" في متجر التطبيقات",
"Update app \"%s\" from appstore" : "قم بتحديث التطبيق \"%s\" عن طريق متجر التطبيقات",
"Checked for update of app \"%s\" in appstore" : "التحقق من تحديثات التطبيقات \" %s \" في متجر التطبيقات",
- "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "جاري فحص اذا كان مخطط قاعدة البيانات لـ %s يمكن تحديثه (قد يستغرق ذلك بعض الوقت اعتمادة على مساحة قاعدة البيانات)",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "جاري فحص إذا كان مخطط قاعدة البيانات لـ %s يمكن تحديثه (قد يستغرق ذلك بعض الوقت اعتمادًا على مساحة قاعدة البيانات)",
"Updated \"%1$s\" to %2$s" : "حدث \"%1$s\" إلى %2$s",
"Set log level to debug" : "أعد تعيين مستوى السجلات إلى اكتشاف الاخطاء المفصلة",
"Reset log level" : "أعد تعيين مستوى السجلات",
@@ -56,13 +56,13 @@ OC.L10N.register(
"%s (incompatible)" : "%s (غير متوافق)",
"The following apps have been disabled: %s" : "التطبيقات التاليه غير مفعله: %s",
"Already up to date" : "محدّثة مسبقاً",
- "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "الخادم السحابي لم يتم تعيين السماح بتزامن الملف، بسبب واجهة التأليف الموزع على الويب وتعيين الإصدار WebDAV غير متصلة.",
+ "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : " لم يتم تعيين السماح لخادمك السحابي بتزامن الملف، بسبب واجهة التأليف الموزع على الويب وتعيين الإصدار WebDAV غير متصلة.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the {linkstart}documentation ↗{linkend}." : " لم يتم ضبط خادمك السحابي لتعيين الكشف عن \"{url}\". للمزيد من التفاصيل يمكن العثور عليها في {linkstart}مستند ↗{linkend}.",
"Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's {linkstart}documentation page ↗{linkend}. On Nginx those are typically the lines starting with \"location ~\" that need an update." : " لم يتم ضبط تعيين الكشف عن \"{url}\"في خادمك السحابي. من الغالب يجب تغيير اعدادات الخادم السحابي لعدم توصيل المجلد بشكل مباشر. الرجاء مقارنة إعداداتك مع الإعدادات الإصلية لملف \".htaccess\" لاباتشي أو نجينكس في {linkstart} صفحة التوثيق ↗ {linkend}. في Nginx ، عادةً ما تكون هذه الأسطر التي تبدأ بـ \"location ~\" والتي تحتاج إلى تحديث.",
- "Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our {linkstart}documentation ↗{linkend}." : "خادمك السحابي لم يتم ضبطه لـ تعيين توصيل نوع .woff2 من الملفات. بالغالب هذه المشكلة تخص اعدادات نجينكس. لـ نيكست كلاود الاصدار 15 يتم اعادة تنظيم وضبط اعدادات التوصيل لملفات .woff2 .قارن تهيئة Nginx بالتهيئة الموصى بها في وثائق {linkstart} الخاصة بنا ↗ {linkend}.",
+ "Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our {linkstart}documentation ↗{linkend}." : "خادمك السحابي لم يتم ضبطه لـ تعيين توصيل نوع .woff2 من الملفات. بالغالب هذه المشكلة تخص اعدادات نجينكس. لـ نيكست كلاود الاصدار 15 يتم اعادة تنظيم وضبط إعدادات التوصيل لملفات .woff2 .قارن تهيئة Nginx بالتهيئة الموصى بها في وثائق {linkstart} الخاصة بنا ↗ {linkend}.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "يبدو أن PHP لم يتم إعدادها بشكل صحيح للاستعلام عن متغيرات بيئة النظام. يقوم الاختبار باستخدام getenv (\"PATH\") بإرجاع استجابة فارغة فقط.",
"Please check the {linkstart}installation documentation ↗{linkend} for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "يرجى التحقق من {linkstart} مستند التثبيت ↗{linkend} لملاحظات إعدادات PHP وإعدادات PHP لخادمك السحابي ، خاصة عند استخدام php-fpm.",
- "The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "تم تمكين اعداد للقراءة فقط. هذا يمنع تعيين بعض الاعدادات عبر واجهة الويب. علاوة على ذلك ، يجب جعل الملف قابلاً للكتابة يدويًا لكل تحديث.",
+ "The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "تم تمكين إعداد للقراءة فقط. هذا يمنع تعيين بعض الإعدادات عبر واجهة الويب. علاوة على ذلك ، يجب جعل الملف قابلاً للكتابة يدويًا لكل تحديث.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "لا تعمل قاعدة البيانات الخاصة بك بمستوى عزل المعاملة \"READ COMMITTED\". هذا يمكن أن يسبب مشاكل عند تنفيذ عدة إجراءات بالتوازي.",
"The PHP module \"fileinfo\" is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "وحدة PHP \"fileinfo\" مفقودة. يوصى بشدة بتمكين هذه الوحدة للحصول على أفضل النتائج مع اكتشاف نوع MIME.",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable \"filelocking.enabled\" in config.php to avoid these problems. See the {linkstart}documentation ↗{linkend} for more information." : "قفل ملف المعاملات معطل ، قد يؤدي ذلك إلى مشاكل تتعلق بظروف السباق. قم بتمكين \"filelocking.enabled\" في config.php لتجنب هذه المشاكل. راجع وثائق {linkstart} ↗ {linkend} لمزيد من المعلومات.",
@@ -116,17 +116,19 @@ OC.L10N.register(
"<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>هذه هي نتائج البحث الخاصة بك <script>تنبيه(1)</script> </strong>",
"new" : "جديد",
"_download %n file_::_download %n files_" : ["تنزيل %n ملف","تنزيل ملف واحد","تنزيل ملفين","تنزيل %n ملفات","تنزيل %n ملفات","تنزيل %n ملفات"],
- "The update is in progress, leaving this page might interrupt the process in some environments." : "جاري التحديث، وقد يؤدي مغادرة هذه الصفحة إلى مقاطعة العملية في بعض الاحيان.",
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "جاري التحديث، وقد يؤدي مغادرة هذه الصفحة إلى توقف العملية في بعض الاحيان.",
"Update to {version}" : "التحديث إلى {version}",
- "An error occurred." : "طرأ هناك خطأ.",
+ "An error occurred." : "حدث خطأ.",
"Please reload the page." : "رجاء أعد تحميل الصفحة.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "فشل التحديث. لمزيد من المعلومات <a href=\"{url}\"> تصفح مقالات المنتدى الخاص بنا </a> لإصلاح هذا الخطأ.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "فشل التحديث. يرجى التبليغ عن هذه المشكلة إلى <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\"> مجتمع Nextcloud </a>.",
- "Log in" : "أدخل",
+ "Continue to {productName}" : "أكمل إلى {productName}",
+ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني."],
+ "Log in" : "تسجيل الدخول",
"Logging in …" : "تسجيل الدخول …",
"Server side authentication failed!" : "رفض الخادم المصادقة!",
"Please contact your administrator." : "يرجى التواصل مع مسؤول النظام.",
- "An internal error occurred." : "طرأ هناك خطأ.",
+ "An internal error occurred." : "حدث خطأ داخلي.",
"Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مسؤول النظام.",
"Username or email" : "اسم المستخدم أو البريد الالكتروني",
"Password" : "كلمة المرور",
@@ -145,19 +147,19 @@ OC.L10N.register(
"New password" : "كلمات سر جديدة",
"Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "المحتوى الخاص بك مشفر. لن تكون هناك طريقة لاستعادة محتوياتك وبياناتك بعد إعادة تعيين كلمة مرورك. إذا لم تكن متأكدًا مما يجب فعله ، فيرجى الاتصال بالمسؤول قبل المتابعة. هل حقا تريد الاستمرار؟",
"I know what I'm doing" : "أعرف ماذا أفعل",
- "Resetting password" : "اعادة تعيين كلمة المرور",
+ "Resetting password" : "إعادة تعيين كلمة المرور",
"Recommended apps" : "التطبيقات المستحسنة",
"Loading apps …" : "تحميل التطبيقات…",
"Could not fetch list of apps from the app store." : "لا يمكن العثور على قائمة التطبيقات من متجر التطبيقات.",
"Installing apps …" : "جاري تثبيت التطبيقات…",
- "App download or installation failed" : "تحميل او تثبيت التطبيق فشل",
+ "App download or installation failed" : "فشل تحميل أو تثبيت التطبيق ",
"Can't install this app because it is not compatible" : "لا يمكن تثبيت هذا التطبيق لانه غير متوافق",
"Can't install this app" : "لا يمكن تثبيت هذا التطبيق",
- "Cancel" : "الغاء",
- "Schedule work & meetings, synced with all your devices." : "قم بجدولة العمل والاجتماعات ، بالتزامن مع جميع أجهزتك.",
+ "Cancel" : "إلغاء",
+ "Schedule work & meetings, synced with all your devices." : "قم بجدولة العمل والإجتماعات ، بالتزامن مع جميع أجهزتك.",
"Keep your colleagues and friends in one place without leaking their private info." : "احتفظ بزملائك وأصدقائك في مكان واحد دون تسريب معلوماتهم الخاصة.",
"Simple email app nicely integrated with Files, Contacts and Calendar." : "تطبيق بريد إلكتروني بسيط متوافق بشكل ممتاز مع الملفات وجهات الاتصال والتقويم.",
- "Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps." : "الدردشة ومكالمات الفيديو ومشاركة الشاشة والاجتماعات عبر الإنترنت ومؤتمرات الويب - في متصفحك ومع تطبيق للهاتف المحمول.",
+ "Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps." : "الدردشة ومكالمات الفيديو ومشاركة الشاشة والإجتماعات عبر الإنترنت ومؤتمرات الويب - في متصفحك ومع تطبيق للهاتف المحمول.",
"Collaboratively edit office documents." : "تحرير مستندات المكتب بشكل تعاوني.",
"Local document editing back-end used by the Collabora Online app." : "خلفية تحرير المستندات المحلية المستخدمة بواسطة تطبيق Collabora Online.",
"Forgot password?" : "هل نسيت كلمة السر ؟",
@@ -169,16 +171,17 @@ OC.L10N.register(
"No results for {query}" : "لا يوجد ناتج لـ {query}",
"Start typing to search" : "اكتب هنا للبحث",
"Loading more results …" : "جاري عرض المزيد من النتائج…",
- "Load more results" : "المزيد",
+ "Load more results" : " عرض المزيد من النتائج",
"An error occurred while searching for {type}" : "حدث خطأ أثناء البحث عن {type}",
+ "_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Enter-the-singular-translation-here","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","من فضلك ادخل أحرف {minSearchLength} أو أكثر للبحث"],
"Search {types} …" : "بحث {types} …",
"Settings" : "الإعدادات",
- "Could not load your contacts" : "تعذر تحميل جهات اتصالاتك",
- "Search contacts …" : "البحث عن مراسلين …",
+ "Could not load your contacts" : "تعذر تحميل جهات الإتصال",
+ "Search contacts …" : "البحث عن جهات الإتصال",
"No contacts found" : "لم يعثر على جهات اتصال",
- "Show all contacts …" : "إظهار كافة المراسلين …",
- "Install the Contacts app" : "تثبيت تطبيق جهات الاتصال",
- "Loading your contacts …" : "تحميل جهات الاتصال",
+ "Show all contacts …" : "إظهار كافة جهات الإتصال …",
+ "Install the Contacts app" : "تثبيت تطبيق جهات الإتصال",
+ "Loading your contacts …" : "تحميل جهات الإتصال",
"Looking for {term} …" : "جاري البحث عن {term}",
"No" : "لا",
"Yes" : "نعم",
@@ -217,10 +220,11 @@ OC.L10N.register(
"Authentication required" : "المصادقة مطلوبة",
"This action requires you to confirm your password" : "يتطلب هذا الإجراء منك تأكيد كلمة المرور",
"Confirm" : "تأكيد",
- "Failed to authenticate, try again" : "أخفق المصادقة، أعد المحاولة",
+ "Failed to authenticate, try again" : "أخفقت المصادقة، أعد المحاولة",
"seconds ago" : "منذ ثواني",
"Connection to server lost" : "تم فقد الاتصال بالخادم",
- "Add to a project" : "اضافة إلى مشروع",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["حدث خطأ أثناء تحميل الصفحة، سيعاد التحميل خلال %n ثانية","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","حدث خطأ أثناء تحميل الصفحة، سيعاد التحميل خلال %n ثواني."],
+ "Add to a project" : "إضافة إلى مشروع",
"Show details" : "عرض التفاصيل",
"Hide details" : "إخفاء التفاصيل",
"Rename project" : "إعادة تسمية المشروع",
@@ -250,7 +254,7 @@ OC.L10N.register(
"Apps" : "التطبيقات",
"Admin" : "المدير",
"Help" : "المساعدة",
- "Access forbidden" : "التوصّل محظور",
+ "Access forbidden" : "الوصول محظور",
"File not found" : "لم يتم العثور على الملف",
"The document could not be found on the server. Maybe the share was deleted or has expired?" : "لا يمكن العثور على المستند، ربما المشاركة محذوفه او منتهيه؟",
"Back to %s" : "العودة إلى %s",
@@ -279,13 +283,13 @@ OC.L10N.register(
"Show password" : "اظهر كلمة المرور",
"Storage & database" : "التخزين و قاعدة البيانات",
"Data folder" : "مجلد المعلومات",
- "Configure the database" : "اعداد قاعدة البيانات",
+ "Configure the database" : "إعداد قاعدة البيانات",
"Only %s is available." : "لم يتبقى إلّا %s.",
"Install and activate additional PHP modules to choose other database types." : "ثبت وفعل مودلات PHP اضافية لاستخدام قاعدة بيانات مختلفة.",
"For more details check out the documentation." : "للمزيد من التفاصيل، يرجى الإطلاع على الدليل.",
"Database user" : "مستخدم قاعدة البيانات",
"Database password" : "كلمة سر مستخدم قاعدة البيانات",
- "Database name" : "إسم قاعدة البيانات",
+ "Database name" : "اسم قاعدة البيانات",
"Database tablespace" : "مساحة جدول قاعدة البيانات",
"Database host" : "خادم قاعدة البيانات",
"Please specify the port number along with the host name (e.g., localhost:5432)." : "يرجى تحديد رقم المنفذ مع اسم المضيف (على سبيل المثال ، mycloud:5432).",
@@ -297,19 +301,19 @@ OC.L10N.register(
"Calendar, Contacts, Talk, Mail & Collaborative editing" : "التقويم، جهات الاتصال، التحدث، البريد، التعديل الجماعي",
"Finish setup" : "انهاء التعديلات",
"Finishing …" : "إنهاء …",
- "Need help?" : "محتاج مساعدة؟",
+ "Need help?" : "تحتاج إلى مساعدة؟",
"See the documentation" : "اطلع على التعليمات",
"It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "يبدو أنك تحاول إعادة تثبيت نكست كلاود الخاص بك. ومع ذلك ، فإن الملف CAN_INSTALL مفقود من دليل التثبيت الخاص بك. يرجى إنشاء الملف CAN_INSTALL في مجلد التثبيت الخاص بك للمتابعة.",
"Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "تعذر إزالة CAN_INSTALL من مجلد التكوين. الرجاء إزالة هذا الملف يدويا.",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "هذا التطبيق يتطلب JavaScript ليتم تشغيله بالطريقة الصحيحة. يرجى {linkstart}تفعيل JavaScript{linkend} وتحديث الصفحة.",
- "Get your own free account" : "تحصّل على حساب لك بالمجان",
+ "Get your own free account" : "احصل على حساب لك بالمجان",
"Skip to main content" : "تخطّيه وانتقل إلى المحتوى الرئيسي",
"Skip to navigation of app" : "تجاهل التنقل في التطبيق",
"More apps" : "المزيد من التطبيقات",
"More" : "المزيد",
"More apps menu" : "المزيد من قائمة التطبيقات",
- "Contacts" : "المُراسِلون",
- "Contacts menu" : "قائمة المراسِلين",
+ "Contacts" : "جهات الإتصال",
+ "Contacts menu" : "قائمة جهات الإتصال",
"Settings menu" : "قائمة الإعدادات",
"Confirm your password" : "تأكيد كلمتك السرية",
"Connect to your account" : "الاتصال بحسابك",
@@ -333,7 +337,7 @@ OC.L10N.register(
"Set up two-factor authentication" : "تعيين المصادقة بخطوتين",
"Two-factor authentication is enforced but has not been configured on your account. Use one of your backup codes to log in or contact your admin for assistance." : "يتم فرض المصادقة ذات العاملين ولكن لم يتم تكوينها على حسابك. استخدم أحد الرموز الاحتياطية لتسجيل الدخول أو اتصل بالمسؤول للحصول على المساعدة.",
"Use backup code" : "إستخدم الرمز الإحتياطي",
- "Cancel login" : "الغاء تسجيل الدخول",
+ "Cancel login" : "إلغاء تسجيل الدخول",
"Setup two-factor authentication" : "تعيين المصادقة بخطوتين",
"Enhanced security is enforced for your account. Choose which provider to set up:" : "تعزيز الآمان مفعل في حسابك. تعيين المشغل للخدمة:",
"Error while validating your second factor" : "خطأ أثناء التحقق من صحة العامل الثاني الخاص بك",
@@ -358,7 +362,7 @@ OC.L10N.register(
"This %s instance is currently in maintenance mode, which may take a while." : "هذا %s في وضع الصيانة، قد يستغرق ذلك بعض الوقت.",
"This page will refresh itself when the instance is available again." : "سوف يتم تحديث الصفحة في حين الخادم جاهز للاستخدام مجددا.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "تواصل مع مسؤول النظام اذا استمرت هذه الرسالة بالظهور دائما أو بشكل مفاجئ.",
- "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "جاري فحص اذا كان مخطط قاعدة البيانات يمكن تحديثه (قد يستغرق ذلك بعض الوقت اعتمادة على مساحة قاعدة البيانات)",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "جاري فحص إذا كان مخطط قاعدة البيانات يمكن تحديثه (قد يستغرق ذلك بعض الوقت اعتمادة على مساحة قاعدة البيانات)",
"Checked database schema update" : "تم فحص تحديث مخطط قاعدة البيانات",
"Checking updates of apps" : "التحقق من تحديثات التطبيقات",
"Checked database schema update for apps" : "تم فحص تحديث مخطط قاعدة البيانات للتطبيقات",
@@ -373,7 +377,7 @@ OC.L10N.register(
"No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "لم يتم تكوين ذاكرة تخزين مؤقت. لتحسين الأداء ، يرجى تكوين memcache ، إذا كان ذلك متاحًا. يمكن العثور على مزيد من المعلومات في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>.",
"No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "لم يتم العثور على مصدر مناسب randomness بواسطة PHP وهو مهم لأسباب أمنية. يمكن العثور على مزيد من المعلومات في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>.",
"You are currently running PHP {version}. Upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "تقوم حاليا بتشغيل PHP {version}. قم بترقية إصدار PHP الخاص بك للاستفادة من <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{phpLink}\">تحديثات الأداء والأمان التي توفرها PHP Group</a> بمجرد أن يدعمها التوزيعه الخاص بك.",
- "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "اعدادات reverse proxy header غير صحيحه ، أو أنك تقوم بالوصول إلى Nextcloud من وكيل موثوق به. إذا لم يكن الأمر كذلك ، فهذه مشكلة أمنية ويمكن أن تسمح للمهاجمين بانتحال عنوان IP الخاص بهم كما هو مرئي لـ Nextcloud. يمكن العثور على مزيد من المعلومات في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>.",
+ "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "إعدادات reverse proxy header غير صحيحه ، أو أنك تقوم بالوصول إلى Nextcloud من وكيل موثوق به. إذا لم يكن الأمر كذلك ، فهذه مشكلة أمنية ويمكن أن تسمح للمهاجمين بانتحال عنوان IP الخاص بهم كما هو مرئي لـ Nextcloud. يمكن العثور على مزيد من المعلومات في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "تم تكوين Memcached كذاكرة تخزين مؤقت موزعة ، ولكن تم تثبيت وحدة PHP الخاطئة \"memcache\". \\ OC \\ Memcache \\ Memcached يدعم فقط \"memcached\" وليس \"memcache\". انظر <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{wikiLink}\">الويكي memcached حول كلا الوحدتين</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "لم تجتز بعض الملفات اختبار السلامة. يمكن العثور على مزيد من المعلومات حول كيفية حل هذه المشكلة في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">قائمة الملفات غير الصالحة ...</a> / <a href=\"{rescanEndpoint}\">إعادة الفحص ...</a>)",
"The PHP OPcache module is not loaded. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">For better performance it is recommended</a> to load it into your PHP installation." : "لم يتم تحميل وحدة PHP OPcache. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">للحصول على أداء أفضل يوصى</a> بتحميله في تثبيت نسخة PHP الخاصة بك.",
@@ -386,9 +390,11 @@ OC.L10N.register(
"The \"{header}\" HTTP header is not set to \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" or \"{val5}\". This can leak referer information. See the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{link}\">W3C Recommendation ↗</a>." : "لم يتم تعيين رأس HTTP \"{header}\" على \"{val1}\" أو \"{val2}\" أو \"{val3}\" أو \"{val4}\" أو \"{val5}\". يمكن أن يؤدي هذا إلى تسريب معلومات المرجع. راجع <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{link}\">توصية W3C ↗</a>.",
"The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the <a href=\"{docUrl}\" rel=\"noreferrer noopener\">security tips ↗</a>." : "لم يتم تعيين رأس HTTP \"Strict-Transport-Security\" على \"{seconds}\" ثانية على الأقل. لتحسين الأمان ، يوصى بتمكين HSTS كما هو موضح في <a href=\"{docUrl}\" rel=\"noreferrer noopener\">إرشادات الأمان ↗</a>.",
"Accessing site insecurely via HTTP. You are strongly advised to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips ↗</a>." : "الوصول إلى الموقع بشكل غير آمن عبر HTTP. يُنصح بشدة تعيين الخادم الخاص بك لطلب HTTPS بدلاً من ذلك ، كما هو موضح في <a href=\"{docUrl}\">إرشادات الأمان ↗</a>.",
- "Continue to Nextcloud" : "المواصلة إلى ناكست كلاود",
+ "Continue to Nextcloud" : "المواصلة إلى نكست كلاود",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Enter-the-singular-translation-here","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","تم التحديث بنجاح، سوف يعاد توجيهك إلى نكست كلاود خلال %n ثواني."],
"Searching other places" : "البحث في أماكن أخرى",
"No search results in other folders for {tag}{filter}{endtag}" : "لا نتائج بحث في مجلدات اخرى ل {tag}{filter}{endtag}",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} نتائج البحث في مجلدات اخرى","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","{count} نتائج البحث في مجلدات اخرى"],
"Nextcloud {app}" : "نكست كلاود {app} ",
"Search" : "البحث",
"These apps will be updated:" : "سوف يتم تحديث هذه التطبيقات :",
diff --git a/core/l10n/ar.json b/core/l10n/ar.json
index d9e83118532..12e2408541a 100644
--- a/core/l10n/ar.json
+++ b/core/l10n/ar.json
@@ -14,10 +14,10 @@
"Crop is not square" : "القص ليس مربعا",
"State token does not match" : "حالة Token غير مطابقة",
"Invalid app password" : "كلمة المرور للتطبيق غير صحيحه",
- "Could not complete login" : "لا يمكن اكمال عملية تسجيل الدخول",
- "Your login token is invalid or has expired" : "معلومات الجلسة غير صالحة او منتهية",
+ "Could not complete login" : "لا يمكن إكمال عملية تسجيل الدخول",
+ "Your login token is invalid or has expired" : "معلومات الجلسة غير صالحة أو منتهية",
"Password reset is disabled" : "تم تعطيل إعادة تعيين كلمة المرور",
- "Couldn't reset password because the token is invalid" : "لا يمكن اعادة تعيين كلمة المرور بسبب خطأ في تكوين الجلسة",
+ "Couldn't reset password because the token is invalid" : "لا يمكن إعادة تعيين كلمة المرور بسبب خطأ في تكوين الجلسة",
"Couldn't reset password because the token is expired" : "لا يمكن إعادة تعيين كلمة المرور بسبب انتهاء صلاحية الجلسة.",
"%s password reset" : "%s إعادة تعيين كلمة مرور ",
"Password reset" : "إعادة تعيين كلمة مرور",
@@ -45,7 +45,7 @@
"Checking for update of app \"%s\" in appstore" : "التحقق من تحديثات التطبيقات \"%s\" في متجر التطبيقات",
"Update app \"%s\" from appstore" : "قم بتحديث التطبيق \"%s\" عن طريق متجر التطبيقات",
"Checked for update of app \"%s\" in appstore" : "التحقق من تحديثات التطبيقات \" %s \" في متجر التطبيقات",
- "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "جاري فحص اذا كان مخطط قاعدة البيانات لـ %s يمكن تحديثه (قد يستغرق ذلك بعض الوقت اعتمادة على مساحة قاعدة البيانات)",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "جاري فحص إذا كان مخطط قاعدة البيانات لـ %s يمكن تحديثه (قد يستغرق ذلك بعض الوقت اعتمادًا على مساحة قاعدة البيانات)",
"Updated \"%1$s\" to %2$s" : "حدث \"%1$s\" إلى %2$s",
"Set log level to debug" : "أعد تعيين مستوى السجلات إلى اكتشاف الاخطاء المفصلة",
"Reset log level" : "أعد تعيين مستوى السجلات",
@@ -54,13 +54,13 @@
"%s (incompatible)" : "%s (غير متوافق)",
"The following apps have been disabled: %s" : "التطبيقات التاليه غير مفعله: %s",
"Already up to date" : "محدّثة مسبقاً",
- "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "الخادم السحابي لم يتم تعيين السماح بتزامن الملف، بسبب واجهة التأليف الموزع على الويب وتعيين الإصدار WebDAV غير متصلة.",
+ "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : " لم يتم تعيين السماح لخادمك السحابي بتزامن الملف، بسبب واجهة التأليف الموزع على الويب وتعيين الإصدار WebDAV غير متصلة.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the {linkstart}documentation ↗{linkend}." : " لم يتم ضبط خادمك السحابي لتعيين الكشف عن \"{url}\". للمزيد من التفاصيل يمكن العثور عليها في {linkstart}مستند ↗{linkend}.",
"Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's {linkstart}documentation page ↗{linkend}. On Nginx those are typically the lines starting with \"location ~\" that need an update." : " لم يتم ضبط تعيين الكشف عن \"{url}\"في خادمك السحابي. من الغالب يجب تغيير اعدادات الخادم السحابي لعدم توصيل المجلد بشكل مباشر. الرجاء مقارنة إعداداتك مع الإعدادات الإصلية لملف \".htaccess\" لاباتشي أو نجينكس في {linkstart} صفحة التوثيق ↗ {linkend}. في Nginx ، عادةً ما تكون هذه الأسطر التي تبدأ بـ \"location ~\" والتي تحتاج إلى تحديث.",
- "Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our {linkstart}documentation ↗{linkend}." : "خادمك السحابي لم يتم ضبطه لـ تعيين توصيل نوع .woff2 من الملفات. بالغالب هذه المشكلة تخص اعدادات نجينكس. لـ نيكست كلاود الاصدار 15 يتم اعادة تنظيم وضبط اعدادات التوصيل لملفات .woff2 .قارن تهيئة Nginx بالتهيئة الموصى بها في وثائق {linkstart} الخاصة بنا ↗ {linkend}.",
+ "Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our {linkstart}documentation ↗{linkend}." : "خادمك السحابي لم يتم ضبطه لـ تعيين توصيل نوع .woff2 من الملفات. بالغالب هذه المشكلة تخص اعدادات نجينكس. لـ نيكست كلاود الاصدار 15 يتم اعادة تنظيم وضبط إعدادات التوصيل لملفات .woff2 .قارن تهيئة Nginx بالتهيئة الموصى بها في وثائق {linkstart} الخاصة بنا ↗ {linkend}.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "يبدو أن PHP لم يتم إعدادها بشكل صحيح للاستعلام عن متغيرات بيئة النظام. يقوم الاختبار باستخدام getenv (\"PATH\") بإرجاع استجابة فارغة فقط.",
"Please check the {linkstart}installation documentation ↗{linkend} for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "يرجى التحقق من {linkstart} مستند التثبيت ↗{linkend} لملاحظات إعدادات PHP وإعدادات PHP لخادمك السحابي ، خاصة عند استخدام php-fpm.",
- "The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "تم تمكين اعداد للقراءة فقط. هذا يمنع تعيين بعض الاعدادات عبر واجهة الويب. علاوة على ذلك ، يجب جعل الملف قابلاً للكتابة يدويًا لكل تحديث.",
+ "The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "تم تمكين إعداد للقراءة فقط. هذا يمنع تعيين بعض الإعدادات عبر واجهة الويب. علاوة على ذلك ، يجب جعل الملف قابلاً للكتابة يدويًا لكل تحديث.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "لا تعمل قاعدة البيانات الخاصة بك بمستوى عزل المعاملة \"READ COMMITTED\". هذا يمكن أن يسبب مشاكل عند تنفيذ عدة إجراءات بالتوازي.",
"The PHP module \"fileinfo\" is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "وحدة PHP \"fileinfo\" مفقودة. يوصى بشدة بتمكين هذه الوحدة للحصول على أفضل النتائج مع اكتشاف نوع MIME.",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable \"filelocking.enabled\" in config.php to avoid these problems. See the {linkstart}documentation ↗{linkend} for more information." : "قفل ملف المعاملات معطل ، قد يؤدي ذلك إلى مشاكل تتعلق بظروف السباق. قم بتمكين \"filelocking.enabled\" في config.php لتجنب هذه المشاكل. راجع وثائق {linkstart} ↗ {linkend} لمزيد من المعلومات.",
@@ -114,17 +114,19 @@
"<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>هذه هي نتائج البحث الخاصة بك <script>تنبيه(1)</script> </strong>",
"new" : "جديد",
"_download %n file_::_download %n files_" : ["تنزيل %n ملف","تنزيل ملف واحد","تنزيل ملفين","تنزيل %n ملفات","تنزيل %n ملفات","تنزيل %n ملفات"],
- "The update is in progress, leaving this page might interrupt the process in some environments." : "جاري التحديث، وقد يؤدي مغادرة هذه الصفحة إلى مقاطعة العملية في بعض الاحيان.",
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "جاري التحديث، وقد يؤدي مغادرة هذه الصفحة إلى توقف العملية في بعض الاحيان.",
"Update to {version}" : "التحديث إلى {version}",
- "An error occurred." : "طرأ هناك خطأ.",
+ "An error occurred." : "حدث خطأ.",
"Please reload the page." : "رجاء أعد تحميل الصفحة.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "فشل التحديث. لمزيد من المعلومات <a href=\"{url}\"> تصفح مقالات المنتدى الخاص بنا </a> لإصلاح هذا الخطأ.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "فشل التحديث. يرجى التبليغ عن هذه المشكلة إلى <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\"> مجتمع Nextcloud </a>.",
- "Log in" : "أدخل",
+ "Continue to {productName}" : "أكمل إلى {productName}",
+ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني."],
+ "Log in" : "تسجيل الدخول",
"Logging in …" : "تسجيل الدخول …",
"Server side authentication failed!" : "رفض الخادم المصادقة!",
"Please contact your administrator." : "يرجى التواصل مع مسؤول النظام.",
- "An internal error occurred." : "طرأ هناك خطأ.",
+ "An internal error occurred." : "حدث خطأ داخلي.",
"Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مسؤول النظام.",
"Username or email" : "اسم المستخدم أو البريد الالكتروني",
"Password" : "كلمة المرور",
@@ -143,19 +145,19 @@
"New password" : "كلمات سر جديدة",
"Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "المحتوى الخاص بك مشفر. لن تكون هناك طريقة لاستعادة محتوياتك وبياناتك بعد إعادة تعيين كلمة مرورك. إذا لم تكن متأكدًا مما يجب فعله ، فيرجى الاتصال بالمسؤول قبل المتابعة. هل حقا تريد الاستمرار؟",
"I know what I'm doing" : "أعرف ماذا أفعل",
- "Resetting password" : "اعادة تعيين كلمة المرور",
+ "Resetting password" : "إعادة تعيين كلمة المرور",
"Recommended apps" : "التطبيقات المستحسنة",
"Loading apps …" : "تحميل التطبيقات…",
"Could not fetch list of apps from the app store." : "لا يمكن العثور على قائمة التطبيقات من متجر التطبيقات.",
"Installing apps …" : "جاري تثبيت التطبيقات…",
- "App download or installation failed" : "تحميل او تثبيت التطبيق فشل",
+ "App download or installation failed" : "فشل تحميل أو تثبيت التطبيق ",
"Can't install this app because it is not compatible" : "لا يمكن تثبيت هذا التطبيق لانه غير متوافق",
"Can't install this app" : "لا يمكن تثبيت هذا التطبيق",
- "Cancel" : "الغاء",
- "Schedule work & meetings, synced with all your devices." : "قم بجدولة العمل والاجتماعات ، بالتزامن مع جميع أجهزتك.",
+ "Cancel" : "إلغاء",
+ "Schedule work & meetings, synced with all your devices." : "قم بجدولة العمل والإجتماعات ، بالتزامن مع جميع أجهزتك.",
"Keep your colleagues and friends in one place without leaking their private info." : "احتفظ بزملائك وأصدقائك في مكان واحد دون تسريب معلوماتهم الخاصة.",
"Simple email app nicely integrated with Files, Contacts and Calendar." : "تطبيق بريد إلكتروني بسيط متوافق بشكل ممتاز مع الملفات وجهات الاتصال والتقويم.",
- "Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps." : "الدردشة ومكالمات الفيديو ومشاركة الشاشة والاجتماعات عبر الإنترنت ومؤتمرات الويب - في متصفحك ومع تطبيق للهاتف المحمول.",
+ "Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps." : "الدردشة ومكالمات الفيديو ومشاركة الشاشة والإجتماعات عبر الإنترنت ومؤتمرات الويب - في متصفحك ومع تطبيق للهاتف المحمول.",
"Collaboratively edit office documents." : "تحرير مستندات المكتب بشكل تعاوني.",
"Local document editing back-end used by the Collabora Online app." : "خلفية تحرير المستندات المحلية المستخدمة بواسطة تطبيق Collabora Online.",
"Forgot password?" : "هل نسيت كلمة السر ؟",
@@ -167,16 +169,17 @@
"No results for {query}" : "لا يوجد ناتج لـ {query}",
"Start typing to search" : "اكتب هنا للبحث",
"Loading more results …" : "جاري عرض المزيد من النتائج…",
- "Load more results" : "المزيد",
+ "Load more results" : " عرض المزيد من النتائج",
"An error occurred while searching for {type}" : "حدث خطأ أثناء البحث عن {type}",
+ "_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Enter-the-singular-translation-here","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","من فضلك ادخل أحرف {minSearchLength} أو أكثر للبحث"],
"Search {types} …" : "بحث {types} …",
"Settings" : "الإعدادات",
- "Could not load your contacts" : "تعذر تحميل جهات اتصالاتك",
- "Search contacts …" : "البحث عن مراسلين …",
+ "Could not load your contacts" : "تعذر تحميل جهات الإتصال",
+ "Search contacts …" : "البحث عن جهات الإتصال",
"No contacts found" : "لم يعثر على جهات اتصال",
- "Show all contacts …" : "إظهار كافة المراسلين …",
- "Install the Contacts app" : "تثبيت تطبيق جهات الاتصال",
- "Loading your contacts …" : "تحميل جهات الاتصال",
+ "Show all contacts …" : "إظهار كافة جهات الإتصال …",
+ "Install the Contacts app" : "تثبيت تطبيق جهات الإتصال",
+ "Loading your contacts …" : "تحميل جهات الإتصال",
"Looking for {term} …" : "جاري البحث عن {term}",
"No" : "لا",
"Yes" : "نعم",
@@ -215,10 +218,11 @@
"Authentication required" : "المصادقة مطلوبة",
"This action requires you to confirm your password" : "يتطلب هذا الإجراء منك تأكيد كلمة المرور",
"Confirm" : "تأكيد",
- "Failed to authenticate, try again" : "أخفق المصادقة، أعد المحاولة",
+ "Failed to authenticate, try again" : "أخفقت المصادقة، أعد المحاولة",
"seconds ago" : "منذ ثواني",
"Connection to server lost" : "تم فقد الاتصال بالخادم",
- "Add to a project" : "اضافة إلى مشروع",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["حدث خطأ أثناء تحميل الصفحة، سيعاد التحميل خلال %n ثانية","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","حدث خطأ أثناء تحميل الصفحة، سيعاد التحميل خلال %n ثواني."],
+ "Add to a project" : "إضافة إلى مشروع",
"Show details" : "عرض التفاصيل",
"Hide details" : "إخفاء التفاصيل",
"Rename project" : "إعادة تسمية المشروع",
@@ -248,7 +252,7 @@
"Apps" : "التطبيقات",
"Admin" : "المدير",
"Help" : "المساعدة",
- "Access forbidden" : "التوصّل محظور",
+ "Access forbidden" : "الوصول محظور",
"File not found" : "لم يتم العثور على الملف",
"The document could not be found on the server. Maybe the share was deleted or has expired?" : "لا يمكن العثور على المستند، ربما المشاركة محذوفه او منتهيه؟",
"Back to %s" : "العودة إلى %s",
@@ -277,13 +281,13 @@
"Show password" : "اظهر كلمة المرور",
"Storage & database" : "التخزين و قاعدة البيانات",
"Data folder" : "مجلد المعلومات",
- "Configure the database" : "اعداد قاعدة البيانات",
+ "Configure the database" : "إعداد قاعدة البيانات",
"Only %s is available." : "لم يتبقى إلّا %s.",
"Install and activate additional PHP modules to choose other database types." : "ثبت وفعل مودلات PHP اضافية لاستخدام قاعدة بيانات مختلفة.",
"For more details check out the documentation." : "للمزيد من التفاصيل، يرجى الإطلاع على الدليل.",
"Database user" : "مستخدم قاعدة البيانات",
"Database password" : "كلمة سر مستخدم قاعدة البيانات",
- "Database name" : "إسم قاعدة البيانات",
+ "Database name" : "اسم قاعدة البيانات",
"Database tablespace" : "مساحة جدول قاعدة البيانات",
"Database host" : "خادم قاعدة البيانات",
"Please specify the port number along with the host name (e.g., localhost:5432)." : "يرجى تحديد رقم المنفذ مع اسم المضيف (على سبيل المثال ، mycloud:5432).",
@@ -295,19 +299,19 @@
"Calendar, Contacts, Talk, Mail & Collaborative editing" : "التقويم، جهات الاتصال، التحدث، البريد، التعديل الجماعي",
"Finish setup" : "انهاء التعديلات",
"Finishing …" : "إنهاء …",
- "Need help?" : "محتاج مساعدة؟",
+ "Need help?" : "تحتاج إلى مساعدة؟",
"See the documentation" : "اطلع على التعليمات",
"It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "يبدو أنك تحاول إعادة تثبيت نكست كلاود الخاص بك. ومع ذلك ، فإن الملف CAN_INSTALL مفقود من دليل التثبيت الخاص بك. يرجى إنشاء الملف CAN_INSTALL في مجلد التثبيت الخاص بك للمتابعة.",
"Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "تعذر إزالة CAN_INSTALL من مجلد التكوين. الرجاء إزالة هذا الملف يدويا.",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "هذا التطبيق يتطلب JavaScript ليتم تشغيله بالطريقة الصحيحة. يرجى {linkstart}تفعيل JavaScript{linkend} وتحديث الصفحة.",
- "Get your own free account" : "تحصّل على حساب لك بالمجان",
+ "Get your own free account" : "احصل على حساب لك بالمجان",
"Skip to main content" : "تخطّيه وانتقل إلى المحتوى الرئيسي",
"Skip to navigation of app" : "تجاهل التنقل في التطبيق",
"More apps" : "المزيد من التطبيقات",
"More" : "المزيد",
"More apps menu" : "المزيد من قائمة التطبيقات",
- "Contacts" : "المُراسِلون",
- "Contacts menu" : "قائمة المراسِلين",
+ "Contacts" : "جهات الإتصال",
+ "Contacts menu" : "قائمة جهات الإتصال",
"Settings menu" : "قائمة الإعدادات",
"Confirm your password" : "تأكيد كلمتك السرية",
"Connect to your account" : "الاتصال بحسابك",
@@ -331,7 +335,7 @@
"Set up two-factor authentication" : "تعيين المصادقة بخطوتين",
"Two-factor authentication is enforced but has not been configured on your account. Use one of your backup codes to log in or contact your admin for assistance." : "يتم فرض المصادقة ذات العاملين ولكن لم يتم تكوينها على حسابك. استخدم أحد الرموز الاحتياطية لتسجيل الدخول أو اتصل بالمسؤول للحصول على المساعدة.",
"Use backup code" : "إستخدم الرمز الإحتياطي",
- "Cancel login" : "الغاء تسجيل الدخول",
+ "Cancel login" : "إلغاء تسجيل الدخول",
"Setup two-factor authentication" : "تعيين المصادقة بخطوتين",
"Enhanced security is enforced for your account. Choose which provider to set up:" : "تعزيز الآمان مفعل في حسابك. تعيين المشغل للخدمة:",
"Error while validating your second factor" : "خطأ أثناء التحقق من صحة العامل الثاني الخاص بك",
@@ -356,7 +360,7 @@
"This %s instance is currently in maintenance mode, which may take a while." : "هذا %s في وضع الصيانة، قد يستغرق ذلك بعض الوقت.",
"This page will refresh itself when the instance is available again." : "سوف يتم تحديث الصفحة في حين الخادم جاهز للاستخدام مجددا.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "تواصل مع مسؤول النظام اذا استمرت هذه الرسالة بالظهور دائما أو بشكل مفاجئ.",
- "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "جاري فحص اذا كان مخطط قاعدة البيانات يمكن تحديثه (قد يستغرق ذلك بعض الوقت اعتمادة على مساحة قاعدة البيانات)",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "جاري فحص إذا كان مخطط قاعدة البيانات يمكن تحديثه (قد يستغرق ذلك بعض الوقت اعتمادة على مساحة قاعدة البيانات)",
"Checked database schema update" : "تم فحص تحديث مخطط قاعدة البيانات",
"Checking updates of apps" : "التحقق من تحديثات التطبيقات",
"Checked database schema update for apps" : "تم فحص تحديث مخطط قاعدة البيانات للتطبيقات",
@@ -371,7 +375,7 @@
"No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "لم يتم تكوين ذاكرة تخزين مؤقت. لتحسين الأداء ، يرجى تكوين memcache ، إذا كان ذلك متاحًا. يمكن العثور على مزيد من المعلومات في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>.",
"No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "لم يتم العثور على مصدر مناسب randomness بواسطة PHP وهو مهم لأسباب أمنية. يمكن العثور على مزيد من المعلومات في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>.",
"You are currently running PHP {version}. Upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "تقوم حاليا بتشغيل PHP {version}. قم بترقية إصدار PHP الخاص بك للاستفادة من <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{phpLink}\">تحديثات الأداء والأمان التي توفرها PHP Group</a> بمجرد أن يدعمها التوزيعه الخاص بك.",
- "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "اعدادات reverse proxy header غير صحيحه ، أو أنك تقوم بالوصول إلى Nextcloud من وكيل موثوق به. إذا لم يكن الأمر كذلك ، فهذه مشكلة أمنية ويمكن أن تسمح للمهاجمين بانتحال عنوان IP الخاص بهم كما هو مرئي لـ Nextcloud. يمكن العثور على مزيد من المعلومات في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>.",
+ "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "إعدادات reverse proxy header غير صحيحه ، أو أنك تقوم بالوصول إلى Nextcloud من وكيل موثوق به. إذا لم يكن الأمر كذلك ، فهذه مشكلة أمنية ويمكن أن تسمح للمهاجمين بانتحال عنوان IP الخاص بهم كما هو مرئي لـ Nextcloud. يمكن العثور على مزيد من المعلومات في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "تم تكوين Memcached كذاكرة تخزين مؤقت موزعة ، ولكن تم تثبيت وحدة PHP الخاطئة \"memcache\". \\ OC \\ Memcache \\ Memcached يدعم فقط \"memcached\" وليس \"memcache\". انظر <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{wikiLink}\">الويكي memcached حول كلا الوحدتين</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "لم تجتز بعض الملفات اختبار السلامة. يمكن العثور على مزيد من المعلومات حول كيفية حل هذه المشكلة في <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">التعليمات</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">قائمة الملفات غير الصالحة ...</a> / <a href=\"{rescanEndpoint}\">إعادة الفحص ...</a>)",
"The PHP OPcache module is not loaded. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">For better performance it is recommended</a> to load it into your PHP installation." : "لم يتم تحميل وحدة PHP OPcache. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">للحصول على أداء أفضل يوصى</a> بتحميله في تثبيت نسخة PHP الخاصة بك.",
@@ -384,9 +388,11 @@
"The \"{header}\" HTTP header is not set to \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" or \"{val5}\". This can leak referer information. See the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{link}\">W3C Recommendation ↗</a>." : "لم يتم تعيين رأس HTTP \"{header}\" على \"{val1}\" أو \"{val2}\" أو \"{val3}\" أو \"{val4}\" أو \"{val5}\". يمكن أن يؤدي هذا إلى تسريب معلومات المرجع. راجع <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{link}\">توصية W3C ↗</a>.",
"The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the <a href=\"{docUrl}\" rel=\"noreferrer noopener\">security tips ↗</a>." : "لم يتم تعيين رأس HTTP \"Strict-Transport-Security\" على \"{seconds}\" ثانية على الأقل. لتحسين الأمان ، يوصى بتمكين HSTS كما هو موضح في <a href=\"{docUrl}\" rel=\"noreferrer noopener\">إرشادات الأمان ↗</a>.",
"Accessing site insecurely via HTTP. You are strongly advised to set up your server to require HTTPS instead, as described in the <a href=\"{docUrl}\">security tips ↗</a>." : "الوصول إلى الموقع بشكل غير آمن عبر HTTP. يُنصح بشدة تعيين الخادم الخاص بك لطلب HTTPS بدلاً من ذلك ، كما هو موضح في <a href=\"{docUrl}\">إرشادات الأمان ↗</a>.",
- "Continue to Nextcloud" : "المواصلة إلى ناكست كلاود",
+ "Continue to Nextcloud" : "المواصلة إلى نكست كلاود",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Enter-the-singular-translation-here","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","تم التحديث بنجاح، سوف يعاد توجيهك إلى نكست كلاود خلال %n ثواني."],
"Searching other places" : "البحث في أماكن أخرى",
"No search results in other folders for {tag}{filter}{endtag}" : "لا نتائج بحث في مجلدات اخرى ل {tag}{filter}{endtag}",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} نتائج البحث في مجلدات اخرى","Enter-the-singular-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","Enter-the-plural-translation-here","{count} نتائج البحث في مجلدات اخرى"],
"Nextcloud {app}" : "نكست كلاود {app} ",
"Search" : "البحث",
"These apps will be updated:" : "سوف يتم تحديث هذه التطبيقات :",
diff --git a/core/l10n/cs.js b/core/l10n/cs.js
index ffefc77a25b..f8c8e255acb 100644
--- a/core/l10n/cs.js
+++ b/core/l10n/cs.js
@@ -11,7 +11,7 @@ OC.L10N.register(
"Invalid image" : "Neplatný obrázek",
"An error occurred. Please contact your admin." : "Došlo k chybě. Obraťte se na svého správce.",
"No temporary profile picture available, try again" : "Dočasný profilový obrázek není k dispozici, zkuste to znovu",
- "No crop data provided" : "Nebyla poskytnuta data pro oříznutí obrázku",
+ "No crop data provided" : "Nezadáno, jak má být obrázek oříznut",
"No valid crop data provided" : "Nebyla poskytnuta platná data pro oříznutí obrázku",
"Crop is not square" : "Ořez není čtvercový",
"State token does not match" : "Stavový token neodpovídá",
@@ -52,7 +52,7 @@ OC.L10N.register(
"Set log level to debug" : "Nastavit úroveň podrobnosti záznamu událostí na stupeň ladění (debug)",
"Reset log level" : "Vrátit podrobnost záznamu událostí na výchozí úroveň",
"Starting code integrity check" : "Spouští se kontrola neporušenosti kódu",
- "Finished code integrity check" : "Kontrola neporušenosti kódu dokončena",
+ "Finished code integrity check" : "Kontrola neporušenosti zdrojových kódů aplikace dokončena",
"%s (incompatible)" : "%s (nekompatibilní)",
"The following apps have been disabled: %s" : "Následující aplikace byly vypnuty: %s",
"Already up to date" : "Už je aktuální",
@@ -121,7 +121,7 @@ OC.L10N.register(
"An error occurred." : "Došlo k chybě.",
"Please reload the page." : "Načtěte stránku znovu.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizace nebyla úspěšná. Další informace <a href=\"{url}\">se dočtete v příspěvku na diskuzním fóru</a>, pojednávajícím o tomto problému.",
- "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizace nebyla úspěšná. Nahlaste problém <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitě kolem Nextcloud</a>",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizace nebyla úspěšná. Prosím nahlaste tento problém <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitě projektu Nextcloud</a>",
"Continue to {productName}" : "Pokračujte k {productName}",
"_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["Aktualizace proběhla úspěšně. Za %n vteřinu budete přesměřováni na {productName}","Aktualizace proběhla úspěšně. Za %n vteřiny budete přesměřováni na {productName}","Aktualizace proběhla úspěšně. Za %n vteřin budete přesměřováni na {productName}","Aktualizace proběhla úspěšně. Za %n vteřin budete přesměřováni na {productName}"],
"Log in" : "Přihlásit",
@@ -129,7 +129,7 @@ OC.L10N.register(
"Server side authentication failed!" : "Ověření se na straně serveru se nezdařilo!",
"Please contact your administrator." : "Obraťte se na svého správce.",
"An internal error occurred." : "Došlo k vnitřní chybě.",
- "Please try again or contact your administrator." : "Zkuste to znovu nebo se obraťte na svého správce.",
+ "Please try again or contact your administrator." : "Zkuste to znovu nebo se obraťte na správce.",
"Username or email" : "Uživatelské jméno nebo e-mailová adresa",
"Password" : "Heslo",
"Wrong username or password." : "Nesprávné uživatelské jméno nebo heslo.",
@@ -158,9 +158,9 @@ OC.L10N.register(
"Cancel" : "Storno",
"Schedule work & meetings, synced with all your devices." : "Plánujte si práci a schůzky – synchronizováno napříč všemi vašimi zařízeními.",
"Keep your colleagues and friends in one place without leaking their private info." : "Uchovávejte si údaje svých kolegů a přátel na jednom místě, aniž by k jejim osobním údajům získal přístup někdo jiný.",
- "Simple email app nicely integrated with Files, Contacts and Calendar." : "Jednoduchý e-mailový klient, propojený se Soubory, Kontakty a Kalendářem.",
+ "Simple email app nicely integrated with Files, Contacts and Calendar." : "Jednoduchý e-mailový klient, propojený s aplikacemi Soubory, Kontakty a Kalendář.",
"Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps." : "Chatování, videohovory, sdílení obrazovky, schůze na dálku a webové konference – ve webovém prohlížeči a mobilních aplikacích.",
- "Collaboratively edit office documents." : "Spolupracujte na upravování kancelářských dokumentů.",
+ "Collaboratively edit office documents." : "Spolupracujte na kancelářských dokumentech s ostatními souběžně je upravujícími uživateli.",
"Local document editing back-end used by the Collabora Online app." : "Podpůrná vrstva pro místní úpravu dokumentů používána aplikací Collabora Online.",
"Forgot password?" : "Zapomněli jste heslo?",
"Log in with a device" : "Přihlásit se pomocí zařízení",
@@ -363,7 +363,7 @@ OC.L10N.register(
"This page will refresh itself when the instance is available again." : "Tato stránka se automaticky znovu načte, jakmile bude tato instance opět dostupná.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Pokud se tato zpráva objevuje opakovaně nebo nečekaně, obraťte se správce systému.",
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Probíhá zjišťování, zda je možné aktualizovat schéma databáze (v závislosti na velikosti databáze to může zabrat delší dobu)",
- "Checked database schema update" : "Aktualizace schéma databáze byla ověřena",
+ "Checked database schema update" : "Ověřeno, že schéma databáze bylo zaktualizováno",
"Checking updates of apps" : "Kontrola aktualizace aplikací",
"Checked database schema update for apps" : "Aktualizace schéma databáze pro aplikace byla ověřena",
"Following apps have been disabled: %s" : "Následující aplikace byly vypnuty: %s",
diff --git a/core/l10n/cs.json b/core/l10n/cs.json
index 821e1fb6081..4cc1d443a90 100644
--- a/core/l10n/cs.json
+++ b/core/l10n/cs.json
@@ -9,7 +9,7 @@
"Invalid image" : "Neplatný obrázek",
"An error occurred. Please contact your admin." : "Došlo k chybě. Obraťte se na svého správce.",
"No temporary profile picture available, try again" : "Dočasný profilový obrázek není k dispozici, zkuste to znovu",
- "No crop data provided" : "Nebyla poskytnuta data pro oříznutí obrázku",
+ "No crop data provided" : "Nezadáno, jak má být obrázek oříznut",
"No valid crop data provided" : "Nebyla poskytnuta platná data pro oříznutí obrázku",
"Crop is not square" : "Ořez není čtvercový",
"State token does not match" : "Stavový token neodpovídá",
@@ -50,7 +50,7 @@
"Set log level to debug" : "Nastavit úroveň podrobnosti záznamu událostí na stupeň ladění (debug)",
"Reset log level" : "Vrátit podrobnost záznamu událostí na výchozí úroveň",
"Starting code integrity check" : "Spouští se kontrola neporušenosti kódu",
- "Finished code integrity check" : "Kontrola neporušenosti kódu dokončena",
+ "Finished code integrity check" : "Kontrola neporušenosti zdrojových kódů aplikace dokončena",
"%s (incompatible)" : "%s (nekompatibilní)",
"The following apps have been disabled: %s" : "Následující aplikace byly vypnuty: %s",
"Already up to date" : "Už je aktuální",
@@ -119,7 +119,7 @@
"An error occurred." : "Došlo k chybě.",
"Please reload the page." : "Načtěte stránku znovu.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizace nebyla úspěšná. Další informace <a href=\"{url}\">se dočtete v příspěvku na diskuzním fóru</a>, pojednávajícím o tomto problému.",
- "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizace nebyla úspěšná. Nahlaste problém <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitě kolem Nextcloud</a>",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizace nebyla úspěšná. Prosím nahlaste tento problém <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitě projektu Nextcloud</a>",
"Continue to {productName}" : "Pokračujte k {productName}",
"_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["Aktualizace proběhla úspěšně. Za %n vteřinu budete přesměřováni na {productName}","Aktualizace proběhla úspěšně. Za %n vteřiny budete přesměřováni na {productName}","Aktualizace proběhla úspěšně. Za %n vteřin budete přesměřováni na {productName}","Aktualizace proběhla úspěšně. Za %n vteřin budete přesměřováni na {productName}"],
"Log in" : "Přihlásit",
@@ -127,7 +127,7 @@
"Server side authentication failed!" : "Ověření se na straně serveru se nezdařilo!",
"Please contact your administrator." : "Obraťte se na svého správce.",
"An internal error occurred." : "Došlo k vnitřní chybě.",
- "Please try again or contact your administrator." : "Zkuste to znovu nebo se obraťte na svého správce.",
+ "Please try again or contact your administrator." : "Zkuste to znovu nebo se obraťte na správce.",
"Username or email" : "Uživatelské jméno nebo e-mailová adresa",
"Password" : "Heslo",
"Wrong username or password." : "Nesprávné uživatelské jméno nebo heslo.",
@@ -156,9 +156,9 @@
"Cancel" : "Storno",
"Schedule work & meetings, synced with all your devices." : "Plánujte si práci a schůzky – synchronizováno napříč všemi vašimi zařízeními.",
"Keep your colleagues and friends in one place without leaking their private info." : "Uchovávejte si údaje svých kolegů a přátel na jednom místě, aniž by k jejim osobním údajům získal přístup někdo jiný.",
- "Simple email app nicely integrated with Files, Contacts and Calendar." : "Jednoduchý e-mailový klient, propojený se Soubory, Kontakty a Kalendářem.",
+ "Simple email app nicely integrated with Files, Contacts and Calendar." : "Jednoduchý e-mailový klient, propojený s aplikacemi Soubory, Kontakty a Kalendář.",
"Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps." : "Chatování, videohovory, sdílení obrazovky, schůze na dálku a webové konference – ve webovém prohlížeči a mobilních aplikacích.",
- "Collaboratively edit office documents." : "Spolupracujte na upravování kancelářských dokumentů.",
+ "Collaboratively edit office documents." : "Spolupracujte na kancelářských dokumentech s ostatními souběžně je upravujícími uživateli.",
"Local document editing back-end used by the Collabora Online app." : "Podpůrná vrstva pro místní úpravu dokumentů používána aplikací Collabora Online.",
"Forgot password?" : "Zapomněli jste heslo?",
"Log in with a device" : "Přihlásit se pomocí zařízení",
@@ -361,7 +361,7 @@
"This page will refresh itself when the instance is available again." : "Tato stránka se automaticky znovu načte, jakmile bude tato instance opět dostupná.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Pokud se tato zpráva objevuje opakovaně nebo nečekaně, obraťte se správce systému.",
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Probíhá zjišťování, zda je možné aktualizovat schéma databáze (v závislosti na velikosti databáze to může zabrat delší dobu)",
- "Checked database schema update" : "Aktualizace schéma databáze byla ověřena",
+ "Checked database schema update" : "Ověřeno, že schéma databáze bylo zaktualizováno",
"Checking updates of apps" : "Kontrola aktualizace aplikací",
"Checked database schema update for apps" : "Aktualizace schéma databáze pro aplikace byla ověřena",
"Following apps have been disabled: %s" : "Následující aplikace byly vypnuty: %s",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 82950426f28..2a91646bcc2 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -122,6 +122,8 @@ OC.L10N.register(
"Please reload the page." : "Bitte die Seite neu laden.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für mehr Informationen <a href=\"{url}\">lese bitte diesen Forenbeitrag</a> zu diesem Thema.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melde dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.",
+ "Continue to {productName}" : "Fortfahren zu {productName}",
+ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["Die Aktualisierung war erfolgreich. Du wirst in %n Sekunden zu {productName} weitergeleitet.","Die Aktualisierung war erfolgreich. Du wirst in %n Sekunden zu {productName} weitergeleitet."],
"Log in" : "Anmelden",
"Logging in …" : "Melde an…",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index b062c559c55..dc077b977d0 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -120,6 +120,8 @@
"Please reload the page." : "Bitte die Seite neu laden.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für mehr Informationen <a href=\"{url}\">lese bitte diesen Forenbeitrag</a> zu diesem Thema.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melde dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.",
+ "Continue to {productName}" : "Fortfahren zu {productName}",
+ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["Die Aktualisierung war erfolgreich. Du wirst in %n Sekunden zu {productName} weitergeleitet.","Die Aktualisierung war erfolgreich. Du wirst in %n Sekunden zu {productName} weitergeleitet."],
"Log in" : "Anmelden",
"Logging in …" : "Melde an…",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
diff --git a/core/l10n/hu.js b/core/l10n/hu.js
index 47e7833383b..601e00a9346 100644
--- a/core/l10n/hu.js
+++ b/core/l10n/hu.js
@@ -29,6 +29,8 @@ OC.L10N.register(
"Nextcloud Server" : "Nextcloud kiszolgáló",
"Some of your link shares have been removed" : "Néhány megosztási hivatkozása eltávolításra került",
"Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Egy biztonsági hiba miatt el kellett távolítsunk néhány megosztási hivatkozását. További információkért lásd a lenti hivatkozást.",
+ "The user limit of this instance is reached." : "Elérte ennek a példánynak a felhasználói korlátját.",
+ "Enter your subscription key to increase the user limit. For more information about Nextcloud Enterprise see our website." : "Adja meg előfizetésének kulcsát a felhasználói korlát növeléséhez. További információ a Nextcloud Enterprise-ról a weboldalunkon található.",
"Preparing update" : "Felkészülés a frissítésre",
"[%d / %d]: %s" : "[%d / %d]: %s",
"Repair step:" : "Javítási lépés:",
@@ -55,32 +57,57 @@ OC.L10N.register(
"The following apps have been disabled: %s" : "A következő alkalmazások le lettek tiltva: %s",
"Already up to date" : "Már naprakész",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "A webkiszolgáló nincs megfelelően beállítva a fájlok szinkronizálásához, mert a WebDAV interfész hibásnak tűnik.",
+ "Your web server is not properly set up to resolve \"{url}\". Further information can be found in the {linkstart}documentation ↗{linkend}." : "Webkiszolgálója nincs megfelelően beállítva a(z) \"{url}\" feloldására. További információk a {linkstart} dokumentációban találhatók ↗ {linkend}.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's {linkstart}documentation page ↗{linkend}. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Webkiszolgálója nincs megfelelően beállítva a(z) \"{url}\" feloldására. Ez valószínűleg egy webkiszolgáló konfigurációhoz kapcsolódik, amelyet nem frissítettek, hogy ezt a mappát közvetlenül kézbesítse. Kérjük, hasonlítsa össze a konfigurációt az Apache \".htaccess\" fájljának átírt szabályaival, vagy a Nginx dokumentációjában megadottakkal a {linkstart} dokumentációs oldalon ↗ {linkend}. Az Nginx rendszeren ezek általában a \"location ~\" kezdetű sorok, amelyek frissítést igényelnek.",
+ "Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our {linkstart}documentation ↗{linkend}." : "A webszerver nincs megfelelően beállítva a .woff2 fájlok kézbesítésére. Ez általában az Nginx konfigurációval kapcsolatos probléma. A Nextcloud 15 esetében ki kell igazítani a .woff2 fájlok kézbesítését. Hasonlítsa össze az Nginx konfigurációját a {linkstart} dokumentációnkban ↗ {linkend} szereplő ajánlott konfigurációval.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Úgy tűnik a PHP nincs rendesen beállítva a rendszer környezeti változóinak lekéréséhez. A getenv(\"PATH\") teszt csak üres értéket ad vissza.",
+ "Please check the {linkstart}installation documentation ↗{linkend} for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizze a {linkstart}telepítési dokumentációban ↗{linkend} a PHP konfigurációs megjegyzéseit és a szerver PHP konfigurációt, különösen a php-fpm használatakor.",
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden módosításhoz.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázis nem „READ COMMITTED” tranzakció izolációs szinttel fut. Ez problémákat okozhat több egyidejű esemény végrehajtásakor.",
"The PHP module \"fileinfo\" is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "A „fileinfo” PHP modul hiányzik. Erősen javasolt a modul engedélyezése a MIME-típusok lehető legjobb felismeréséhez.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable \"filelocking.enabled\" in config.php to avoid these problems. See the {linkstart}documentation ↗{linkend} for more information." : "A tranzakciós fájlok zárolása le van tiltva, ez problémákhoz vezethet a versenykörülmények között. A problémák elkerülése érdekében engedélyezze a „filelocking.enabled” beállítást a config.php fájlban. További információkért lásd a {linkstart}dokumentációt ↗{linkend}.",
"If your installation is not installed at the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (suggestion: \"{suggestedOverwriteCliURL}\")" : "Ha a telepítés nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek előállításával. Ezek elkerülése érdekében állítsa be a config.php fájlban az „overwrite.cli.url” paramétert a telepítés által használt webútvonalra (javaslat: „{suggestedOverwriteCliURL}”)",
+ "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective {linkstart}ISO 3166-1 code ↗{linkend} of the region to your config file." : "A telepítéshez nincs megadva alapértelmezett telefonrégió. Erre a telefonszámok országkód nélküli hitelesítéséhez van szükség a profilbeállításokban. Ha országkód nélküli számokat szeretne engedélyezni, vegye fel a konfigurációs fájlba az \"default_phone_region\" szót a régió megfelelő {linkstart}ISO 3166-1 kódjával ↗{linkend}.",
"It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Az ütemezett feladatot nem lehetett parancssorból futtatni. A következő műszaki hiba lépett fel:",
+ "Last background job execution ran {relativeTime}. Something seems wrong. {linkstart}Check the background job settings ↗{linkend}." : "Az utolsó háttérfeladat végrehajtás {relatívTime} óta fut. Valami rossznak tűnik. {linkstart} Ellenőrizze a háttérfeladat beállításokat ↗{linkend}.",
"This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. Establish a connection from this server to the Internet to enjoy all features." : "Ennek a kiszolgálónak nincs működő internetkapcsolata: több végpont nem érhető el. Ez azt jelenti, hogy néhány funkció, mint például a külső tárolók csatolása, a frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. Lehet, hogy a fájlok távoli elérése és az e-mail értesítések sem működnek. Létesítsen internetkapcsolatot a kiszolgálón, ha minden funkciót használni szeretne.",
+ "No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Nincs beállítva memória gyorsítótár. A teljesítmény növelése érdekében állítson be egy memcache-t, ha van ilyen. További információk a {linkstart}dokumentációban találhatók ↗{linkend}.",
+ "No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the {linkstart}documentation ↗{linkend}." : "A PHP nem talált megfelelő forrást a véletlenszerűségre, amelyet biztonsági okokból erősen ellenjavalt. További információk a {linkstart} dokumentációban találhatók ↗ {linkend}.",
+ "You are currently running PHP {version}. Upgrade your PHP version to take advantage of {linkstart}performance and security updates provided by the PHP Group ↗{linkend} as soon as your distribution supports it." : "Ön jelenleg a(z) PHP {version} szoftvert futtatja. Amint terjesztése támogatja, frissítse a PHP verzióját, hogy kihasználhassa a {linkstart} teljesítmény- és biztonsági frissítéseket, amelyeket a PHP Group nyújt ↗{linkend}.",
"Nextcloud 20 is the last release supporting PHP 7.2. Nextcloud 21 requires at least PHP 7.3." : "A Nextcloud 20 az utolsó olyan kiadás, amely támogatja a PHP 7.2-es verziót. A Nextcloud 21 legalább PHP 7.3-at igényel.",
+ "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the {linkstart}documentation ↗{linkend}." : "A fordított proxy fejléc konfigurációja helytelen, vagy egy megbízható proxyból érhető el a Nextcloud. Ha nem, akkor ez biztonsági probléma, és lehetővé teheti a támadók számára, hogy a Nextcloud számára látható IP-címüket meghamisítsák. További információk a {linkstart} dokumentációban találhatók ↗{linkend}.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the {linkstart}memcached wiki about both modules ↗{linkend}." : "A Memcached elosztott gyorsítótárként van konfigurálva, de rossz PHP modul \"memcache\" van telepítve. \\ OC \\ Memcache \\ Memcached csak a \"memcached\"-et támogatja, a \"memcache\"-t nem. Lásd a {linkstart}memcached wiki-t mindkét modulról ↗{linkend}.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the {linkstart1}documentation ↗{linkend}. ({linkstart2}List of invalid files…{linkend} / {linkstart3}Rescan…{linkend})" : "Néhány fájl elbukott az integritás ellenőrzésen. További információk a probléma megoldásáról a {linkstart1}dokumentációban találhatók ↗{linkend}. ({linkstart2}Érvénytelen fájlok listája ...{linkend} / {linkstart3}Újrakeresés ...{linkend})",
+ "The PHP OPcache module is not loaded. {linkstart}For better performance it is recommended ↗{linkend} to load it into your PHP installation." : "A PHP OPcache modul nincs betöltve. {linkstart}A jobb teljesítmény érdekében javasoljuk, hogy ↗{link} töltse be a PHP telepítésébe.",
+ "The PHP OPcache module is not properly configured. {linkstart}For better performance it is recommended ↗{linkend} to use the following settings in the <code>php.ini</code>:" : "A PHP OPcache modul nincs megfelelően konfigurálva. {linkstart}A jobb teljesítmény érdekében ↗{linkend} ajánlott a következő beállításokat használni a <code>php.ini</code> fájlban:",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "A „set_time_limit” PHP függvény nem érhető el. Emiatt egy szkript megszakadhat futás közben, a telepítés hibáját okozva. A függvény engedélyezése erősen javallott.",
"Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "A PHP-ból hiányzik a FreeType-támogatás. Ez a beállítási felület és a profilképek hibás megjelenítését okozhatja.",
"Missing index \"{indexName}\" in table \"{tableName}\"." : "A(z) „{indexName}” index hiányzik a(z) „{tableName}” táblában.",
"The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically. By running \"occ db:add-missing-indices\" those missing indexes could be added manually while the instance keeps running. Once the indexes are added queries to those tables are usually much faster." : "Az adatbázisból hiányzik néhány index. Mivel az indexek hozzáadása nagy táblák esetén sokáig tarthat, ezért nem lettek automatikusan létrehozva. Futtassa az „occ db:add-missing-indices” parancsot, hogy kézzel létrehozza a hiányzó indexeket, miközben a példány továbbra is fut. Amint az indexek létre lettek hozva, a lekérdezések gyorsabban fognak futni azokon a táblákon.",
+ "Missing primary key on table \"{tableName}\"." : "Hiányzik az elsődleges kulcs a(z) \"{tableName}\" táblában.",
"The database is missing some primary keys. Due to the fact that adding primary keys on big tables could take some time they were not added automatically. By running \"occ db:add-missing-primary-keys\" those missing primary keys could be added manually while the instance keeps running." : "Az adatbázisból hiányzik néhány elsődleges kulcs. Mivel az elsődleges kulcsok hozzáadása nagy táblák esetén sokáig tarthat, ezért nem lettek automatikusan létrehozva. Futtassa az „occ db:add-missing-primary-keys” parancsot, hogy kézzel létrehozza a hiányzó elsődleges kulcsokat, miközben a példány továbbra is fut.",
"Missing optional column \"{columnName}\" in table \"{tableName}\"." : "A nem kötelező oszlop „{columnName}” hiányzik a „{tableName}” táblában.",
"The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "Az adatbázisból hiányzik néhány nem kötelező oszlop. Mivel az oszlopok hozzáadása sokáig tart a nagy tábláknál, ezért a nem kötelező oszlopok nem lettek automatikusan hozzáadva. A hiányzó oszlopokat az „occ db:add-missing-columns” paranccsal lehet kézileg hozzáadni a példány futása közben. Az oszlopok hozzáadása után bizonyos funkciók válaszideje és használhatósága javulni fog.",
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Ennél a példánynál hiányzik néhány javasolt PHP modul. A jobb teljesítmény és nagyobb kompatibilitás miatt ezek telepítése erősen javallott.",
+ "Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "A php-imagick modul ebben az esetben nem rendelkezik SVG támogatással. A jobb kompatibilitás érdekében ajánlott telepíteni.",
+ "Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running 'occ db:convert-filecache-bigint' those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "Az adatbázis egyes oszlopaiból hiányzik a konverzió big int-re. MIvel a nagy táblák oszloptípusainak megváltoztatása eltarthat egy ideig, azokat nem változtattuk meg automatikusan. Az 'occ db: convert-filecache-bigint' futtatásával ezeket a függőben lévő módosításokat manuálisan lehet alkalmazni. Ezt a műveletet offline állapotban kell végrehajtani. További részletekért olvassa el a {linkstart}erről a dokumentációról szóló oldalt ↗{linkend}.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Jelenleg SQLite van háttéradatbázisként használva. Nagyobb telepítésekhez javasoljuk, hogy váltson más háttéradatbázisra. ",
"This is particularly recommended when using the desktop client for file synchronisation." : "Ezt különösen akkor javasoljuk, ha asztali klienst használ fájlszinkronizálásához.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the {linkstart}documentation ↗{linkend}." : "Más adatbázisba történő áttéréshez használja az 'occ db: convert-type' parancssori eszközt, vagy tekintse meg a {linkstart}dokumentációt ↗{linkend}.",
"The PHP memory limit is below the recommended value of 512MB." : "A PHP memóriakorlátja az ajánlott 512 MB alatt van.",
"Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Néhány alkalmazáskönyvtár tulajdonosa különbözik a webkiszolgálóétól. Ez akkor fordul elő, ha az alkalmazás kézileg lett telepítve. Ellenőrizze az alábbi alkalmazáskönyvtárak jogosultságát:",
+ "MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL. For further details read {linkstart}the documentation page about this ↗{linkend}." : "A MySQL-t adatbázisként használják, de nem támogatja a 4 bájtos karaktereket. Többek között ahhoz, hogy a 4 bájtos karaktereket (például hangulatjeleket) kezelni tudjuk fájlnevekben vagy megjegyzésekben, ajánlott engedélyezni a 4 bájtos támogatást a MySQL-ben. További részletekért olvassa el a {linkstart}erről a dokumentációról szóló oldalt ↗{linkend}.",
"This instance uses an S3 based object store as primary storage. The uploaded files are stored temporarily on the server and thus it is recommended to have 50 GB of free space available in the temp directory of PHP. Check the logs for full details about the path and the available space. To improve this please change the temporary directory in the php.ini or make more space available in that path." : "Ez a példány S3-alapú objektumtárat használ elsődleges tárolóként. A feltöltött fájlok ideiglenesen a kiszolgálón tároltak, így ajánlott hogy legalább 50GB szabad tárhely legyen a PHP ideiglenes könyvtárában. Ellenőrizze a naplókat az útvonal pontos részletei és az elérhető hely miatt. Hogy ezen javítson, módosítsa az ideiglenes könyvtárat a php.ini-ben, vagy szabadítson fel helyet azon az útvonalon.",
+ "You are accessing your instance over a secure connection, however your instance is generating insecure URLs. This most likely means that you are behind a reverse proxy and the overwrite config variables are not set correctly. Please read {linkstart}the documentation page about this ↗{linkend}." : "Biztonságos kapcsolaton keresztül éri el a példányát, azonban a példánya nem biztonságos URL-eket hoz létre. Ez nagy valószínűséggel azt jelenti, hogy egy fordított proxy mögött áll, és a konfigurációs változók felülírása nincs megfelelően beállítva. Kérjük, olvassa el a {linkstart}erről a dokumentációról szóló oldalt link{linkend}.",
"Error occurred while checking server setup" : "Hiba történt a kiszolgálóbeállítások ellenőrzésekor",
+ "For more details see the {linkstart}documentation ↗{linkend}." : "További részletekért lásd a {linkstart}dokumentációt↗{linkend}.",
"Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Az adatkönyvtárai és a fájljai valószínűleg elérhetőek az internetről. A .htaccess fájl nem működik. Erősen javasolt, hogy a webkiszolgálót úgy állítsa be, hogy az adatkönyvtár tartalma ne legyen közvetlenül elérhető, vagy helyezze át a könyvtárat a kiszolgálási területen kívülre.",
"The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "A(z) „{header}” HTTP-fejléc nem erre van állítva: „{expected}”. Ez egy lehetséges biztonsági és adatvédelmi kockázat, ezért javasolt, hogy módosítsa megfelelően a beállítást.",
"The \"{header}\" HTTP header is not set to \"{expected}\". Some features might not work correctly, as it is recommended to adjust this setting accordingly." : "A(z) „{header}” HTTP-fejléc nem erre van állítva: „{expected}”. Egyes szolgáltatások esetleg nem fognak megfelelően működni, ezért javasolt, hogy módosítsa megfelelően a beállítást.",
"The \"{header}\" HTTP header doesn't contain \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "A(z) „{header}” HTTP-fejléc nem tartalmazza ezt: „{expected}”. Ez egy lehetséges biztonsági és adatvédelmi kockázat, ezért javasolt, hogy módosítsa megfelelően a beállítást.",
+ "The \"{header}\" HTTP header is not set to \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" or \"{val5}\". This can leak referer information. See the {linkstart}W3C Recommendation ↗{linkend}." : "A \"{header}\" HTTP fejléc nincs beállítva \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" vagy \"{val5}\" értékre. Ez kiszivárogtathatja a hivatkozói információkat. Lásd a {linkstart}W3C ajánlást ↗{linkend}.",
+ "The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the {linkstart}security tips ↗{linkend}." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva legalább \"{seconds}\" másodpercre. A fokozott biztonság érdekében ajánlott engedélyezni a HSTS-t a {linkstart}biztonsági tippek ↗{linkend} leírása szerint.",
+ "Accessing site insecurely via HTTP. You are strongly advised to set up your server to require HTTPS instead, as described in the {linkstart}security tips ↗{linkend}." : "A webhely elérése nem biztonságos HTTP-n keresztül. Javasoljuk, hogy állítsa be szerverét úgy, hogy ehelyett HTTPS-t igényeljen, amint azt a {linkstart}biztonsági tippek ↗{linkend} leírják.",
"unknown text" : "ismeretlen szöveg",
"Hello world!" : "Helló világ!",
"sunny" : "napos",
@@ -95,6 +122,8 @@ OC.L10N.register(
"Please reload the page." : "Frissítse az oldalt.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A frissítés sikertelen. Bővebb információért <a href=\"{url}\">keresse fel a problémáról szóló fórumbejegyzésünket</a>.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "A frissítés sikertelen. Jelezze a problémát a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud közösségnek</a>.",
+ "Continue to {productName}" : "Tovább erre: {productName}",
+ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["A frissítés sikeres volt. %n másodperc múlva átirányítjuk a(z) {productName} címre.","A frissítés sikeres volt. %n másodperc múlva átirányítjuk a(z) {productName} címre."],
"Log in" : "Bejelentkezés",
"Logging in …" : "Bejelentkezés…",
"Server side authentication failed!" : "A kiszolgálóoldali hitelesítés sikertelen.",
@@ -136,7 +165,16 @@ OC.L10N.register(
"Forgot password?" : "Elfelejtett jelszó?",
"Log in with a device" : "Bejelentkezés eszközzel",
"Back" : "Vissza",
+ "Login form is disabled." : "A bejelentkezési űrlap letiltva.",
"Reset search" : "Keresés visszaállítása",
+ "Search for {name} only" : "Csak a(z) {name} kifejezésre keres",
+ "No results for {query}" : "Nincs találat a következőre: {query}",
+ "Start typing to search" : "Kezdjen el gépelni a kereséshez",
+ "Loading more results …" : "További eredmények betöltése ...",
+ "Load more results" : "További eredmények betöltése",
+ "An error occurred while searching for {type}" : "Hiba történt a(z) {type} keresése közben",
+ "_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["A kereséshez írjon be a legalább {minSearchLength} karaktert","A kereséshez írjon be a legalább {minSearchLength} karaktert"],
+ "Search {types} …" : "{types} keresése …",
"Settings" : "Beállítások",
"Could not load your contacts" : "Nem lehet betölteni a névjegyeit",
"Search contacts …" : "Névjegyek keresése…",
@@ -220,7 +258,10 @@ OC.L10N.register(
"File not found" : "Fájl nem található",
"The document could not be found on the server. Maybe the share was deleted or has expired?" : "A dokumentum nem található a szerveren. Valószínűleg a megosztás törölve lett vagy lejárt.",
"Back to %s" : "Vissza ide %s",
+ "Too many requests" : "Túl sok kérés",
+ "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Túl sok kérés érkezett a hálózatától. Próbálja újra később, vagy ha ez egy hiba, akkor forduljon a rendszergazdához.",
"Error" : "Hiba",
+ "Previous" : "Előző",
"Internal Server Error" : "Belső kiszolgálóhiba",
"The server was unable to complete your request." : "A szerver nem tudta végrehajtani a kérésed.",
"If this happens again, please send the technical details below to the server administrator." : "Ha ez még egyszer előfordul küldd el az alábbi technikai részleteket a rendszergazdának.",
@@ -277,6 +318,7 @@ OC.L10N.register(
"Confirm your password" : "Erősítse meg a jelszavát:",
"Connect to your account" : "Kapcsolódás a fiókjához",
"Please log in before granting %1$s access to your %2$s account." : "Lépjen be mielőtthozzáférést biztosít a(z) %1$s kliensnek a(z) %2$s fiókjához.",
+ "If you are not trying to set up a new device or app, someone is trying to trick you into granting them access to your data. In this case do not proceed and instead contact your system administrator." : "Ha nem új eszközt vagy alkalmazást próbál beállítani, akkor valaki megpróbálja becsapni, hogy hozzáférést biztosítson számára az adatokhoz. Ebben az esetben ne folytassa, hanem lépjen kapcsolatba a rendszergazdával.",
"App token" : "Alkalmazástoken",
"Grant access" : "Hozzáférés megadása",
"Alternative log in using app token" : "Alternatív bejelentkezés alkalmazástoken segítségével",
@@ -355,6 +397,7 @@ OC.L10N.register(
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} találat egy másik mappában","{count} találat más mappákban"],
"Nextcloud {app}" : "Nextcloud {app}",
"Search" : "Keresés",
- "These apps will be updated:" : "A következő alkalmazások lesznek frissítve:"
+ "These apps will be updated:" : "A következő alkalmazások lesznek frissítve:",
+ "For more details see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "További részletekért lásd a <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\"> dokumentációt </a>."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/hu.json b/core/l10n/hu.json
index ce6d4cfb577..a2c8ce3f006 100644
--- a/core/l10n/hu.json
+++ b/core/l10n/hu.json
@@ -27,6 +27,8 @@
"Nextcloud Server" : "Nextcloud kiszolgáló",
"Some of your link shares have been removed" : "Néhány megosztási hivatkozása eltávolításra került",
"Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Egy biztonsági hiba miatt el kellett távolítsunk néhány megosztási hivatkozását. További információkért lásd a lenti hivatkozást.",
+ "The user limit of this instance is reached." : "Elérte ennek a példánynak a felhasználói korlátját.",
+ "Enter your subscription key to increase the user limit. For more information about Nextcloud Enterprise see our website." : "Adja meg előfizetésének kulcsát a felhasználói korlát növeléséhez. További információ a Nextcloud Enterprise-ról a weboldalunkon található.",
"Preparing update" : "Felkészülés a frissítésre",
"[%d / %d]: %s" : "[%d / %d]: %s",
"Repair step:" : "Javítási lépés:",
@@ -53,32 +55,57 @@
"The following apps have been disabled: %s" : "A következő alkalmazások le lettek tiltva: %s",
"Already up to date" : "Már naprakész",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "A webkiszolgáló nincs megfelelően beállítva a fájlok szinkronizálásához, mert a WebDAV interfész hibásnak tűnik.",
+ "Your web server is not properly set up to resolve \"{url}\". Further information can be found in the {linkstart}documentation ↗{linkend}." : "Webkiszolgálója nincs megfelelően beállítva a(z) \"{url}\" feloldására. További információk a {linkstart} dokumentációban találhatók ↗ {linkend}.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's {linkstart}documentation page ↗{linkend}. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Webkiszolgálója nincs megfelelően beállítva a(z) \"{url}\" feloldására. Ez valószínűleg egy webkiszolgáló konfigurációhoz kapcsolódik, amelyet nem frissítettek, hogy ezt a mappát közvetlenül kézbesítse. Kérjük, hasonlítsa össze a konfigurációt az Apache \".htaccess\" fájljának átírt szabályaival, vagy a Nginx dokumentációjában megadottakkal a {linkstart} dokumentációs oldalon ↗ {linkend}. Az Nginx rendszeren ezek általában a \"location ~\" kezdetű sorok, amelyek frissítést igényelnek.",
+ "Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our {linkstart}documentation ↗{linkend}." : "A webszerver nincs megfelelően beállítva a .woff2 fájlok kézbesítésére. Ez általában az Nginx konfigurációval kapcsolatos probléma. A Nextcloud 15 esetében ki kell igazítani a .woff2 fájlok kézbesítését. Hasonlítsa össze az Nginx konfigurációját a {linkstart} dokumentációnkban ↗ {linkend} szereplő ajánlott konfigurációval.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Úgy tűnik a PHP nincs rendesen beállítva a rendszer környezeti változóinak lekéréséhez. A getenv(\"PATH\") teszt csak üres értéket ad vissza.",
+ "Please check the {linkstart}installation documentation ↗{linkend} for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizze a {linkstart}telepítési dokumentációban ↗{linkend} a PHP konfigurációs megjegyzéseit és a szerver PHP konfigurációt, különösen a php-fpm használatakor.",
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden módosításhoz.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázis nem „READ COMMITTED” tranzakció izolációs szinttel fut. Ez problémákat okozhat több egyidejű esemény végrehajtásakor.",
"The PHP module \"fileinfo\" is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "A „fileinfo” PHP modul hiányzik. Erősen javasolt a modul engedélyezése a MIME-típusok lehető legjobb felismeréséhez.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable \"filelocking.enabled\" in config.php to avoid these problems. See the {linkstart}documentation ↗{linkend} for more information." : "A tranzakciós fájlok zárolása le van tiltva, ez problémákhoz vezethet a versenykörülmények között. A problémák elkerülése érdekében engedélyezze a „filelocking.enabled” beállítást a config.php fájlban. További információkért lásd a {linkstart}dokumentációt ↗{linkend}.",
"If your installation is not installed at the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (suggestion: \"{suggestedOverwriteCliURL}\")" : "Ha a telepítés nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek előállításával. Ezek elkerülése érdekében állítsa be a config.php fájlban az „overwrite.cli.url” paramétert a telepítés által használt webútvonalra (javaslat: „{suggestedOverwriteCliURL}”)",
+ "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective {linkstart}ISO 3166-1 code ↗{linkend} of the region to your config file." : "A telepítéshez nincs megadva alapértelmezett telefonrégió. Erre a telefonszámok országkód nélküli hitelesítéséhez van szükség a profilbeállításokban. Ha országkód nélküli számokat szeretne engedélyezni, vegye fel a konfigurációs fájlba az \"default_phone_region\" szót a régió megfelelő {linkstart}ISO 3166-1 kódjával ↗{linkend}.",
"It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Az ütemezett feladatot nem lehetett parancssorból futtatni. A következő műszaki hiba lépett fel:",
+ "Last background job execution ran {relativeTime}. Something seems wrong. {linkstart}Check the background job settings ↗{linkend}." : "Az utolsó háttérfeladat végrehajtás {relatívTime} óta fut. Valami rossznak tűnik. {linkstart} Ellenőrizze a háttérfeladat beállításokat ↗{linkend}.",
"This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. Establish a connection from this server to the Internet to enjoy all features." : "Ennek a kiszolgálónak nincs működő internetkapcsolata: több végpont nem érhető el. Ez azt jelenti, hogy néhány funkció, mint például a külső tárolók csatolása, a frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. Lehet, hogy a fájlok távoli elérése és az e-mail értesítések sem működnek. Létesítsen internetkapcsolatot a kiszolgálón, ha minden funkciót használni szeretne.",
+ "No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Nincs beállítva memória gyorsítótár. A teljesítmény növelése érdekében állítson be egy memcache-t, ha van ilyen. További információk a {linkstart}dokumentációban találhatók ↗{linkend}.",
+ "No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the {linkstart}documentation ↗{linkend}." : "A PHP nem talált megfelelő forrást a véletlenszerűségre, amelyet biztonsági okokból erősen ellenjavalt. További információk a {linkstart} dokumentációban találhatók ↗ {linkend}.",
+ "You are currently running PHP {version}. Upgrade your PHP version to take advantage of {linkstart}performance and security updates provided by the PHP Group ↗{linkend} as soon as your distribution supports it." : "Ön jelenleg a(z) PHP {version} szoftvert futtatja. Amint terjesztése támogatja, frissítse a PHP verzióját, hogy kihasználhassa a {linkstart} teljesítmény- és biztonsági frissítéseket, amelyeket a PHP Group nyújt ↗{linkend}.",
"Nextcloud 20 is the last release supporting PHP 7.2. Nextcloud 21 requires at least PHP 7.3." : "A Nextcloud 20 az utolsó olyan kiadás, amely támogatja a PHP 7.2-es verziót. A Nextcloud 21 legalább PHP 7.3-at igényel.",
+ "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the {linkstart}documentation ↗{linkend}." : "A fordított proxy fejléc konfigurációja helytelen, vagy egy megbízható proxyból érhető el a Nextcloud. Ha nem, akkor ez biztonsági probléma, és lehetővé teheti a támadók számára, hogy a Nextcloud számára látható IP-címüket meghamisítsák. További információk a {linkstart} dokumentációban találhatók ↗{linkend}.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the {linkstart}memcached wiki about both modules ↗{linkend}." : "A Memcached elosztott gyorsítótárként van konfigurálva, de rossz PHP modul \"memcache\" van telepítve. \\ OC \\ Memcache \\ Memcached csak a \"memcached\"-et támogatja, a \"memcache\"-t nem. Lásd a {linkstart}memcached wiki-t mindkét modulról ↗{linkend}.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the {linkstart1}documentation ↗{linkend}. ({linkstart2}List of invalid files…{linkend} / {linkstart3}Rescan…{linkend})" : "Néhány fájl elbukott az integritás ellenőrzésen. További információk a probléma megoldásáról a {linkstart1}dokumentációban találhatók ↗{linkend}. ({linkstart2}Érvénytelen fájlok listája ...{linkend} / {linkstart3}Újrakeresés ...{linkend})",
+ "The PHP OPcache module is not loaded. {linkstart}For better performance it is recommended ↗{linkend} to load it into your PHP installation." : "A PHP OPcache modul nincs betöltve. {linkstart}A jobb teljesítmény érdekében javasoljuk, hogy ↗{link} töltse be a PHP telepítésébe.",
+ "The PHP OPcache module is not properly configured. {linkstart}For better performance it is recommended ↗{linkend} to use the following settings in the <code>php.ini</code>:" : "A PHP OPcache modul nincs megfelelően konfigurálva. {linkstart}A jobb teljesítmény érdekében ↗{linkend} ajánlott a következő beállításokat használni a <code>php.ini</code> fájlban:",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "A „set_time_limit” PHP függvény nem érhető el. Emiatt egy szkript megszakadhat futás közben, a telepítés hibáját okozva. A függvény engedélyezése erősen javallott.",
"Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "A PHP-ból hiányzik a FreeType-támogatás. Ez a beállítási felület és a profilképek hibás megjelenítését okozhatja.",
"Missing index \"{indexName}\" in table \"{tableName}\"." : "A(z) „{indexName}” index hiányzik a(z) „{tableName}” táblában.",
"The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically. By running \"occ db:add-missing-indices\" those missing indexes could be added manually while the instance keeps running. Once the indexes are added queries to those tables are usually much faster." : "Az adatbázisból hiányzik néhány index. Mivel az indexek hozzáadása nagy táblák esetén sokáig tarthat, ezért nem lettek automatikusan létrehozva. Futtassa az „occ db:add-missing-indices” parancsot, hogy kézzel létrehozza a hiányzó indexeket, miközben a példány továbbra is fut. Amint az indexek létre lettek hozva, a lekérdezések gyorsabban fognak futni azokon a táblákon.",
+ "Missing primary key on table \"{tableName}\"." : "Hiányzik az elsődleges kulcs a(z) \"{tableName}\" táblában.",
"The database is missing some primary keys. Due to the fact that adding primary keys on big tables could take some time they were not added automatically. By running \"occ db:add-missing-primary-keys\" those missing primary keys could be added manually while the instance keeps running." : "Az adatbázisból hiányzik néhány elsődleges kulcs. Mivel az elsődleges kulcsok hozzáadása nagy táblák esetén sokáig tarthat, ezért nem lettek automatikusan létrehozva. Futtassa az „occ db:add-missing-primary-keys” parancsot, hogy kézzel létrehozza a hiányzó elsődleges kulcsokat, miközben a példány továbbra is fut.",
"Missing optional column \"{columnName}\" in table \"{tableName}\"." : "A nem kötelező oszlop „{columnName}” hiányzik a „{tableName}” táblában.",
"The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "Az adatbázisból hiányzik néhány nem kötelező oszlop. Mivel az oszlopok hozzáadása sokáig tart a nagy tábláknál, ezért a nem kötelező oszlopok nem lettek automatikusan hozzáadva. A hiányzó oszlopokat az „occ db:add-missing-columns” paranccsal lehet kézileg hozzáadni a példány futása közben. Az oszlopok hozzáadása után bizonyos funkciók válaszideje és használhatósága javulni fog.",
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Ennél a példánynál hiányzik néhány javasolt PHP modul. A jobb teljesítmény és nagyobb kompatibilitás miatt ezek telepítése erősen javallott.",
+ "Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "A php-imagick modul ebben az esetben nem rendelkezik SVG támogatással. A jobb kompatibilitás érdekében ajánlott telepíteni.",
+ "Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running 'occ db:convert-filecache-bigint' those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "Az adatbázis egyes oszlopaiból hiányzik a konverzió big int-re. MIvel a nagy táblák oszloptípusainak megváltoztatása eltarthat egy ideig, azokat nem változtattuk meg automatikusan. Az 'occ db: convert-filecache-bigint' futtatásával ezeket a függőben lévő módosításokat manuálisan lehet alkalmazni. Ezt a műveletet offline állapotban kell végrehajtani. További részletekért olvassa el a {linkstart}erről a dokumentációról szóló oldalt ↗{linkend}.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Jelenleg SQLite van háttéradatbázisként használva. Nagyobb telepítésekhez javasoljuk, hogy váltson más háttéradatbázisra. ",
"This is particularly recommended when using the desktop client for file synchronisation." : "Ezt különösen akkor javasoljuk, ha asztali klienst használ fájlszinkronizálásához.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the {linkstart}documentation ↗{linkend}." : "Más adatbázisba történő áttéréshez használja az 'occ db: convert-type' parancssori eszközt, vagy tekintse meg a {linkstart}dokumentációt ↗{linkend}.",
"The PHP memory limit is below the recommended value of 512MB." : "A PHP memóriakorlátja az ajánlott 512 MB alatt van.",
"Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Néhány alkalmazáskönyvtár tulajdonosa különbözik a webkiszolgálóétól. Ez akkor fordul elő, ha az alkalmazás kézileg lett telepítve. Ellenőrizze az alábbi alkalmazáskönyvtárak jogosultságát:",
+ "MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL. For further details read {linkstart}the documentation page about this ↗{linkend}." : "A MySQL-t adatbázisként használják, de nem támogatja a 4 bájtos karaktereket. Többek között ahhoz, hogy a 4 bájtos karaktereket (például hangulatjeleket) kezelni tudjuk fájlnevekben vagy megjegyzésekben, ajánlott engedélyezni a 4 bájtos támogatást a MySQL-ben. További részletekért olvassa el a {linkstart}erről a dokumentációról szóló oldalt ↗{linkend}.",
"This instance uses an S3 based object store as primary storage. The uploaded files are stored temporarily on the server and thus it is recommended to have 50 GB of free space available in the temp directory of PHP. Check the logs for full details about the path and the available space. To improve this please change the temporary directory in the php.ini or make more space available in that path." : "Ez a példány S3-alapú objektumtárat használ elsődleges tárolóként. A feltöltött fájlok ideiglenesen a kiszolgálón tároltak, így ajánlott hogy legalább 50GB szabad tárhely legyen a PHP ideiglenes könyvtárában. Ellenőrizze a naplókat az útvonal pontos részletei és az elérhető hely miatt. Hogy ezen javítson, módosítsa az ideiglenes könyvtárat a php.ini-ben, vagy szabadítson fel helyet azon az útvonalon.",
+ "You are accessing your instance over a secure connection, however your instance is generating insecure URLs. This most likely means that you are behind a reverse proxy and the overwrite config variables are not set correctly. Please read {linkstart}the documentation page about this ↗{linkend}." : "Biztonságos kapcsolaton keresztül éri el a példányát, azonban a példánya nem biztonságos URL-eket hoz létre. Ez nagy valószínűséggel azt jelenti, hogy egy fordított proxy mögött áll, és a konfigurációs változók felülírása nincs megfelelően beállítva. Kérjük, olvassa el a {linkstart}erről a dokumentációról szóló oldalt link{linkend}.",
"Error occurred while checking server setup" : "Hiba történt a kiszolgálóbeállítások ellenőrzésekor",
+ "For more details see the {linkstart}documentation ↗{linkend}." : "További részletekért lásd a {linkstart}dokumentációt↗{linkend}.",
"Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Az adatkönyvtárai és a fájljai valószínűleg elérhetőek az internetről. A .htaccess fájl nem működik. Erősen javasolt, hogy a webkiszolgálót úgy állítsa be, hogy az adatkönyvtár tartalma ne legyen közvetlenül elérhető, vagy helyezze át a könyvtárat a kiszolgálási területen kívülre.",
"The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "A(z) „{header}” HTTP-fejléc nem erre van állítva: „{expected}”. Ez egy lehetséges biztonsági és adatvédelmi kockázat, ezért javasolt, hogy módosítsa megfelelően a beállítást.",
"The \"{header}\" HTTP header is not set to \"{expected}\". Some features might not work correctly, as it is recommended to adjust this setting accordingly." : "A(z) „{header}” HTTP-fejléc nem erre van állítva: „{expected}”. Egyes szolgáltatások esetleg nem fognak megfelelően működni, ezért javasolt, hogy módosítsa megfelelően a beállítást.",
"The \"{header}\" HTTP header doesn't contain \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "A(z) „{header}” HTTP-fejléc nem tartalmazza ezt: „{expected}”. Ez egy lehetséges biztonsági és adatvédelmi kockázat, ezért javasolt, hogy módosítsa megfelelően a beállítást.",
+ "The \"{header}\" HTTP header is not set to \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" or \"{val5}\". This can leak referer information. See the {linkstart}W3C Recommendation ↗{linkend}." : "A \"{header}\" HTTP fejléc nincs beállítva \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" vagy \"{val5}\" értékre. Ez kiszivárogtathatja a hivatkozói információkat. Lásd a {linkstart}W3C ajánlást ↗{linkend}.",
+ "The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the {linkstart}security tips ↗{linkend}." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva legalább \"{seconds}\" másodpercre. A fokozott biztonság érdekében ajánlott engedélyezni a HSTS-t a {linkstart}biztonsági tippek ↗{linkend} leírása szerint.",
+ "Accessing site insecurely via HTTP. You are strongly advised to set up your server to require HTTPS instead, as described in the {linkstart}security tips ↗{linkend}." : "A webhely elérése nem biztonságos HTTP-n keresztül. Javasoljuk, hogy állítsa be szerverét úgy, hogy ehelyett HTTPS-t igényeljen, amint azt a {linkstart}biztonsági tippek ↗{linkend} leírják.",
"unknown text" : "ismeretlen szöveg",
"Hello world!" : "Helló világ!",
"sunny" : "napos",
@@ -93,6 +120,8 @@
"Please reload the page." : "Frissítse az oldalt.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A frissítés sikertelen. Bővebb információért <a href=\"{url}\">keresse fel a problémáról szóló fórumbejegyzésünket</a>.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "A frissítés sikertelen. Jelezze a problémát a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud közösségnek</a>.",
+ "Continue to {productName}" : "Tovább erre: {productName}",
+ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["A frissítés sikeres volt. %n másodperc múlva átirányítjuk a(z) {productName} címre.","A frissítés sikeres volt. %n másodperc múlva átirányítjuk a(z) {productName} címre."],
"Log in" : "Bejelentkezés",
"Logging in …" : "Bejelentkezés…",
"Server side authentication failed!" : "A kiszolgálóoldali hitelesítés sikertelen.",
@@ -134,7 +163,16 @@
"Forgot password?" : "Elfelejtett jelszó?",
"Log in with a device" : "Bejelentkezés eszközzel",
"Back" : "Vissza",
+ "Login form is disabled." : "A bejelentkezési űrlap letiltva.",
"Reset search" : "Keresés visszaállítása",
+ "Search for {name} only" : "Csak a(z) {name} kifejezésre keres",
+ "No results for {query}" : "Nincs találat a következőre: {query}",
+ "Start typing to search" : "Kezdjen el gépelni a kereséshez",
+ "Loading more results …" : "További eredmények betöltése ...",
+ "Load more results" : "További eredmények betöltése",
+ "An error occurred while searching for {type}" : "Hiba történt a(z) {type} keresése közben",
+ "_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["A kereséshez írjon be a legalább {minSearchLength} karaktert","A kereséshez írjon be a legalább {minSearchLength} karaktert"],
+ "Search {types} …" : "{types} keresése …",
"Settings" : "Beállítások",
"Could not load your contacts" : "Nem lehet betölteni a névjegyeit",
"Search contacts …" : "Névjegyek keresése…",
@@ -218,7 +256,10 @@
"File not found" : "Fájl nem található",
"The document could not be found on the server. Maybe the share was deleted or has expired?" : "A dokumentum nem található a szerveren. Valószínűleg a megosztás törölve lett vagy lejárt.",
"Back to %s" : "Vissza ide %s",
+ "Too many requests" : "Túl sok kérés",
+ "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Túl sok kérés érkezett a hálózatától. Próbálja újra később, vagy ha ez egy hiba, akkor forduljon a rendszergazdához.",
"Error" : "Hiba",
+ "Previous" : "Előző",
"Internal Server Error" : "Belső kiszolgálóhiba",
"The server was unable to complete your request." : "A szerver nem tudta végrehajtani a kérésed.",
"If this happens again, please send the technical details below to the server administrator." : "Ha ez még egyszer előfordul küldd el az alábbi technikai részleteket a rendszergazdának.",
@@ -275,6 +316,7 @@
"Confirm your password" : "Erősítse meg a jelszavát:",
"Connect to your account" : "Kapcsolódás a fiókjához",
"Please log in before granting %1$s access to your %2$s account." : "Lépjen be mielőtthozzáférést biztosít a(z) %1$s kliensnek a(z) %2$s fiókjához.",
+ "If you are not trying to set up a new device or app, someone is trying to trick you into granting them access to your data. In this case do not proceed and instead contact your system administrator." : "Ha nem új eszközt vagy alkalmazást próbál beállítani, akkor valaki megpróbálja becsapni, hogy hozzáférést biztosítson számára az adatokhoz. Ebben az esetben ne folytassa, hanem lépjen kapcsolatba a rendszergazdával.",
"App token" : "Alkalmazástoken",
"Grant access" : "Hozzáférés megadása",
"Alternative log in using app token" : "Alternatív bejelentkezés alkalmazástoken segítségével",
@@ -353,6 +395,7 @@
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} találat egy másik mappában","{count} találat más mappákban"],
"Nextcloud {app}" : "Nextcloud {app}",
"Search" : "Keresés",
- "These apps will be updated:" : "A következő alkalmazások lesznek frissítve:"
+ "These apps will be updated:" : "A következő alkalmazások lesznek frissítve:",
+ "For more details see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "További részletekért lásd a <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\"> dokumentációt </a>."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index c15b73eb344..54ca37a8cad 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -396,7 +396,7 @@ OC.L10N.register(
"No search results in other folders for {tag}{filter}{endtag}" : "Brak wyników wyszukiwania w innych katalogach dla {tag}{filter}{endtag}",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} wynik wyszukiwania w innych katalogach","{count} wyniki wyszukiwania w innych katalogach","{count} wyników wyszukiwania w innych katalogach","{count} wyników wyszukiwania w innych katalogach"],
"Nextcloud {app}" : "Nextcloud {app}",
- "Search" : "Wyszukaj",
+ "Search" : "Szukaj",
"These apps will be updated:" : "Następujące aplikacje zostaną zaktualizowane:",
"For more details see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Więcej informacji można znaleźć w <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentacji</a>."
},
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index d26707342a9..086ffdeadbf 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -394,7 +394,7 @@
"No search results in other folders for {tag}{filter}{endtag}" : "Brak wyników wyszukiwania w innych katalogach dla {tag}{filter}{endtag}",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} wynik wyszukiwania w innych katalogach","{count} wyniki wyszukiwania w innych katalogach","{count} wyników wyszukiwania w innych katalogach","{count} wyników wyszukiwania w innych katalogach"],
"Nextcloud {app}" : "Nextcloud {app}",
- "Search" : "Wyszukaj",
+ "Search" : "Szukaj",
"These apps will be updated:" : "Następujące aplikacje zostaną zaktualizowane:",
"For more details see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Więcej informacji można znaleźć w <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentacji</a>."
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 8a25881e42d..76026e8a271 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -27,8 +27,8 @@ OC.L10N.register(
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Clique no link abaixo para redefinir sua senha. Se você não solicitou isso, ignore este e-mail.",
"Reset your password" : "Redefinir sua senha",
"Nextcloud Server" : "Servidor Nextcloud",
- "Some of your link shares have been removed" : "Alguns dos seus compartilhamentos de links foram removidos",
- "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Devido a um bug de segurança, tivemos que remover alguns dos seus compartilhamentos de links. Por favor, veja o link para mais informações.",
+ "Some of your link shares have been removed" : "Alguns dos seus compartilhamentos por link foram removidos",
+ "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Devido a um bug de segurança, tivemos que remover alguns dos seus compartilhamentos por link. Por favor, veja o link para mais informações.",
"The user limit of this instance is reached." : "O limite do usuário desta instância foi atingido.",
"Enter your subscription key to increase the user limit. For more information about Nextcloud Enterprise see our website." : "Digite sua chave de assinatura para aumentar o limite de usuários. Para obter mais informações sobre o Nextcloud Enterprise, consulte nosso website.",
"Preparing update" : "Preparando a atualização",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 980758fcee4..aae51a1a481 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -25,8 +25,8 @@
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Clique no link abaixo para redefinir sua senha. Se você não solicitou isso, ignore este e-mail.",
"Reset your password" : "Redefinir sua senha",
"Nextcloud Server" : "Servidor Nextcloud",
- "Some of your link shares have been removed" : "Alguns dos seus compartilhamentos de links foram removidos",
- "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Devido a um bug de segurança, tivemos que remover alguns dos seus compartilhamentos de links. Por favor, veja o link para mais informações.",
+ "Some of your link shares have been removed" : "Alguns dos seus compartilhamentos por link foram removidos",
+ "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Devido a um bug de segurança, tivemos que remover alguns dos seus compartilhamentos por link. Por favor, veja o link para mais informações.",
"The user limit of this instance is reached." : "O limite do usuário desta instância foi atingido.",
"Enter your subscription key to increase the user limit. For more information about Nextcloud Enterprise see our website." : "Digite sua chave de assinatura para aumentar o limite de usuários. Para obter mais informações sobre o Nextcloud Enterprise, consulte nosso website.",
"Preparing update" : "Preparando a atualização",
diff --git a/core/l10n/sl.js b/core/l10n/sl.js
index 949c60b6842..575b1047e3a 100644
--- a/core/l10n/sl.js
+++ b/core/l10n/sl.js
@@ -120,6 +120,8 @@ OC.L10N.register(
"Please reload the page." : "Stran je treba osvežiti.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Posodobitev je spodletela. Več podrobnosti o napaki je <a href=\"{url}\">objavljenih na forumu</a>.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Posodobitev je spodletela. Pošljite poročilo o napaki <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">skupnosti Nextcloud</a>.",
+ "Continue to {productName}" : "Nadaljuj v {productName}",
+ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["Posodobitev je bila uspešna. Stran bo preusmerjena na {productName} čez %n sekundo.","Posodobitev je bila uspešna. Stran bo preusmerjena na {productName} čez %n sekundi.","Posodobitev je bila uspešna. Stran bo preusmerjena na {productName} čez %n sekunde.","Posodobitev je bila uspešna. Stran bo preusmerjena na {productName} čez %n sekund."],
"Log in" : "Prijava",
"Logging in …" : "Poteka prijavljanje ...",
"Server side authentication failed!" : "Overitev na strani strežnika je spodletela!",
@@ -161,6 +163,7 @@ OC.L10N.register(
"Forgot password?" : "Ali ste pozabili geslo?",
"Log in with a device" : "Prijava z napravo",
"Back" : "Nazaj",
+ "Login form is disabled." : "Prijavni obrazec je onemogočen.",
"Reset search" : "Ponastavi iskanje",
"Search for {name} only" : "Išči le za {name}",
"No results for {query}" : "Ni zadetkov za poizvedbo {query}",
diff --git a/core/l10n/sl.json b/core/l10n/sl.json
index b90f9a8503f..01335fe8f45 100644
--- a/core/l10n/sl.json
+++ b/core/l10n/sl.json
@@ -118,6 +118,8 @@
"Please reload the page." : "Stran je treba osvežiti.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Posodobitev je spodletela. Več podrobnosti o napaki je <a href=\"{url}\">objavljenih na forumu</a>.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Posodobitev je spodletela. Pošljite poročilo o napaki <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">skupnosti Nextcloud</a>.",
+ "Continue to {productName}" : "Nadaljuj v {productName}",
+ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["Posodobitev je bila uspešna. Stran bo preusmerjena na {productName} čez %n sekundo.","Posodobitev je bila uspešna. Stran bo preusmerjena na {productName} čez %n sekundi.","Posodobitev je bila uspešna. Stran bo preusmerjena na {productName} čez %n sekunde.","Posodobitev je bila uspešna. Stran bo preusmerjena na {productName} čez %n sekund."],
"Log in" : "Prijava",
"Logging in …" : "Poteka prijavljanje ...",
"Server side authentication failed!" : "Overitev na strani strežnika je spodletela!",
@@ -159,6 +161,7 @@
"Forgot password?" : "Ali ste pozabili geslo?",
"Log in with a device" : "Prijava z napravo",
"Back" : "Nazaj",
+ "Login form is disabled." : "Prijavni obrazec je onemogočen.",
"Reset search" : "Ponastavi iskanje",
"Search for {name} only" : "Išči le za {name}",
"No results for {query}" : "Ni zadetkov za poizvedbo {query}",
diff --git a/core/l10n/vi.js b/core/l10n/vi.js
index e3959ba838e..b731ae294d9 100644
--- a/core/l10n/vi.js
+++ b/core/l10n/vi.js
@@ -25,7 +25,7 @@ OC.L10N.register(
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Nhấp vào nút sau để đặt lại mật khẩu. Nếu bạn không yêu cầu đặt lại mật khẩu, hãy bỏ qua email này.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Nhấp vào liên kết sau để đặt lại mật khẩu của bạn. Nếu bạn không yêu cầu đặt lại mật khẩu, hãy bỏ qua email này.",
"Reset your password" : "Đổi mật khẩu",
- "Nextcloud Server" : "Máy chủ Nextcloud",
+ "Nextcloud Server" : "Máy chủ vWorkspace",
"Preparing update" : "Đang chuẩn bị cập nhật",
"[%d / %d]: %s" : "[%d / %d]: %s",
"Please use the command line updater because automatic updating is disabled in the config.php." : "Xin vui lòng sử dụng câu lệnh cập nhật bằng dòng lệnh do cập nhật tự động bị vô hiệu hóa trong file config.php",
diff --git a/core/l10n/vi.json b/core/l10n/vi.json
index f5293d4f959..2e284b66d4e 100644
--- a/core/l10n/vi.json
+++ b/core/l10n/vi.json
@@ -23,7 +23,7 @@
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Nhấp vào nút sau để đặt lại mật khẩu. Nếu bạn không yêu cầu đặt lại mật khẩu, hãy bỏ qua email này.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Nhấp vào liên kết sau để đặt lại mật khẩu của bạn. Nếu bạn không yêu cầu đặt lại mật khẩu, hãy bỏ qua email này.",
"Reset your password" : "Đổi mật khẩu",
- "Nextcloud Server" : "Máy chủ Nextcloud",
+ "Nextcloud Server" : "Máy chủ vWorkspace",
"Preparing update" : "Đang chuẩn bị cập nhật",
"[%d / %d]: %s" : "[%d / %d]: %s",
"Please use the command line updater because automatic updating is disabled in the config.php." : "Xin vui lòng sử dụng câu lệnh cập nhật bằng dòng lệnh do cập nhật tự động bị vô hiệu hóa trong file config.php",
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 3c538a2a590..85620b8a44e 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -738,6 +738,7 @@ return array(
'OC\\Avatar\\Avatar' => $baseDir . '/lib/private/Avatar/Avatar.php',
'OC\\Avatar\\AvatarManager' => $baseDir . '/lib/private/Avatar/AvatarManager.php',
'OC\\Avatar\\GuestAvatar' => $baseDir . '/lib/private/Avatar/GuestAvatar.php',
+ 'OC\\Avatar\\PlaceholderAvatar' => $baseDir . '/lib/private/Avatar/PlaceholderAvatar.php',
'OC\\Avatar\\UserAvatar' => $baseDir . '/lib/private/Avatar/UserAvatar.php',
'OC\\BackgroundJob\\Job' => $baseDir . '/lib/private/BackgroundJob/Job.php',
'OC\\BackgroundJob\\JobList' => $baseDir . '/lib/private/BackgroundJob/JobList.php',
@@ -1182,6 +1183,7 @@ return array(
'OC\\L10N\\LanguageIterator' => $baseDir . '/lib/private/L10N/LanguageIterator.php',
'OC\\L10N\\LanguageNotFoundException' => $baseDir . '/lib/private/L10N/LanguageNotFoundException.php',
'OC\\L10N\\LazyL10N' => $baseDir . '/lib/private/L10N/LazyL10N.php',
+ 'OC\\LDAP\\NullLDAPProviderFactory' => $baseDir . '/lib/private/LDAP/NullLDAPProviderFactory.php',
'OC\\LargeFileHelper' => $baseDir . '/lib/private/LargeFileHelper.php',
'OC\\Lock\\AbstractLockingProvider' => $baseDir . '/lib/private/Lock/AbstractLockingProvider.php',
'OC\\Lock\\DBLockingProvider' => $baseDir . '/lib/private/Lock/DBLockingProvider.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 0b1967e91d1..726a7338a7e 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -767,6 +767,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Avatar\\Avatar' => __DIR__ . '/../../..' . '/lib/private/Avatar/Avatar.php',
'OC\\Avatar\\AvatarManager' => __DIR__ . '/../../..' . '/lib/private/Avatar/AvatarManager.php',
'OC\\Avatar\\GuestAvatar' => __DIR__ . '/../../..' . '/lib/private/Avatar/GuestAvatar.php',
+ 'OC\\Avatar\\PlaceholderAvatar' => __DIR__ . '/../../..' . '/lib/private/Avatar/PlaceholderAvatar.php',
'OC\\Avatar\\UserAvatar' => __DIR__ . '/../../..' . '/lib/private/Avatar/UserAvatar.php',
'OC\\BackgroundJob\\Job' => __DIR__ . '/../../..' . '/lib/private/BackgroundJob/Job.php',
'OC\\BackgroundJob\\JobList' => __DIR__ . '/../../..' . '/lib/private/BackgroundJob/JobList.php',
@@ -1211,6 +1212,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\L10N\\LanguageIterator' => __DIR__ . '/../../..' . '/lib/private/L10N/LanguageIterator.php',
'OC\\L10N\\LanguageNotFoundException' => __DIR__ . '/../../..' . '/lib/private/L10N/LanguageNotFoundException.php',
'OC\\L10N\\LazyL10N' => __DIR__ . '/../../..' . '/lib/private/L10N/LazyL10N.php',
+ 'OC\\LDAP\\NullLDAPProviderFactory' => __DIR__ . '/../../..' . '/lib/private/LDAP/NullLDAPProviderFactory.php',
'OC\\LargeFileHelper' => __DIR__ . '/../../..' . '/lib/private/LargeFileHelper.php',
'OC\\Lock\\AbstractLockingProvider' => __DIR__ . '/../../..' . '/lib/private/Lock/AbstractLockingProvider.php',
'OC\\Lock\\DBLockingProvider' => __DIR__ . '/../../..' . '/lib/private/Lock/DBLockingProvider.php',
diff --git a/lib/l10n/cs.js b/lib/l10n/cs.js
index f1d757a88ff..408857ab127 100644
--- a/lib/l10n/cs.js
+++ b/lib/l10n/cs.js
@@ -202,11 +202,11 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Do svého systému nainstalujte alespoň jeden z těchto jazyků a restartujte webový server.",
"PHP module %s not installed." : "PHP modul %s není nainstalován.",
"Please ask your server administrator to install the module." : "Požádejte správce serveru, který využíváte o instalaci tohoto modulu.",
- "PHP setting \"%s\" is not set to \"%s\"." : "Hodnota PHP nastavení „%s“ není nastavená na „%s“.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Hodnota v konfiguraci PHP „%s“ není nastavená na „%s“.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Úprava tohoto nastavení v php.ini umožní Nextcloud opět zprovoznit",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload je nastaven na „%s“ namísto očekávané hodnoty „0“",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Pro nápravu nastavte v souboru php.ini parametr <code>mbstring.func_overload</code> na <code>0</code>",
- "libxml2 2.7.0 is at least required. Currently %s is installed." : "Je požadována verze softwarové knihovny libxml2 minimálně 2.7.0. Nyní je nainstalována verze %s.",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Je zapotřebí verze softwarové knihovny libxml2 přinejmenším 2.7.0. Nyní je nainstalována verze %s.",
"To fix this issue update your libxml2 version and restart your web server." : "Tento problém opravíte instalací novější verze knihovny libxml2 a restartem webového serveru.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek znepřístupnění mnoha důležitých aplikací.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.",
diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json
index c92a4a4e1d6..892ee97a6c8 100644
--- a/lib/l10n/cs.json
+++ b/lib/l10n/cs.json
@@ -200,11 +200,11 @@
"Please install one of these locales on your system and restart your webserver." : "Do svého systému nainstalujte alespoň jeden z těchto jazyků a restartujte webový server.",
"PHP module %s not installed." : "PHP modul %s není nainstalován.",
"Please ask your server administrator to install the module." : "Požádejte správce serveru, který využíváte o instalaci tohoto modulu.",
- "PHP setting \"%s\" is not set to \"%s\"." : "Hodnota PHP nastavení „%s“ není nastavená na „%s“.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Hodnota v konfiguraci PHP „%s“ není nastavená na „%s“.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Úprava tohoto nastavení v php.ini umožní Nextcloud opět zprovoznit",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload je nastaven na „%s“ namísto očekávané hodnoty „0“",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Pro nápravu nastavte v souboru php.ini parametr <code>mbstring.func_overload</code> na <code>0</code>",
- "libxml2 2.7.0 is at least required. Currently %s is installed." : "Je požadována verze softwarové knihovny libxml2 minimálně 2.7.0. Nyní je nainstalována verze %s.",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Je zapotřebí verze softwarové knihovny libxml2 přinejmenším 2.7.0. Nyní je nainstalována verze %s.",
"To fix this issue update your libxml2 version and restart your web server." : "Tento problém opravíte instalací novější verze knihovny libxml2 a restartem webového serveru.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek znepřístupnění mnoha důležitých aplikací.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.",
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index d41d375d8e1..4bb2342e6c8 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -53,21 +53,21 @@ OC.L10N.register(
"today" : "Heute",
"tomorrow" : "Morgen",
"yesterday" : "Gestern",
- "_in %n day_::_in %n days_" : ["in %n Tag","in %n Tagen"],
+ "_in %n day_::_in %n days_" : ["In %n Tag","In %n Tagen"],
"_%n day ago_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
"next month" : "Nächsten Monat",
"last month" : "Letzten Monat",
- "_in %n month_::_in %n months_" : ["in %n Monat","in %n Monaten"],
+ "_in %n month_::_in %n months_" : ["In %n Monat","In %n Monaten"],
"_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
- "next year" : "nächstes Jahr",
+ "next year" : "Nächstes Jahr",
"last year" : "Letztes Jahr",
- "_in %n year_::_in %n years_" : ["in %n Jahr","in %n Jahren"],
+ "_in %n year_::_in %n years_" : ["In %n Jahr","In %n Jahren"],
"_%n year ago_::_%n years ago_" : ["Vor %n Jahr","Vor %n Jahren"],
- "_in %n hour_::_in %n hours_" : ["in %n Stunde","in %n Stunden"],
+ "_in %n hour_::_in %n hours_" : ["In %n Stunde","In %n Stunden"],
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
- "_in %n minute_::_in %n minutes_" : ["in %n Minute","in %n Minuten"],
+ "_in %n minute_::_in %n minutes_" : ["In %n Minute","In %n Minuten"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
- "in a few seconds" : "in wenigen Sekunden",
+ "in a few seconds" : "In wenigen Sekunden",
"seconds ago" : "Gerade eben",
"Empty file" : "Leere Datei",
"Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte aktivieren Sie es in Ihren Einstellungen oder kontaktieren Sie Ihren Administrator.",
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index 7193030931a..8ea41565c2c 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -51,21 +51,21 @@
"today" : "Heute",
"tomorrow" : "Morgen",
"yesterday" : "Gestern",
- "_in %n day_::_in %n days_" : ["in %n Tag","in %n Tagen"],
+ "_in %n day_::_in %n days_" : ["In %n Tag","In %n Tagen"],
"_%n day ago_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
"next month" : "Nächsten Monat",
"last month" : "Letzten Monat",
- "_in %n month_::_in %n months_" : ["in %n Monat","in %n Monaten"],
+ "_in %n month_::_in %n months_" : ["In %n Monat","In %n Monaten"],
"_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
- "next year" : "nächstes Jahr",
+ "next year" : "Nächstes Jahr",
"last year" : "Letztes Jahr",
- "_in %n year_::_in %n years_" : ["in %n Jahr","in %n Jahren"],
+ "_in %n year_::_in %n years_" : ["In %n Jahr","In %n Jahren"],
"_%n year ago_::_%n years ago_" : ["Vor %n Jahr","Vor %n Jahren"],
- "_in %n hour_::_in %n hours_" : ["in %n Stunde","in %n Stunden"],
+ "_in %n hour_::_in %n hours_" : ["In %n Stunde","In %n Stunden"],
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
- "_in %n minute_::_in %n minutes_" : ["in %n Minute","in %n Minuten"],
+ "_in %n minute_::_in %n minutes_" : ["In %n Minute","In %n Minuten"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
- "in a few seconds" : "in wenigen Sekunden",
+ "in a few seconds" : "In wenigen Sekunden",
"seconds ago" : "Gerade eben",
"Empty file" : "Leere Datei",
"Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte aktivieren Sie es in Ihren Einstellungen oder kontaktieren Sie Ihren Administrator.",
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 7eb8fef6640..fd5f5947f84 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -121,6 +121,7 @@ OC.L10N.register(
"Expiration date is in the past" : "Ha pasado la fecha de caducidad",
"Can’t set expiration date more than %s days in the future" : "No se puede establecer la fecha de expiración a más de %s días en el futuro",
"Sharing is only allowed with group members" : "Sólo está permitido compartir a los integrantes del grupo",
+ "Sharing %s failed, because this item is already shared with user %s" : "No se pudo compartir %s, porque este elemento ya está compartido con el usuario %s",
"%1$s shared »%2$s« with you" : "%1$s ha compartido «%2$s» contigo",
"%1$s shared »%2$s« with you." : "%1$s ha compartido «%2$s» contigo.",
"Click the button below to open it." : "Haz clic en el botón de abajo para abrirlo.",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index 0ad202345a5..ca88baaf650 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -119,6 +119,7 @@
"Expiration date is in the past" : "Ha pasado la fecha de caducidad",
"Can’t set expiration date more than %s days in the future" : "No se puede establecer la fecha de expiración a más de %s días en el futuro",
"Sharing is only allowed with group members" : "Sólo está permitido compartir a los integrantes del grupo",
+ "Sharing %s failed, because this item is already shared with user %s" : "No se pudo compartir %s, porque este elemento ya está compartido con el usuario %s",
"%1$s shared »%2$s« with you" : "%1$s ha compartido «%2$s» contigo",
"%1$s shared »%2$s« with you." : "%1$s ha compartido «%2$s» contigo.",
"Click the button below to open it." : "Haz clic en el botón de abajo para abrirlo.",
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index 9e8d16b502b..c4f71208ff8 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -82,7 +82,7 @@ OC.L10N.register(
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacji \"%s\" nie można zainstalować, ponieważ nie można odczytać pliku appinfo.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacji \"%s\" nie można zainstalować, ponieważ nie jest kompatybilna z tą wersją serwera.",
"__language_name__" : "Polski",
- "This is an automatically sent email, please do not reply." : "To jest automatycznie wysłany e-mail, proszę nie odpowiadać na niego.",
+ "This is an automatically sent email, please do not reply." : "To jest wiadomość e-mail wysłana automatycznie, prosimy nie odpowiadać na nią.",
"Help" : "Pomoc",
"Apps" : "Aplikacje",
"Settings" : "Ustawienia",
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index d61b3ec94bb..f23657942bc 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -80,7 +80,7 @@
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacji \"%s\" nie można zainstalować, ponieważ nie można odczytać pliku appinfo.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacji \"%s\" nie można zainstalować, ponieważ nie jest kompatybilna z tą wersją serwera.",
"__language_name__" : "Polski",
- "This is an automatically sent email, please do not reply." : "To jest automatycznie wysłany e-mail, proszę nie odpowiadać na niego.",
+ "This is an automatically sent email, please do not reply." : "To jest wiadomość e-mail wysłana automatycznie, prosimy nie odpowiadać na nią.",
"Help" : "Pomoc",
"Apps" : "Aplikacje",
"Settings" : "Ustawienia",
diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php
index c5a0f21319e..7b08fa3e598 100644
--- a/lib/private/Accounts/AccountManager.php
+++ b/lib/private/Accounts/AccountManager.php
@@ -144,6 +144,42 @@ class AccountManager implements IAccountManager {
}
}
+ $allowedScopes = [
+ self::SCOPE_PRIVATE,
+ self::SCOPE_LOCAL,
+ self::SCOPE_FEDERATED,
+ self::SCOPE_PUBLISHED,
+ self::VISIBILITY_PRIVATE,
+ self::VISIBILITY_CONTACTS_ONLY,
+ self::VISIBILITY_PUBLIC,
+ ];
+
+ // validate and convert scope values
+ foreach ($data as $propertyName => $propertyData) {
+ if (isset($propertyData['scope'])) {
+ if ($throwOnData && !in_array($propertyData['scope'], $allowedScopes, true)) {
+ throw new \InvalidArgumentException('scope');
+ }
+
+ if (
+ $propertyData['scope'] === self::SCOPE_PRIVATE
+ && ($propertyName === self::PROPERTY_DISPLAYNAME || $propertyName === self::PROPERTY_EMAIL)
+ ) {
+ if ($throwOnData) {
+ // v2-private is not available for these fields
+ throw new \InvalidArgumentException('scope');
+ } else {
+ // default to local
+ $data[$propertyName]['scope'] = self::SCOPE_LOCAL;
+ }
+ } else {
+ // migrate scope values to the new format
+ // invalid scopes are mapped to a default value
+ $data[$propertyName]['scope'] = AccountProperty::mapScopeToV2($propertyData['scope']);
+ }
+ }
+ }
+
if (empty($userData)) {
$this->insertNewUser($user, $data);
} elseif ($userData !== $data) {
@@ -198,6 +234,8 @@ class AccountManager implements IAccountManager {
*
* @param IUser $user
* @return array
+ *
+ * @deprecated use getAccount instead to make sure migrated properties work correctly
*/
public function getUser(IUser $user) {
$uid = $user->getUID();
@@ -405,7 +443,7 @@ class AccountManager implements IAccountManager {
}
$query->setParameter('name', $propertyName)
- ->setParameter('value', $property['value']);
+ ->setParameter('value', $property['value'] ?? '');
$query->execute();
}
}
@@ -421,41 +459,41 @@ class AccountManager implements IAccountManager {
self::PROPERTY_DISPLAYNAME =>
[
'value' => $user->getDisplayName(),
- 'scope' => self::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => self::SCOPE_FEDERATED,
'verified' => self::NOT_VERIFIED,
],
self::PROPERTY_ADDRESS =>
[
'value' => '',
- 'scope' => self::VISIBILITY_PRIVATE,
+ 'scope' => self::SCOPE_LOCAL,
'verified' => self::NOT_VERIFIED,
],
self::PROPERTY_WEBSITE =>
[
'value' => '',
- 'scope' => self::VISIBILITY_PRIVATE,
+ 'scope' => self::SCOPE_LOCAL,
'verified' => self::NOT_VERIFIED,
],
self::PROPERTY_EMAIL =>
[
'value' => $user->getEMailAddress(),
- 'scope' => self::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => self::SCOPE_FEDERATED,
'verified' => self::NOT_VERIFIED,
],
self::PROPERTY_AVATAR =>
[
- 'scope' => self::VISIBILITY_CONTACTS_ONLY
+ 'scope' => self::SCOPE_FEDERATED
],
self::PROPERTY_PHONE =>
[
'value' => '',
- 'scope' => self::VISIBILITY_PRIVATE,
+ 'scope' => self::SCOPE_LOCAL,
'verified' => self::NOT_VERIFIED,
],
self::PROPERTY_TWITTER =>
[
'value' => '',
- 'scope' => self::VISIBILITY_PRIVATE,
+ 'scope' => self::SCOPE_LOCAL,
'verified' => self::NOT_VERIFIED,
],
];
@@ -464,7 +502,7 @@ class AccountManager implements IAccountManager {
private function parseAccountData(IUser $user, $data): Account {
$account = new Account($user);
foreach ($data as $property => $accountData) {
- $account->setProperty($property, $accountData['value'] ?? '', $accountData['scope'] ?? self::VISIBILITY_PRIVATE, $accountData['verified'] ?? self::NOT_VERIFIED);
+ $account->setProperty($property, $accountData['value'] ?? '', $accountData['scope'] ?? self::SCOPE_LOCAL, $accountData['verified'] ?? self::NOT_VERIFIED);
}
return $account;
}
@@ -472,4 +510,18 @@ class AccountManager implements IAccountManager {
public function getAccount(IUser $user): IAccount {
return $this->parseAccountData($user, $this->getUser($user));
}
+
+ public function updateAccount(IAccount $account): void {
+ $data = [];
+
+ foreach ($account->getProperties() as $property) {
+ $data[$property->getName()] = [
+ 'value' => $property->getValue(),
+ 'scope' => $property->getScope(),
+ 'verified' => $property->getVerified(),
+ ];
+ }
+
+ $this->updateUser($account->getUser(), $data, true);
+ }
}
diff --git a/lib/private/Accounts/AccountProperty.php b/lib/private/Accounts/AccountProperty.php
index 97f9b1c356f..850f39df9e3 100644
--- a/lib/private/Accounts/AccountProperty.php
+++ b/lib/private/Accounts/AccountProperty.php
@@ -26,6 +26,7 @@ declare(strict_types=1);
namespace OC\Accounts;
+use OCP\Accounts\IAccountManager;
use OCP\Accounts\IAccountProperty;
class AccountProperty implements IAccountProperty {
@@ -42,7 +43,7 @@ class AccountProperty implements IAccountProperty {
public function __construct(string $name, string $value, string $scope, string $verified) {
$this->name = $name;
$this->value = $value;
- $this->scope = $scope;
+ $this->scope = $this->mapScopeToV2($scope);
$this->verified = $verified;
}
@@ -77,7 +78,7 @@ class AccountProperty implements IAccountProperty {
* @return IAccountProperty
*/
public function setScope(string $scope): IAccountProperty {
- $this->scope = $scope;
+ $this->scope = $this->mapScopeToV2($scope);
return $this;
}
@@ -127,6 +128,23 @@ class AccountProperty implements IAccountProperty {
return $this->scope;
}
+ public static function mapScopeToV2($scope) {
+ if (strpos($scope, 'v2-') === 0) {
+ return $scope;
+ }
+
+ switch ($scope) {
+ case IAccountManager::VISIBILITY_PRIVATE:
+ return IAccountManager::SCOPE_LOCAL;
+ case IAccountManager::VISIBILITY_CONTACTS_ONLY:
+ return IAccountManager::SCOPE_FEDERATED;
+ case IAccountManager::VISIBILITY_PUBLIC:
+ return IAccountManager::SCOPE_PUBLISHED;
+ }
+
+ return IAccountManager::SCOPE_LOCAL;
+ }
+
/**
* Get the verification status of a property
*
diff --git a/lib/private/Avatar/AvatarManager.php b/lib/private/Avatar/AvatarManager.php
index 5102396224d..04d3a721022 100644
--- a/lib/private/Avatar/AvatarManager.php
+++ b/lib/private/Avatar/AvatarManager.php
@@ -34,8 +34,10 @@ declare(strict_types=1);
namespace OC\Avatar;
+use OC\KnownUser\KnownUserService;
use OC\User\Manager;
use OC\User\NoUserException;
+use OCP\Accounts\IAccountManager;
use OCP\Files\IAppData;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
@@ -44,12 +46,16 @@ use OCP\IAvatarManager;
use OCP\IConfig;
use OCP\IL10N;
use OCP\ILogger;
+use OCP\IUserSession;
/**
* This class implements methods to access Avatar functionality
*/
class AvatarManager implements IAvatarManager {
+ /** @var IUserSession */
+ private $userSession;
+
/** @var Manager */
private $userManager;
@@ -65,6 +71,12 @@ class AvatarManager implements IAvatarManager {
/** @var IConfig */
private $config;
+ /** @var IAccountManager */
+ private $accountManager;
+
+ /** @var KnownUserService */
+ private $knownUserService;
+
/**
* AvatarManager constructor.
*
@@ -73,18 +85,26 @@ class AvatarManager implements IAvatarManager {
* @param IL10N $l
* @param ILogger $logger
* @param IConfig $config
+ * @param IUserSession $userSession
*/
public function __construct(
+ IUserSession $userSession,
Manager $userManager,
IAppData $appData,
IL10N $l,
ILogger $logger,
- IConfig $config) {
+ IConfig $config,
+ IAccountManager $accountManager,
+ KnownUserService $knownUserService
+ ) {
+ $this->userSession = $userSession;
$this->userManager = $userManager;
$this->appData = $appData;
$this->l = $l;
$this->logger = $logger;
$this->config = $config;
+ $this->accountManager = $accountManager;
+ $this->knownUserService = $knownUserService;
}
/**
@@ -104,12 +124,34 @@ class AvatarManager implements IAvatarManager {
// sanitize userID - fixes casing issue (needed for the filesystem stuff that is done below)
$userId = $user->getUID();
+ $requestingUser = null;
+ if ($this->userSession !== null) {
+ $requestingUser = $this->userSession->getUser();
+ }
+
try {
$folder = $this->appData->getFolder($userId);
} catch (NotFoundException $e) {
$folder = $this->appData->newFolder($userId);
}
+ $account = $this->accountManager->getAccount($user);
+ $avatarProperties = $account->getProperty(IAccountManager::PROPERTY_AVATAR);
+ $avatarScope = $avatarProperties->getScope();
+
+ if (
+ // v2-private scope hides the avatar from public access and from unknown users
+ $avatarScope === IAccountManager::SCOPE_PRIVATE
+ && (
+ // accessing from public link
+ $requestingUser === null
+ // logged in, but unknown to user
+ || !$this->knownUserService->isKnownToUser($requestingUser->getUID(), $userId)
+ )) {
+ // use a placeholder avatar which caches the generated images
+ return new PlaceholderAvatar($folder, $user, $this->logger);
+ }
+
return new UserAvatar($folder, $this->l, $user, $this->logger, $this->config);
}
diff --git a/lib/private/Avatar/PlaceholderAvatar.php b/lib/private/Avatar/PlaceholderAvatar.php
new file mode 100644
index 00000000000..5883fe531a3
--- /dev/null
+++ b/lib/private/Avatar/PlaceholderAvatar.php
@@ -0,0 +1,183 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2018, Michael Weimann <mail@michael-weimann.eu>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Michael Weimann <mail@michael-weimann.eu>
+ *
+ * @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 OC\Avatar;
+
+use OC\NotSquareException;
+use OC\User\User;
+use OCP\Files\NotFoundException;
+use OCP\Files\NotPermittedException;
+use OCP\Files\SimpleFS\ISimpleFile;
+use OCP\Files\SimpleFS\ISimpleFolder;
+use OCP\IConfig;
+use OCP\IImage;
+use OCP\IL10N;
+use OCP\ILogger;
+
+/**
+ * This class represents a registered user's placeholder avatar.
+ *
+ * It generates an image based on the user's initials and caches it on storage
+ * for faster retrieval, unlike the GuestAvatar.
+ */
+class PlaceholderAvatar extends Avatar {
+ /** @var ISimpleFolder */
+ private $folder;
+
+ /** @var User */
+ private $user;
+
+ /**
+ * UserAvatar constructor.
+ *
+ * @param IConfig $config The configuration
+ * @param ISimpleFolder $folder The avatar files folder
+ * @param IL10N $l The localization helper
+ * @param User $user The user this class manages the avatar for
+ * @param ILogger $logger The logger
+ */
+ public function __construct(
+ ISimpleFolder $folder,
+ $user,
+ ILogger $logger) {
+ parent::__construct($logger);
+
+ $this->folder = $folder;
+ $this->user = $user;
+ }
+
+ /**
+ * Check if an avatar exists for the user
+ *
+ * @return bool
+ */
+ public function exists() {
+ return true;
+ }
+
+ /**
+ * Sets the users avatar.
+ *
+ * @param IImage|resource|string $data An image object, imagedata or path to set a new avatar
+ * @throws \Exception if the provided file is not a jpg or png image
+ * @throws \Exception if the provided image is not valid
+ * @throws NotSquareException if the image is not square
+ * @return void
+ */
+ public function set($data) {
+ // unimplemented for placeholder avatars
+ }
+
+ /**
+ * Removes the users avatar.
+ */
+ public function remove(bool $silent = false) {
+ $avatars = $this->folder->getDirectoryListing();
+
+ foreach ($avatars as $avatar) {
+ $avatar->delete();
+ }
+ }
+
+ /**
+ * Returns the avatar for an user.
+ *
+ * If there is no avatar file yet, one is generated.
+ *
+ * @param int $size
+ * @return ISimpleFile
+ * @throws NotFoundException
+ * @throws \OCP\Files\NotPermittedException
+ * @throws \OCP\PreConditionNotMetException
+ */
+ public function getFile($size) {
+ $size = (int) $size;
+
+ $ext = 'png';
+
+ if ($size === -1) {
+ $path = 'avatar-placeholder.' . $ext;
+ } else {
+ $path = 'avatar-placeholder.' . $size . '.' . $ext;
+ }
+
+ try {
+ $file = $this->folder->getFile($path);
+ } catch (NotFoundException $e) {
+ if ($size <= 0) {
+ throw new NotFoundException;
+ }
+
+ if (!$data = $this->generateAvatarFromSvg($size)) {
+ $data = $this->generateAvatar($this->getDisplayName(), $size);
+ }
+
+ try {
+ $file = $this->folder->newFile($path);
+ $file->putContent($data);
+ } catch (NotPermittedException $e) {
+ $this->logger->error('Failed to save avatar placeholder for ' . $this->user->getUID());
+ throw new NotFoundException();
+ }
+ }
+
+ return $file;
+ }
+
+ /**
+ * Returns the user display name.
+ *
+ * @return string
+ */
+ public function getDisplayName(): string {
+ return $this->user->getDisplayName();
+ }
+
+ /**
+ * Handles user changes.
+ *
+ * @param string $feature The changed feature
+ * @param mixed $oldValue The previous value
+ * @param mixed $newValue The new value
+ * @throws NotPermittedException
+ * @throws \OCP\PreConditionNotMetException
+ */
+ public function userChanged($feature, $oldValue, $newValue) {
+ $this->remove();
+ }
+
+ /**
+ * Check if the avatar of a user is a custom uploaded one
+ *
+ * @return bool
+ */
+ public function isCustomAvatar(): bool {
+ return false;
+ }
+}
diff --git a/lib/private/Avatar/UserAvatar.php b/lib/private/Avatar/UserAvatar.php
index f7ace429f7d..f47809425ed 100644
--- a/lib/private/Avatar/UserAvatar.php
+++ b/lib/private/Avatar/UserAvatar.php
@@ -270,6 +270,7 @@ class UserAvatar extends Avatar {
throw new NotFoundException;
}
+ // TODO: rework to integrate with the PlaceholderAvatar in a compatible way
if ($this->folder->fileExists('generated')) {
if (!$data = $this->generateAvatarFromSvg($size)) {
$data = $this->generateAvatar($this->getDisplayName(), $size);
diff --git a/lib/private/DB/MigrationService.php b/lib/private/DB/MigrationService.php
index 44707911092..42c3de3ea1e 100644
--- a/lib/private/DB/MigrationService.php
+++ b/lib/private/DB/MigrationService.php
@@ -453,8 +453,6 @@ class MigrationService {
$toSchema = $instance->changeSchema($this->output, function () use ($toSchema) {
return $toSchema ?: new SchemaWrapper($this->connection);
}, ['tablePrefix' => $this->connection->getPrefix()]) ?: $toSchema;
-
- $this->markAsExecuted($version);
}
if ($toSchema instanceof SchemaWrapper) {
@@ -466,6 +464,10 @@ class MigrationService {
$this->connection->migrateToSchema($targetSchema);
$toSchema->performDropTableCalls();
}
+
+ foreach ($toBeExecuted as $version) {
+ $this->markAsExecuted($version);
+ }
}
/**
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index 944b0b69959..c21364847e1 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -288,16 +288,14 @@ class Local extends \OC\Files\Storage\Common {
}
}
- private function treeContainsBlacklistedFile(string $path): bool {
+ private function checkTreeForForbiddenItems(string $path) {
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
foreach ($iterator as $file) {
/** @var \SplFileInfo $file */
if (Filesystem::isFileBlacklisted($file->getBasename())) {
- return true;
+ throw new ForbiddenException('Invalid path: ' . $file->getPathname(), false);
}
}
-
- return false;
}
public function rename($path1, $path2) {
@@ -337,9 +335,7 @@ class Local extends \OC\Files\Storage\Common {
return $result;
}
- if ($this->treeContainsBlacklistedFile($this->getSourcePath($path1))) {
- throw new ForbiddenException('Invalid path', false);
- }
+ $this->checkTreeForForbiddenItems($this->getSourcePath($path1));
}
return rename($this->getSourcePath($path1), $this->getSourcePath($path2));
@@ -437,7 +433,7 @@ class Local extends \OC\Files\Storage\Common {
*/
public function getSourcePath($path) {
if (Filesystem::isFileBlacklisted($path)) {
- throw new ForbiddenException('Invalid path', false);
+ throw new ForbiddenException('Invalid path: ' . $path, false);
}
$fullPath = $this->datadir . $path;
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 1bee09e3659..ed7d6c26318 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -456,7 +456,7 @@ class View {
// forward file handle via chunked fread because fseek seem to have failed
$end = $from + 1;
- while (!feof($handle) && ftell($handle) < $end) {
+ while (!feof($handle) && ftell($handle) < $end && ftell($handle) !== $from) {
$len = $from - ftell($handle);
if ($len > $chunkSize) {
$len = $chunkSize;
diff --git a/lib/private/KnownUser/KnownUserService.php b/lib/private/KnownUser/KnownUserService.php
index 96af21c836f..1f300a9f8e4 100644
--- a/lib/private/KnownUser/KnownUserService.php
+++ b/lib/private/KnownUser/KnownUserService.php
@@ -74,6 +74,10 @@ class KnownUserService {
* @return bool
*/
public function isKnownToUser(string $knownTo, string $contactUserId): bool {
+ if ($knownTo === $contactUserId) {
+ return true;
+ }
+
if (!isset($this->knownUsers[$knownTo])) {
$entities = $this->mapper->getKnownUsers($knownTo);
$this->knownUsers[$knownTo] = [];
diff --git a/lib/private/LDAP/NullLDAPProviderFactory.php b/lib/private/LDAP/NullLDAPProviderFactory.php
new file mode 100644
index 00000000000..46ac4dd78a3
--- /dev/null
+++ b/lib/private/LDAP/NullLDAPProviderFactory.php
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2021 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\LDAP;
+
+use OCP\IServerContainer;
+use OCP\LDAP\ILDAPProviderFactory;
+
+class NullLDAPProviderFactory implements ILDAPProviderFactory {
+ public function __construct(IServerContainer $serverContainer) {
+ }
+
+ public function getLDAPProvider() {
+ throw new \Exception("No LDAP provider is available");
+ }
+}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index c0d6afbaaf6..6a1550f83e0 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -104,6 +104,8 @@ use OC\IntegrityCheck\Checker;
use OC\IntegrityCheck\Helpers\AppLocator;
use OC\IntegrityCheck\Helpers\EnvironmentHelper;
use OC\IntegrityCheck\Helpers\FileAccessHelper;
+use OC\LDAP\NullLDAPProviderFactory;
+use OC\KnownUser\KnownUserService;
use OC\Lock\DBLockingProvider;
use OC\Lock\MemcacheLockingProvider;
use OC\Lock\NoopLockingProvider;
@@ -205,6 +207,8 @@ use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
+use OCP\LDAP\ILDAPProvider;
+use OCP\LDAP\ILDAPProviderFactory;
use OCP\Lock\ILockingProvider;
use OCP\Log\ILogFactory;
use OCP\Mail\IMailer;
@@ -720,11 +724,14 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerService(AvatarManager::class, function (Server $c) {
return new AvatarManager(
+ $c->get(IUserSession::class),
$c->get(\OC\User\Manager::class),
$c->getAppDataDir('avatar'),
$c->getL10N('lib'),
$c->get(ILogger::class),
- $c->get(\OCP\IConfig::class)
+ $c->get(\OCP\IConfig::class),
+ $c->get(IAccountManager::class),
+ $c->get(KnownUserService::class)
);
});
$this->registerAlias(IAvatarManager::class, AvatarManager::class);
@@ -999,14 +1006,20 @@ class Server extends ServerContainer implements IServerContainer {
/** @deprecated 19.0.0 */
$this->registerDeprecatedAlias('Mailer', IMailer::class);
- $this->registerService('LDAPProvider', function (ContainerInterface $c) {
+ /** @deprecated 21.0.0 */
+ $this->registerDeprecatedAlias('LDAPProvider', ILDAPProvider::class);
+
+ $this->registerService(ILDAPProviderFactory::class, function (ContainerInterface $c) {
$config = $c->get(\OCP\IConfig::class);
$factoryClass = $config->getSystemValue('ldapProviderFactory', null);
if (is_null($factoryClass)) {
- throw new \Exception('ldapProviderFactory not set');
+ return new NullLDAPProviderFactory($this);
}
/** @var \OCP\LDAP\ILDAPProviderFactory $factory */
- $factory = new $factoryClass($this);
+ return new $factoryClass($this);
+ });
+ $this->registerService(ILDAPProvider::class, function (ContainerInterface $c) {
+ $factory = $c->get(ILDAPProviderFactory::class);
return $factory->getLDAPProvider();
});
$this->registerService(ILockingProvider::class, function (ContainerInterface $c) {
diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php
index cf05e9bfbc3..00ef7e2426b 100644
--- a/lib/private/Share20/DefaultShareProvider.php
+++ b/lib/private/Share20/DefaultShareProvider.php
@@ -470,7 +470,8 @@ class DefaultShareProvider implements IShareProvider {
}
if (!$group->inGroup($user)) {
- throw new ProviderException('Recipient not in receiving group');
+ // nothing left to do
+ return;
}
// Try to fetch user specific share
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index f58bf882554..9df544bb628 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -543,7 +543,8 @@ class Manager implements IManager {
$this->groupManager->getUserGroupIds($sharedWith)
);
if (empty($groups)) {
- throw new \Exception('Sharing is only allowed with group members');
+ $message_t = $this->l->t('Sharing is only allowed with group members');
+ throw new \Exception($message_t);
}
}
diff --git a/lib/public/Accounts/IAccountManager.php b/lib/public/Accounts/IAccountManager.php
index ae70d8963b4..63fbc9ba312 100644
--- a/lib/public/Accounts/IAccountManager.php
+++ b/lib/public/Accounts/IAccountManager.php
@@ -38,11 +38,54 @@ use OCP\IUser;
*/
interface IAccountManager {
- /** nobody can see my account details */
+ /**
+ * Contact details visible locally only
+ *
+ * @since 21.0.1
+ */
+ public const SCOPE_PRIVATE = 'v2-private';
+
+ /**
+ * Contact details visible locally and through public link access on local instance
+ *
+ * @since 21.0.1
+ */
+ public const SCOPE_LOCAL = 'v2-local';
+
+ /**
+ * Contact details visible locally, through public link access and on trusted federated servers.
+ *
+ * @since 21.0.1
+ */
+ public const SCOPE_FEDERATED = 'v2-federated';
+
+ /**
+ * Contact details visible locally, through public link access, on trusted federated servers
+ * and published to the public lookup server.
+ *
+ * @since 21.0.1
+ */
+ public const SCOPE_PUBLISHED = 'v2-published';
+
+ /**
+ * Contact details only visible locally
+ *
+ * @deprecated 21.0.1
+ */
public const VISIBILITY_PRIVATE = 'private';
- /** only contacts, especially trusted servers can see my contact details */
+
+ /**
+ * Contact details visible on trusted federated servers.
+ *
+ * @deprecated 21.0.1
+ */
public const VISIBILITY_CONTACTS_ONLY = 'contacts';
- /** every body ca see my contact detail, will be published to the lookup server */
+
+ /**
+ * Contact details visible on trusted federated servers and in the public lookup server.
+ *
+ * @deprecated 21.0.1
+ */
public const VISIBILITY_PUBLIC = 'public';
public const PROPERTY_AVATAR = 'avatar';
@@ -68,6 +111,16 @@ interface IAccountManager {
public function getAccount(IUser $user): IAccount;
/**
+ * Update the account data with for the user
+ *
+ * @since 21.0.1
+ *
+ * @param IAccount $account
+ * @throws \InvalidArgumentException Message is the property that was invalid
+ */
+ public function updateAccount(IAccount $account): void;
+
+ /**
* Search for users based on account data
*
* @param string $property
diff --git a/lib/public/LDAP/ILDAPProviderFactory.php b/lib/public/LDAP/ILDAPProviderFactory.php
index f005cf07885..9295b5432f8 100644
--- a/lib/public/LDAP/ILDAPProviderFactory.php
+++ b/lib/public/LDAP/ILDAPProviderFactory.php
@@ -44,7 +44,7 @@ interface ILDAPProviderFactory {
* @since 11.0.0
*/
public function __construct(IServerContainer $serverContainer);
-
+
/**
* creates and returns an instance of the ILDAPProvider
*
diff --git a/tests/lib/Accounts/AccountManagerTest.php b/tests/lib/Accounts/AccountManagerTest.php
index fcd1a78add7..27ebed69793 100644
--- a/tests/lib/Accounts/AccountManagerTest.php
+++ b/tests/lib/Accounts/AccountManagerTest.php
@@ -153,6 +153,129 @@ class AccountManagerTest extends TestCase {
];
}
+ public function updateUserSetScopeProvider() {
+ return [
+ // regular scope switching
+ [
+ [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Display Name', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'test@example.org', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_AVATAR => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'some street', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://example.org', 'scope' => IAccountManager::SCOPE_PRIVATE],
+ ],
+ [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Display Name', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'test@example.org', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PRIVATE],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'some street', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://example.org', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ ],
+ [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Display Name', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'test@example.org', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PRIVATE],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_ADDRESS => ['value' => 'some street', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://example.org', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ ],
+ ],
+ // legacy scope mapping, the given visibility values get converted to scopes
+ [
+ [
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://example.org', 'scope' => IAccountManager::SCOPE_PRIVATE],
+ ],
+ [
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::VISIBILITY_PUBLIC],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::VISIBILITY_CONTACTS_ONLY],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://example.org', 'scope' => IAccountManager::VISIBILITY_PRIVATE],
+ ],
+ [
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://example.org', 'scope' => IAccountManager::SCOPE_LOCAL],
+ ],
+ ],
+ // invalid or unsupported scope values get converted to SCOPE_LOCAL
+ [
+ [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Display Name', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'test@example.org', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PUBLISHED],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::SCOPE_FEDERATED],
+ ],
+ [
+ // SCOPE_PRIVATE is not allowed for display name and email
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Display Name', 'scope' => IAccountManager::SCOPE_PRIVATE],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'test@example.org', 'scope' => IAccountManager::SCOPE_PRIVATE],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => 'invalid'],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => ''],
+ ],
+ [
+ IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Display Name', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_EMAIL => ['value' => 'test@example.org', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_LOCAL],
+ IAccountManager::PROPERTY_PHONE => ['value' => '+491601231212', 'scope' => IAccountManager::SCOPE_LOCAL],
+ ],
+ // don't throw but fall back
+ false, false,
+ ],
+ // invalid or unsupported scope values throw an exception when passing $throwOnData=true
+ [
+ [IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Display Name', 'scope' => IAccountManager::SCOPE_PUBLISHED]],
+ [IAccountManager::PROPERTY_DISPLAYNAME => ['value' => 'Display Name', 'scope' => IAccountManager::SCOPE_PRIVATE]],
+ null,
+ // throw exception
+ true, true,
+ ],
+ [
+ [IAccountManager::PROPERTY_EMAIL => ['value' => 'test@example.org', 'scope' => IAccountManager::SCOPE_PUBLISHED]],
+ [IAccountManager::PROPERTY_EMAIL => ['value' => 'test@example.org', 'scope' => IAccountManager::SCOPE_PRIVATE]],
+ null,
+ // throw exception
+ true, true,
+ ],
+ [
+ [IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => IAccountManager::SCOPE_PUBLISHED]],
+ [IAccountManager::PROPERTY_TWITTER => ['value' => '@sometwitter', 'scope' => 'invalid']],
+ null,
+ // throw exception
+ true, true,
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider updateUserSetScopeProvider
+ */
+ public function testUpdateUserSetScope($oldData, $newData, $savedData, $throwOnData = true, $expectedThrow = false) {
+ $accountManager = $this->getInstance(['getUser', 'insertNewUser', 'updateExistingUser', 'updateVerifyStatus', 'checkEmailVerification']);
+ /** @var IUser $user */
+ $user = $this->createMock(IUser::class);
+
+ $accountManager->expects($this->once())->method('getUser')->with($user)->willReturn($oldData);
+
+ if ($expectedThrow) {
+ $accountManager->expects($this->never())->method('updateExistingUser');
+ $this->expectException(\InvalidArgumentException::class);
+ $this->expectExceptionMessage('scope');
+ } else {
+ $accountManager->expects($this->once())->method('checkEmailVerification')
+ ->with($oldData, $savedData, $user)->willReturn($savedData);
+ $accountManager->expects($this->once())->method('updateVerifyStatus')
+ ->with($oldData, $savedData)->willReturn($savedData);
+ $accountManager->expects($this->once())->method('updateExistingUser')
+ ->with($user, $savedData);
+ $accountManager->expects($this->never())->method('insertNewUser');
+ }
+
+ $accountManager->updateUser($user, $newData, $throwOnData);
+ }
/**
* @dataProvider dataTestGetUser
@@ -278,26 +401,26 @@ class AccountManagerTest extends TestCase {
IAccountManager::PROPERTY_TWITTER =>
[
'value' => '@twitterhandle',
- 'scope' => IAccountManager::VISIBILITY_PRIVATE,
+ 'scope' => IAccountManager::SCOPE_LOCAL,
'verified' => IAccountManager::NOT_VERIFIED,
],
IAccountManager::PROPERTY_EMAIL =>
[
'value' => 'test@example.com',
- 'scope' => IAccountManager::VISIBILITY_PUBLIC,
+ 'scope' => IAccountManager::SCOPE_PUBLISHED,
'verified' => IAccountManager::VERIFICATION_IN_PROGRESS,
],
IAccountManager::PROPERTY_WEBSITE =>
[
'value' => 'https://example.com',
- 'scope' => IAccountManager::VISIBILITY_CONTACTS_ONLY,
+ 'scope' => IAccountManager::SCOPE_FEDERATED,
'verified' => IAccountManager::VERIFIED,
],
];
$expected = new Account($user);
- $expected->setProperty(IAccountManager::PROPERTY_TWITTER, '@twitterhandle', IAccountManager::VISIBILITY_PRIVATE, IAccountManager::NOT_VERIFIED);
- $expected->setProperty(IAccountManager::PROPERTY_EMAIL, 'test@example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::VERIFICATION_IN_PROGRESS);
- $expected->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_CONTACTS_ONLY, IAccountManager::VERIFIED);
+ $expected->setProperty(IAccountManager::PROPERTY_TWITTER, '@twitterhandle', IAccountManager::SCOPE_LOCAL, IAccountManager::NOT_VERIFIED);
+ $expected->setProperty(IAccountManager::PROPERTY_EMAIL, 'test@example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::VERIFICATION_IN_PROGRESS);
+ $expected->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_FEDERATED, IAccountManager::VERIFIED);
$accountManager->expects($this->once())
->method('getUser')
diff --git a/tests/lib/Accounts/AccountPropertyTest.php b/tests/lib/Accounts/AccountPropertyTest.php
index afd807a44b4..f99abc21f83 100644
--- a/tests/lib/Accounts/AccountPropertyTest.php
+++ b/tests/lib/Accounts/AccountPropertyTest.php
@@ -37,12 +37,12 @@ class AccountPropertyTest extends TestCase {
$accountProperty = new AccountProperty(
IAccountManager::PROPERTY_WEBSITE,
'https://example.com',
- IAccountManager::VISIBILITY_PUBLIC,
+ IAccountManager::SCOPE_PUBLISHED,
IAccountManager::VERIFIED
);
$this->assertEquals(IAccountManager::PROPERTY_WEBSITE, $accountProperty->getName());
$this->assertEquals('https://example.com', $accountProperty->getValue());
- $this->assertEquals(IAccountManager::VISIBILITY_PUBLIC, $accountProperty->getScope());
+ $this->assertEquals(IAccountManager::SCOPE_PUBLISHED, $accountProperty->getScope());
$this->assertEquals(IAccountManager::VERIFIED, $accountProperty->getVerified());
}
@@ -50,7 +50,7 @@ class AccountPropertyTest extends TestCase {
$accountProperty = new AccountProperty(
IAccountManager::PROPERTY_WEBSITE,
'https://example.com',
- IAccountManager::VISIBILITY_PUBLIC,
+ IAccountManager::SCOPE_PUBLISHED,
IAccountManager::VERIFIED
);
$actualReturn = $accountProperty->setValue('https://example.org');
@@ -62,19 +62,48 @@ class AccountPropertyTest extends TestCase {
$accountProperty = new AccountProperty(
IAccountManager::PROPERTY_WEBSITE,
'https://example.com',
- IAccountManager::VISIBILITY_PUBLIC,
+ IAccountManager::SCOPE_PUBLISHED,
IAccountManager::VERIFIED
);
- $actualReturn = $accountProperty->setScope(IAccountManager::VISIBILITY_PRIVATE);
- $this->assertEquals(IAccountManager::VISIBILITY_PRIVATE, $accountProperty->getScope());
- $this->assertEquals(IAccountManager::VISIBILITY_PRIVATE, $actualReturn->getScope());
+ $actualReturn = $accountProperty->setScope(IAccountManager::SCOPE_LOCAL);
+ $this->assertEquals(IAccountManager::SCOPE_LOCAL, $accountProperty->getScope());
+ $this->assertEquals(IAccountManager::SCOPE_LOCAL, $actualReturn->getScope());
+ }
+
+ public function scopesProvider() {
+ return [
+ // current values
+ [IAccountManager::SCOPE_PRIVATE, IAccountManager::SCOPE_PRIVATE],
+ [IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_LOCAL],
+ [IAccountManager::SCOPE_PUBLISHED, IAccountManager::SCOPE_PUBLISHED],
+ // legacy values
+ [IAccountManager::VISIBILITY_PRIVATE, IAccountManager::SCOPE_LOCAL],
+ [IAccountManager::VISIBILITY_CONTACTS_ONLY, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::VISIBILITY_PUBLIC, IAccountManager::SCOPE_PUBLISHED],
+ // fallback
+ ['', IAccountManager::SCOPE_LOCAL],
+ ['unknown', IAccountManager::SCOPE_LOCAL],
+ ];
+ }
+
+ /**
+ * @dataProvider scopesProvider
+ */
+ public function testSetScopeMapping($storedScope, $returnedScope) {
+ $accountProperty = new AccountProperty(
+ IAccountManager::PROPERTY_WEBSITE,
+ 'https://example.com',
+ $storedScope,
+ IAccountManager::VERIFIED
+ );
+ $this->assertEquals($returnedScope, $accountProperty->getScope());
}
public function testSetVerified() {
$accountProperty = new AccountProperty(
IAccountManager::PROPERTY_WEBSITE,
'https://example.com',
- IAccountManager::VISIBILITY_PUBLIC,
+ IAccountManager::SCOPE_PUBLISHED,
IAccountManager::VERIFIED
);
$actualReturn = $accountProperty->setVerified(IAccountManager::NOT_VERIFIED);
@@ -86,13 +115,13 @@ class AccountPropertyTest extends TestCase {
$accountProperty = new AccountProperty(
IAccountManager::PROPERTY_WEBSITE,
'https://example.com',
- IAccountManager::VISIBILITY_PUBLIC,
+ IAccountManager::SCOPE_PUBLISHED,
IAccountManager::VERIFIED
);
$this->assertEquals([
'name' => IAccountManager::PROPERTY_WEBSITE,
'value' => 'https://example.com',
- 'scope' => IAccountManager::VISIBILITY_PUBLIC,
+ 'scope' => IAccountManager::SCOPE_PUBLISHED,
'verified' => IAccountManager::VERIFIED
], $accountProperty->jsonSerialize());
}
diff --git a/tests/lib/Accounts/AccountTest.php b/tests/lib/Accounts/AccountTest.php
index 11b13637bd0..8afcc44afd1 100644
--- a/tests/lib/Accounts/AccountTest.php
+++ b/tests/lib/Accounts/AccountTest.php
@@ -43,21 +43,21 @@ class AccountTest extends TestCase {
public function testSetProperty() {
$user = $this->createMock(IUser::class);
- $property = new AccountProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::NOT_VERIFIED);
+ $property = new AccountProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::NOT_VERIFIED);
$account = new Account($user);
- $account->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::NOT_VERIFIED);
+ $account->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::NOT_VERIFIED);
$this->assertEquals($property, $account->getProperty(IAccountManager::PROPERTY_WEBSITE));
}
public function testGetProperties() {
$user = $this->createMock(IUser::class);
$properties = [
- IAccountManager::PROPERTY_WEBSITE => new AccountProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::NOT_VERIFIED),
- IAccountManager::PROPERTY_EMAIL => new AccountProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::VISIBILITY_PRIVATE, IAccountManager::VERIFIED)
+ IAccountManager::PROPERTY_WEBSITE => new AccountProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::NOT_VERIFIED),
+ IAccountManager::PROPERTY_EMAIL => new AccountProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::SCOPE_LOCAL, IAccountManager::VERIFIED)
];
$account = new Account($user);
- $account->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::NOT_VERIFIED);
- $account->setProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::VISIBILITY_PRIVATE, IAccountManager::VERIFIED);
+ $account->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::NOT_VERIFIED);
+ $account->setProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::SCOPE_LOCAL, IAccountManager::VERIFIED);
$this->assertEquals($properties, $account->getProperties());
}
@@ -65,14 +65,14 @@ class AccountTest extends TestCase {
public function testGetFilteredProperties() {
$user = $this->createMock(IUser::class);
$properties = [
- IAccountManager::PROPERTY_WEBSITE => new AccountProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::NOT_VERIFIED),
- IAccountManager::PROPERTY_EMAIL => new AccountProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::VISIBILITY_PRIVATE, IAccountManager::VERIFIED),
- IAccountManager::PROPERTY_PHONE => new AccountProperty(IAccountManager::PROPERTY_PHONE, '123456', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::VERIFIED),
+ IAccountManager::PROPERTY_WEBSITE => new AccountProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::NOT_VERIFIED),
+ IAccountManager::PROPERTY_EMAIL => new AccountProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::SCOPE_LOCAL, IAccountManager::VERIFIED),
+ IAccountManager::PROPERTY_PHONE => new AccountProperty(IAccountManager::PROPERTY_PHONE, '123456', IAccountManager::SCOPE_PUBLISHED, IAccountManager::VERIFIED),
];
$account = new Account($user);
- $account->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::NOT_VERIFIED);
- $account->setProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::VISIBILITY_PRIVATE, IAccountManager::VERIFIED);
- $account->setProperty(IAccountManager::PROPERTY_PHONE, '123456', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::VERIFIED);
+ $account->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::NOT_VERIFIED);
+ $account->setProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::SCOPE_LOCAL, IAccountManager::VERIFIED);
+ $account->setProperty(IAccountManager::PROPERTY_PHONE, '123456', IAccountManager::SCOPE_PUBLISHED, IAccountManager::VERIFIED);
$this->assertEquals(
@@ -80,7 +80,7 @@ class AccountTest extends TestCase {
IAccountManager::PROPERTY_WEBSITE => $properties[IAccountManager::PROPERTY_WEBSITE],
IAccountManager::PROPERTY_PHONE => $properties[IAccountManager::PROPERTY_PHONE],
],
- $account->getFilteredProperties(IAccountManager::VISIBILITY_PUBLIC)
+ $account->getFilteredProperties(IAccountManager::SCOPE_PUBLISHED)
);
$this->assertEquals(
[
@@ -91,19 +91,19 @@ class AccountTest extends TestCase {
);
$this->assertEquals(
[IAccountManager::PROPERTY_PHONE => $properties[IAccountManager::PROPERTY_PHONE]],
- $account->getFilteredProperties(IAccountManager::VISIBILITY_PUBLIC, IAccountManager::VERIFIED)
+ $account->getFilteredProperties(IAccountManager::SCOPE_PUBLISHED, IAccountManager::VERIFIED)
);
}
public function testJsonSerialize() {
$user = $this->createMock(IUser::class);
$properties = [
- IAccountManager::PROPERTY_WEBSITE => new AccountProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::NOT_VERIFIED),
- IAccountManager::PROPERTY_EMAIL => new AccountProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::VISIBILITY_PRIVATE, IAccountManager::VERIFIED)
+ IAccountManager::PROPERTY_WEBSITE => new AccountProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::NOT_VERIFIED),
+ IAccountManager::PROPERTY_EMAIL => new AccountProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::SCOPE_LOCAL, IAccountManager::VERIFIED)
];
$account = new Account($user);
- $account->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::VISIBILITY_PUBLIC, IAccountManager::NOT_VERIFIED);
- $account->setProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::VISIBILITY_PRIVATE, IAccountManager::VERIFIED);
+ $account->setProperty(IAccountManager::PROPERTY_WEBSITE, 'https://example.com', IAccountManager::SCOPE_PUBLISHED, IAccountManager::NOT_VERIFIED);
+ $account->setProperty(IAccountManager::PROPERTY_EMAIL, 'user@example.com', IAccountManager::SCOPE_LOCAL, IAccountManager::VERIFIED);
$this->assertEquals($properties, $account->jsonSerialize());
}
diff --git a/tests/lib/Avatar/AvatarManagerTest.php b/tests/lib/Avatar/AvatarManagerTest.php
index 5a061cd10e9..d3bc60efb59 100644
--- a/tests/lib/Avatar/AvatarManagerTest.php
+++ b/tests/lib/Avatar/AvatarManagerTest.php
@@ -25,19 +25,27 @@
namespace Test\Avatar;
use OC\Avatar\AvatarManager;
+use OC\Avatar\PlaceholderAvatar;
use OC\Avatar\UserAvatar;
+use OC\KnownUser\KnownUserService;
use OC\User\Manager;
+use OCP\Accounts\IAccount;
+use OCP\Accounts\IAccountManager;
+use OCP\Accounts\IAccountProperty;
use OCP\Files\IAppData;
use OCP\Files\SimpleFS\ISimpleFolder;
use OCP\IConfig;
use OCP\IL10N;
use OCP\ILogger;
use OCP\IUser;
+use OCP\IUserSession;
/**
* Class AvatarManagerTest
*/
class AvatarManagerTest extends \Test\TestCase {
+ /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
+ private $userSession;
/** @var Manager|\PHPUnit\Framework\MockObject\MockObject */
private $userManager;
/** @var IAppData|\PHPUnit\Framework\MockObject\MockObject */
@@ -48,28 +56,37 @@ class AvatarManagerTest extends \Test\TestCase {
private $logger;
/** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
private $config;
+ /** @var IAccountManager|\PHPUnit\Framework\MockObject\MockObject */
+ private $accountManager;
/** @var AvatarManager | \PHPUnit\Framework\MockObject\MockObject */
private $avatarManager;
+ /** @var KnownUserService | \PHPUnit\Framework\MockObject\MockObject */
+ private $knownUserService;
protected function setUp(): void {
parent::setUp();
+ $this->userSession = $this->createMock(IUserSession::class);
$this->userManager = $this->createMock(Manager::class);
$this->appData = $this->createMock(IAppData::class);
$this->l10n = $this->createMock(IL10N::class);
$this->logger = $this->createMock(ILogger::class);
$this->config = $this->createMock(IConfig::class);
+ $this->accountManager = $this->createMock(IAccountManager::class);
+ $this->knownUserService = $this->createMock(KnownUserService::class);
$this->avatarManager = new AvatarManager(
+ $this->userSession,
$this->userManager,
$this->appData,
$this->l10n,
$this->logger,
- $this->config
+ $this->config,
+ $this->accountManager,
+ $this->knownUserService
);
}
-
public function testGetAvatarInvalidUser() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('user does not exist');
@@ -83,17 +100,45 @@ class AvatarManagerTest extends \Test\TestCase {
$this->avatarManager->getAvatar('invalidUser');
}
- public function testGetAvatarValidUser() {
+ public function testGetAvatarForSelf() {
$user = $this->createMock(IUser::class);
$user
- ->expects($this->once())
+ ->expects($this->any())
->method('getUID')
->willReturn('valid-user');
+
+ // requesting user
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($user);
+
$this->userManager
->expects($this->once())
->method('get')
->with('valid-user')
->willReturn($user);
+
+ $account = $this->createMock(IAccount::class);
+ $this->accountManager->expects($this->once())
+ ->method('getAccount')
+ ->with($user)
+ ->willReturn($account);
+
+ $property = $this->createMock(IAccountProperty::class);
+ $account->expects($this->once())
+ ->method('getProperty')
+ ->with(IAccountManager::PROPERTY_AVATAR)
+ ->willReturn($property);
+
+ $property->expects($this->once())
+ ->method('getScope')
+ ->willReturn(IAccountManager::SCOPE_PRIVATE);
+
+ $this->knownUserService->expects($this->any())
+ ->method('isKnownToUser')
+ ->with('valid-user', 'valid-user')
+ ->willReturn(true);
+
$folder = $this->createMock(ISimpleFolder::class);
$this->appData
->expects($this->once())
@@ -126,4 +171,86 @@ class AvatarManagerTest extends \Test\TestCase {
$expected = new UserAvatar($folder, $this->l10n, $user, $this->logger, $this->config);
$this->assertEquals($expected, $this->avatarManager->getAvatar('vaLid-USER'));
}
+
+ public function knownUnknownProvider() {
+ return [
+ [IAccountManager::SCOPE_LOCAL, false, false, false],
+ [IAccountManager::SCOPE_LOCAL, true, false, false],
+
+ // public access cannot see real avatar
+ [IAccountManager::SCOPE_PRIVATE, true, false, true],
+ // unknown users cannot see real avatar
+ [IAccountManager::SCOPE_PRIVATE, false, false, true],
+ // known users can see real avatar
+ [IAccountManager::SCOPE_PRIVATE, false, true, false],
+ ];
+ }
+
+ /**
+ * @dataProvider knownUnknownProvider
+ */
+ public function testGetAvatarScopes($avatarScope, $isPublicCall, $isKnownUser, $expectedPlaceholder) {
+ if ($isPublicCall) {
+ $requestingUser = null;
+ } else {
+ $requestingUser = $this->createMock(IUser::class);
+ $requestingUser->method('getUID')->willReturn('requesting-user');
+ }
+
+ // requesting user
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($requestingUser);
+
+ $user = $this->createMock(IUser::class);
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->willReturn('valid-user');
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('valid-user')
+ ->willReturn($user);
+
+ $account = $this->createMock(IAccount::class);
+ $this->accountManager->expects($this->once())
+ ->method('getAccount')
+ ->with($user)
+ ->willReturn($account);
+
+ $property = $this->createMock(IAccountProperty::class);
+ $account->expects($this->once())
+ ->method('getProperty')
+ ->with(IAccountManager::PROPERTY_AVATAR)
+ ->willReturn($property);
+
+ $property->expects($this->once())
+ ->method('getScope')
+ ->willReturn($avatarScope);
+
+ $folder = $this->createMock(ISimpleFolder::class);
+ $this->appData
+ ->expects($this->once())
+ ->method('getFolder')
+ ->with('valid-user')
+ ->willReturn($folder);
+
+ if (!$isPublicCall) {
+ $this->knownUserService->expects($this->any())
+ ->method('isKnownToUser')
+ ->with('requesting-user', 'valid-user')
+ ->willReturn($isKnownUser);
+ } else {
+ $this->knownUserService->expects($this->never())
+ ->method('isKnownToUser');
+ }
+
+ if ($expectedPlaceholder) {
+ $expected = new PlaceholderAvatar($folder, $user, $this->createMock(ILogger::class));
+ } else {
+ $expected = new UserAvatar($folder, $this->l10n, $user, $this->logger, $this->config);
+ }
+ $this->assertEquals($expected, $this->avatarManager->getAvatar('valid-user'));
+ }
}
diff --git a/tests/lib/Share20/DefaultShareProviderTest.php b/tests/lib/Share20/DefaultShareProviderTest.php
index f6ce4894dbb..40626bdb571 100644
--- a/tests/lib/Share20/DefaultShareProviderTest.php
+++ b/tests/lib/Share20/DefaultShareProviderTest.php
@@ -1558,9 +1558,6 @@ class DefaultShareProviderTest extends \Test\TestCase {
public function testDeleteFromSelfGroupUserNotInGroup() {
- $this->expectException(\OC\Share20\Exception\ProviderException::class);
- $this->expectExceptionMessage('Recipient not in receiving group');
-
$qb = $this->dbConn->getQueryBuilder();
$stmt = $qb->insert('share')
->values([